diff --git a/compiler/semtempl.nim b/compiler/semtempl.nim index 84ba49e0cf..371abe1e3d 100644 --- a/compiler/semtempl.nim +++ b/compiler/semtempl.nim @@ -581,6 +581,11 @@ proc semPatternBody(c: var TemplCtx, n: PNode): PNode = localError(n.info, errInvalidExpression) result = n + proc stupidStmtListExpr(n: PNode): bool = + for i in 0 .. n.len-2: + if n[i].kind notin {nkEmpty, nkCommentStmt}: return false + result = true + result = n case n.kind of nkIdent: @@ -606,6 +611,12 @@ proc semPatternBody(c: var TemplCtx, n: PNode): PNode = localError(n.info, errInvalidExpression) else: localError(n.info, errInvalidExpression) + of nkStmtList, nkStmtListExpr: + if stupidStmtListExpr(n): + result = semPatternBody(c, n.lastSon) + else: + for i in countup(0, sonsLen(n) - 1): + result.sons[i] = semPatternBody(c, n.sons[i]) of nkCallKinds: let s = qualifiedLookUp(c.c, n.sons[0], {}) if s != nil: diff --git a/compiler/vm.nim b/compiler/vm.nim index 05d00c19f4..0db287c6aa 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -1461,6 +1461,8 @@ proc evalConstExprAux(module, prc: PSym, n: PNode, mode: TEvalMode): PNode = let n = transformExpr(module, n) setupGlobalCtx(module) var c = globalCtx + let oldMode = c.mode + defer: c.mode = oldMode c.mode = mode let start = genExpr(c, n, requiresValue = mode!=emStaticStmt) if c.code[start].opcode == opcEof: return emptyNode diff --git a/tests/bind/tbind2.nim b/tests/bind/tbind2.nim index d2219765d0..0e0cbd7880 100644 --- a/tests/bind/tbind2.nim +++ b/tests/bind/tbind2.nim @@ -1,6 +1,6 @@ discard """ file: "tbind2.nim" - line: 14 + line: 12 errormsg: "ambiguous call" """ # Test the new ``bind`` keyword for templates diff --git a/tests/template/twrongmapit.nim b/tests/template/twrongmapit.nim index bca1292b81..0a6d694f67 100644 --- a/tests/template/twrongmapit.nim +++ b/tests/template/twrongmapit.nim @@ -1,7 +1,5 @@ discard """ - errormsg: "'" - file: "sequtils.nim" - line: 435 + output: "####" """ # unfortunately our tester doesn't support multiple lines of compiler # error messages yet... @@ -29,4 +27,6 @@ when ATTEMPT == 0: # bug #1543 import sequtils -(var i= @[""];i).mapIt(it) +(var i = @[""];i).mapIt(it) +# now works: +echo "##", i[0], "##"