summary refs log tree commit diff stats
path: root/lib/core
diff options
context:
space:
mode:
authorandri lim <jangko128@gmail.com>2018-08-02 17:56:44 +0700
committerAndreas Rumpf <rumpf_a@web.de>2018-08-02 12:56:44 +0200
commit78c0ac54070e860ec0ed8ac0b58658f7ad52227a (patch)
treedc20154f92f6178df405cf8da99612ee2f99323c /lib/core
parent674bd7bfad100a07e051e0a310bcf0a64c355a79 (diff)
downloadNim-78c0ac54070e860ec0ed8ac0b58658f7ad52227a.tar.gz
fixes #7827, bindSym enhancement (#8499)
* bindSym power up, working prototype

* update bindSym doc

* add bindSym test

* fix some typo

* fix bindSym doc

* get rid of specialops field from vm

* add experimental: dynamicBindSym
Diffstat (limited to 'lib/core')
-rw-r--r--lib/core/macros.nim10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/core/macros.nim b/lib/core/macros.nim
index 17178a634..d4e8ada0a 100644
--- a/lib/core/macros.nim
+++ b/lib/core/macros.nim
@@ -382,16 +382,24 @@ type
 
 {.deprecated: [TBindSymRule: BindSymRule].}
 
-proc bindSym*(ident: static[string], rule: BindSymRule = brClosed): NimNode {.
+proc bindSym*(ident: string | NimNode, rule: BindSymRule = brClosed): NimNode {.
               magic: "NBindSym", noSideEffect.}
   ## creates a node that binds `ident` to a symbol node. The bound symbol
   ## may be an overloaded symbol.
+  ## if `ident` is a NimNode, it must have nkIdent kind.
   ## If ``rule == brClosed`` either an ``nkClosedSymChoice`` tree is
   ## returned or ``nkSym`` if the symbol is not ambiguous.
   ## If ``rule == brOpen`` either an ``nkOpenSymChoice`` tree is
   ## returned or ``nkSym`` if the symbol is not ambiguous.
   ## If ``rule == brForceOpen`` always an ``nkOpenSymChoice`` tree is
   ## returned even if the symbol is not ambiguous.
+  ##
+  ## experimental feature:
+  ## use {.experimental: "dynamicBindSym".} to activate it
+  ## if called from template / regular code, `ident` and `rule` must be
+  ## constant expression / literal value.
+  ## if called from macros / compile time procs / static blocks,
+  ## `ident` and `rule` can be VM computed value.
 
 proc genSym*(kind: NimSymKind = nskLet; ident = ""): NimNode {.
   magic: "NGenSym", noSideEffect.}