From a28cf4e9cbb7e202d355d669d16b86457932ec2a Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Wed, 7 Sep 2011 16:32:43 +0300 Subject: [PATCH] Quick Fix: Constant expressions used in when statements and tuple indexing are properly evaluated now Even further step tested to be OK: ```nimrod proc semConstExpr(c: PContext, n: PNode): PNode = result = semAndEvalConstExpr(c, n) ``` --- compiler/semexprs.nim | 2 +- compiler/semstmts.nim | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 1b4f778a86..5f4c7749a3 100755 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -747,7 +747,7 @@ proc semSubscript(c: PContext, n: PNode, flags: TExprFlags): PNode = checkSonsLen(n, 2) n.sons[0] = makeDeref(n.sons[0]) # [] operator for tuples requires constant expression: - n.sons[1] = semConstExpr(c, n.sons[1]) + n.sons[1] = semAndEvalConstExpr(c, n.sons[1]) if skipTypes(n.sons[1].typ, {tyGenericInst, tyRange, tyOrdinal}).kind in {tyInt..tyInt64}: var idx = getOrdValue(n.sons[1]) diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index ce870a3ad7..decc8a2d73 100755 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -19,7 +19,7 @@ proc semWhen(c: PContext, n: PNode): PNode = case it.kind of nkElifBranch: checkSonsLen(it, 2) - var e = semConstBoolExpr(c, it.sons[0]) + var e = semAndEvalConstExpr(c, it.sons[0]) if (e.kind != nkIntLit): InternalError(n.info, "semWhen") if (e.intVal != 0) and (result == nil): result = semStmt(c, it.sons[1]) # do not open a new scope!