added macros.genSym

This commit is contained in:
Araq 2013-07-24 21:58:17 +02:00
commit f9426bfcd5
5 changed files with 23 additions and 5 deletions

View file

@ -488,7 +488,7 @@ type
mNNewNimNode, mNCopyNimNode, mNCopyNimTree, mStrToIdent, mIdentToStr,
mNBindSym, mLocals, mNCallSite,
mEqIdent, mEqNimrodNode, mNHint, mNWarning, mNError,
mInstantiationInfo, mGetTypeInfo
mInstantiationInfo, mGetTypeInfo, mNGenSym
# things that we can evaluate safely at compile time, even if not asked for it:
const

View file

@ -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