next steps to hygienic templates

This commit is contained in:
Araq 2012-08-20 08:44:17 +02:00
commit da190876de
17 changed files with 97 additions and 76 deletions

View file

@ -22,18 +22,14 @@ proc considerAcc*(n: PNode): PIdent =
of 0: GlobalError(n.info, errIdentifierExpected, renderTree(n))
of 1: result = considerAcc(n.sons[0])
else:
if n.len == 2 and n[0].kind == nkIdent and n[0].ident.id == ord(wStar):
# XXX find a better way instead of `*x` for 'genSym'
result = genSym(n[1].ident.s)
else:
var id = ""
for i in 0.. <n.len:
let x = n.sons[i]
case x.kind
of nkIdent: id.add(x.ident.s)
of nkSym: id.add(x.sym.name.s)
else: GlobalError(n.info, errIdentifierExpected, renderTree(n))
result = getIdent(id)
var id = ""
for i in 0.. <n.len:
let x = n.sons[i]
case x.kind
of nkIdent: id.add(x.ident.s)
of nkSym: id.add(x.sym.name.s)
else: GlobalError(n.info, errIdentifierExpected, renderTree(n))
result = getIdent(id)
else:
GlobalError(n.info, errIdentifierExpected, renderTree(n))
@ -46,8 +42,7 @@ proc errorSym*(c: PContext, n: PNode): PSym =
considerAcc(m)
else:
getIdent("err:" & renderTree(m))
result = newSym(skError, ident, getCurrOwner())
result.info = n.info
result = newSym(skError, ident, getCurrOwner(), n.info)
result.typ = errorType(c)
incl(result.flags, sfDiscardable)
# pretend it's imported from some unknown module to prevent cascading errors: