diff options
author | Araq <rumpf_a@web.de> | 2013-07-24 21:58:17 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2013-07-24 21:58:17 +0200 |
commit | f9426bfcd54258730e14076b541cb20b7f86f6df (patch) | |
tree | 1ff145a3317e5511a0eec17c36faadbb4a1e7ee9 /compiler/evals.nim | |
parent | b403b41aecaa089e42be74c9a5bd70f1446f0b24 (diff) | |
download | Nim-f9426bfcd54258730e14076b541cb20b7f86f6df.tar.gz |
added macros.genSym
Diffstat (limited to 'compiler/evals.nim')
-rw-r--r-- | compiler/evals.nim | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/compiler/evals.nim b/compiler/evals.nim index f89417dc8..6266668f9 100644 --- a/compiler/evals.nim +++ b/compiler/evals.nim @@ -1249,6 +1249,16 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode = of mNBindSym: # trivial implementation: result = n.sons[1] + of mNGenSym: + evalX(n.sons[1], {efLValue}) + let k = getOrdValue(result) + evalX(n.sons[2], {efLValue}) + let b = result + let name = if b.strVal.len == 0: ":tmp" else: b.strVal + if k < 0 or k > ord(high(TSymKind)): + internalError(n.info, "request to create a symbol with invalid kind") + result = newSymNode(newSym(k.TSymKind, name.getIdent, c.module, n.info)) + incl(result.sym.flags, sfGenSym) of mStrToIdent: result = evalAux(c, n.sons[1], {}) if isSpecial(result): return |