From cb6ad8cb745f3d458a28e0b0738d50e5390ed3bb Mon Sep 17 00:00:00 2001 From: Araq Date: Tue, 18 Sep 2012 20:59:14 +0200 Subject: bugfix: 'nimrod i' works again --- compiler/sem.nim | 4 +++- compiler/semexprs.nim | 7 +++---- tests/specials.nim | 4 ++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/compiler/sem.nim b/compiler/sem.nim index d13609b8a..16dd2d107 100755 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -215,8 +215,10 @@ proc SemStmtAndGenerateGenerics(c: PContext, n: PNode): PNode = if result.kind != nkEmpty: addSon(a, result) result = a result = hloStmt(c, result) + if gCmd == cmdInteractive and not isEmptyType(result.typ): + result = buildEchoStmt(c, result) result = transformStmt(c.module, result) - + proc RecoverContext(c: PContext) = # clean up in case of a semantic error: We clean up the stacks, etc. This is # faster than wrapping every stack operation in a 'try finally' block and diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 3c630eeec..a08d50307 100755 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -712,13 +712,12 @@ proc semExprNoType(c: PContext, n: PNode): PNode = sfDiscardable in n.sons[0].sym.flags result = semExpr(c, n, {efWantStmt}) if result.typ != nil and result.typ.kind notin {tyStmt, tyEmpty}: - if gCmd == cmdInteractive: - result = buildEchoStmt(c, result) - elif result.kind == nkNilLit: + if result.kind == nkNilLit: # XXX too much work and fixing would break bootstrapping: #Message(n.info, warnNilStatement) result.typ = nil - elif not ImplicitelyDiscardable(result) and result.typ.kind != tyError: + elif not ImplicitelyDiscardable(result) and result.typ.kind != tyError and + gCmd != cmdInteractive: localError(n.info, errDiscardValue) proc isTypeExpr(n: PNode): bool = diff --git a/tests/specials.nim b/tests/specials.nim index 698c39a2c..dd526e710 100644 --- a/tests/specials.nim +++ b/tests/specials.nim @@ -202,3 +202,7 @@ proc compileSpecialTests(r: var TResults, options: string) = compileDLLTests(r, options) compileDebuggerTests(r, options) + var given = callCompiler("nimrod i", "nimrod i", options) + r.addResult("nimrod i", given.msg, if given.err: reFailure else: reSuccess) + if not given.err: inc(r.passed) + -- cgit 1.4.1-2-gfad0