mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-06 07:38:24 +00:00
manual: Document the use of static as a proc call (#19084)
* manual: Document the use of `static` as a proc call Also adds tests. Fixes https://github.com/nim-lang/Nim/issues/16987 . * Update doc/manual.rst Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com> * 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 <44230978+konsumlamm@users.noreply.github.com>
This commit is contained in:
@@ -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.
|
||||
|
||||
12
tests/system/tstatic_callable.nim
Normal file
12
tests/system/tstatic_callable.nim
Normal file
@@ -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
tests/system/tstatic_callable_error.nim
Normal file
14
tests/system/tstatic_callable_error.nim
Normal file
@@ -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))
|
||||
Reference in New Issue
Block a user