diff options
author | Araq <rumpf_a@web.de> | 2013-08-30 12:44:27 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2013-08-30 12:44:27 +0200 |
commit | 8710118b2cb1428a6ddb7929edaeef060f360be9 (patch) | |
tree | 96772e55b0e6bb92c70044083bbb9db4d9918f13 /compiler/evals.nim | |
parent | a17076cf4fdfb27ee1d1f3be232b81584a99432a (diff) | |
parent | c934a33ccd85716b66d44bca6a1764204507f33e (diff) | |
download | Nim-8710118b2cb1428a6ddb7929edaeef060f360be9.tar.gz |
Merge branch 'master' of github.com:Araq/Nimrod
Diffstat (limited to 'compiler/evals.nim')
-rw-r--r-- | compiler/evals.nim | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/compiler/evals.nim b/compiler/evals.nim index 3f09664a7..053068ea4 100644 --- a/compiler/evals.nim +++ b/compiler/evals.nim @@ -904,18 +904,15 @@ proc evalParseStmt(c: PEvalContext, n: PNode): PNode = code.info.line.int) #result.typ = newType(tyStmt, c.module) -proc evalTypeTrait*(n: PNode, context: PSym): PNode = - ## XXX: This should be pretty much guaranteed to be true - # by the type traits procs' signatures, but until the - # code is more mature it doesn't hurt to be extra safe - internalAssert n.sons.len >= 2 and n.sons[1].kind == nkSym - - let typ = n.sons[1].sym.typ.skipTypes({tyTypeDesc}) - case n.sons[0].sym.name.s.normalize +proc evalTypeTrait*(trait, operand: PNode, context: PSym): PNode = + InternalAssert operand.kind == nkSym + + let typ = operand.sym.typ.skipTypes({tyTypeDesc}) + case trait.sym.name.s.normalize of "name": - result = newStrNode(nkStrLit, typ.typeToString(preferExported)) + result = newStrNode(nkStrLit, typ.typeToString(preferName)) result.typ = newType(tyString, context) - result.info = n.info + result.info = trait.info else: internalAssert false @@ -1037,8 +1034,8 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode = of mParseStmtToAst: result = evalParseStmt(c, n) of mExpandToAst: result = evalExpandToAst(c, n) of mTypeTrait: - n.sons[1] = evalAux(c, n.sons[1], {}) - result = evalTypeTrait(n, c.module) + let operand = evalAux(c, n.sons[1], {}) + result = evalTypeTrait(n[0], operand, c.module) of mIs: n.sons[1] = evalAux(c, n.sons[1], {}) result = evalIsOp(n) |