Skip to content

Commit

Permalink
manual: Document the use of static as a proc call (#19084)
Browse files Browse the repository at this point in the history
* manual: Document the use of `static` as a proc call

Also adds tests.

Fixes #16987 .

* Update doc/manual.rst

Co-authored-by: konsumlamm <[email protected]>

* Use the "bug #NNNN" comment syntax for consistency

Ref:
https://nim-lang.github.io/Nim/contributing.html#writing-tests-stdlib

> Always refer to a GitHub issue using the following exact syntax: bug
for tooling.

* manual: Undocument usage of foo.static

foo.static and foo.static() are not expected to work.

Ref: https://github.com/nim-lang/Nim/pull/19084/files#r741203578

Co-authored-by: konsumlamm <[email protected]>
  • Loading branch information
kaushalmodi and konsumlamm authored Nov 3, 2021
1 parent 539bced commit 5fed1c0
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
14 changes: 14 additions & 0 deletions doc/manual.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2975,6 +2975,20 @@ Even some code that has side effects is permitted in a static block:
static:
echo "echo at compile time"
`static` can also be used like a routine.

.. code-block:: nim
proc getNum(a: int): int = a
# Below calls "echo getNum(123)" at compile time.
static:
echo getNum(123)
# Below call evaluates the "getNum(123)" at compile time, but its
# result gets used at run time.
echo static(getNum(123))
There are limitations on what Nim code can be executed at compile time;
see `Restrictions on Compile-Time Execution
<#restrictions-on-compileminustime-execution>`_ for details.
Expand Down
12 changes: 12 additions & 0 deletions tests/system/tstatic_callable.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# bug #16987

proc getNum(a: int): int = a

# Below calls "doAssert getNum(123) == 123" at compile time.
static:
doAssert getNum(123) == 123

# Below calls evaluate the "getNum(123)" at compile time, but the
# results of those calls get used at run time.
doAssert (static getNum(123)) == 123
doAssert (static(getNum(123))) == 123
14 changes: 14 additions & 0 deletions tests/system/tstatic_callable_error.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# bug #16987

discard """
errormsg: "cannot evaluate at compile time: inp"
nimout: '''
tstatic_callable_error.nim(14, 21) Error: cannot evaluate at compile time: inp'''
"""


# line 10
proc getNum(a: int): int = a

let inp = 123
echo (static getNum(inp))

0 comments on commit 5fed1c0

Please sign in to comment.