diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 96a8415807..64a8d2a4f9 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -963,12 +963,15 @@ proc evalAtCompileTime(c: PContext, n: PNode): PNode = # echo "SUCCESS evaluated at compile time: ", call.renderTree proc semStaticExpr(c: PContext, n: PNode; expectedType: PType = nil): PNode = + let oldErrorCount = c.config.errorCounter inc c.inStaticContext openScope(c) let a = semExprWithType(c, n, expectedType = expectedType) closeScope(c) dec c.inStaticContext - if a.findUnresolvedStatic != nil: return a + if a.findUnresolvedStatic != nil or + c.config.errorCounter != oldErrorCount: + return a result = evalStaticExpr(c.module, c.idgen, c.graph, a, c.p.owner) if result.isNil: localError(c.config, n.info, errCannotInterpretNodeX % renderTree(n)) diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 380c50ce51..d31bb5a9af 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -2919,13 +2919,15 @@ proc semPragmaBlock(c: PContext, n: PNode; expectedType: PType = nil): PNode = proc semStaticStmt(c: PContext, n: PNode): PNode = #echo "semStaticStmt" #writeStackTrace() + let oldErrorCount = c.config.errorCounter inc c.inStaticContext openScope(c) let a = semStmt(c, n[0], {}) closeScope(c) dec c.inStaticContext n[0] = a - evalStaticStmt(c.module, c.idgen, c.graph, a, c.p.owner) + if c.config.errorCounter == oldErrorCount: + evalStaticStmt(c.module, c.idgen, c.graph, a, c.p.owner) when false: # for incremental replays, keep the AST as required for replays: result = n diff --git a/tests/errmsgs/t25732.nim b/tests/errmsgs/t25732.nim new file mode 100644 index 0000000000..6293f55bbd --- /dev/null +++ b/tests/errmsgs/t25732.nim @@ -0,0 +1,15 @@ +discard """ +cmd: "nim check --hints:off $file" +action: "reject" +nimout: ''' +t25732.nim(15, 32) Error: undeclared identifier: 'a' +t25732.nim(15, 32) Error: expression 'a' has no type (or is ambiguous) +t25732.nim(15, 33) Error: undeclared field: 'b' +t25732.nim(15, 33) Error: undeclared field: '.' +t25732.nim(15, 33) Error: undeclared field: '.' +''' +""" + + + +static: (for f in [0]: discard a.b == f) \ No newline at end of file