diff options
-rwxr-xr-x | compiler/ast.nim | 2 | ||||
-rwxr-xr-x | compiler/evals.nim | 4 | ||||
-rwxr-xr-x | compiler/msgs.nim | 2 | ||||
-rwxr-xr-x | compiler/renderer.nim | 7 | ||||
-rwxr-xr-x | compiler/semstmts.nim | 25 | ||||
-rwxr-xr-x | compiler/semthreads.nim | 2 | ||||
-rwxr-xr-x | lib/pure/collections/tables.nim | 2 | ||||
-rwxr-xr-x | lib/pure/osproc.nim | 8 | ||||
-rwxr-xr-x | lib/system/ansi_c.nim | 2 | ||||
-rwxr-xr-x | todo.txt | 6 |
10 files changed, 38 insertions, 22 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim index 82a20c312..fc21235bc 100755 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. diff --git a/compiler/evals.nim b/compiler/evals.nim index 5623f7955..4b42f5ada 100755 --- a/compiler/evals.nim +++ b/compiler/evals.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -319,7 +319,7 @@ proc evalVar(c: PEvalContext, n: PNode): PNode = else: if x.kind notin {nkEmpty..nkNilLit}: discardSons(x) - for i in countup(0, sonsLen(result) - 1): addSon(x, result.sons[i]) + for j in countup(0, sonsLen(result) - 1): addSon(x, result.sons[j]) result = emptyNode proc aliasNeeded(n: PNode, flags: TEvalFlags): bool = diff --git a/compiler/msgs.nim b/compiler/msgs.nim index 16603a9a8..9858b1b9e 100755 --- a/compiler/msgs.nim +++ b/compiler/msgs.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. diff --git a/compiler/renderer.nim b/compiler/renderer.nim index c8ee66e03..48a190ec1 100755 --- a/compiler/renderer.nim +++ b/compiler/renderer.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -753,8 +753,7 @@ proc doParamsAux(g: var TSrcGen, params: PNode) = proc gsub(g: var TSrcGen, n: PNode, c: TContext) = if isNil(n): return - var - L: int + var a: TContext if n.comment != nil: pushCom(g, n) case n.kind # atoms: @@ -1096,7 +1095,7 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) = incl(a.flags, rfInConstExpr) gsection(g, n, a, tkConst, "const") of nkVarSection, nkLetSection: - L = sonsLen(n) + var L = sonsLen(n) if L == 0: return if n.kind == nkVarSection: putWithSpace(g, tkVar, "var") else: putWithSpace(g, tkLet, "let") diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index d78112ee5..c86e3eb91 100755 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -172,11 +172,16 @@ proc fitRemoveHiddenConv(c: PContext, typ: Ptype, n: PNode): PNode = changeType(result, typ) proc findShadowedVar(c: PContext, v: PSym): PSym = - for i in countdown(c.tab.tos - 2, 0): + for i in countdown(c.tab.tos - 2, ModuleTablePos+1): let shadowed = StrTableGet(c.tab.stack[i], v.name) if shadowed != nil and shadowed.kind in skLocalVars: return shadowed +proc identWithin(n: PNode, s: PIdent): bool = + for i in 0 .. n.safeLen-1: + if identWithin(n.sons[i], s): return true + result = n.kind == nkSym and n.sym.name.id == s.id + proc semIdentDef(c: PContext, n: PNode, kind: TSymKind): PSym = if isTopLevel(c): result = semIdentWithPragma(c, kind, n, {sfExported}) @@ -239,7 +244,10 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode = let shadowed = findShadowedVar(c, v) if shadowed != nil: shadowed.flags.incl(sfShadowed) - Message(a.info, warnShadowIdent, v.name.s) + # a shadowed variable is an error unless it appears on the right + # side of the '=': + if warnShadowIdent in gNotes and not identWithin(def, v.name): + Message(a.info, warnShadowIdent, v.name.s) if def != nil and def.kind != nkEmpty: # this is only needed for the evaluation pass: v.ast = def @@ -368,6 +376,15 @@ proc semForFields(c: PContext, n: PNode, m: TMagic): PNode = b.add(ast.emptyNode) stmts.add(b) +proc addForVarDecl(c: PContext, v: PSym) = + if warnShadowIdent in gNotes: + let shadowed = findShadowedVar(c, v) + if shadowed != nil: + # XXX should we do this here? + #shadowed.flags.incl(sfShadowed) + Message(v.info, warnShadowIdent, v.name.s) + addDecl(c, v) + proc semForVars(c: PContext, n: PNode): PNode = result = n var length = sonsLen(n) @@ -383,7 +400,7 @@ proc semForVars(c: PContext, n: PNode): PNode = # for an example: v.typ = n.sons[length-2].typ n.sons[0] = newSymNode(v) - if sfGenSym notin v.flags: addDecl(c, v) + if sfGenSym notin v.flags: addForVarDecl(c, v) else: LocalError(n.info, errWrongNumberOfVariables) elif length-2 != sonsLen(iter): @@ -394,7 +411,7 @@ proc semForVars(c: PContext, n: PNode): PNode = if getCurrOwner().kind == skModule: incl(v.flags, sfGlobal) v.typ = iter.sons[i] n.sons[i] = newSymNode(v) - if sfGenSym notin v.flags: addDecl(c, v) + if sfGenSym notin v.flags: addForVarDecl(c, v) Inc(c.p.nestedLoopCounter) n.sons[length-1] = SemStmt(c, n.sons[length-1]) Dec(c.p.nestedLoopCounter) diff --git a/compiler/semthreads.nim b/compiler/semthreads.nim index 75621be79..9fc6a54d9 100755 --- a/compiler/semthreads.nim +++ b/compiler/semthreads.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. diff --git a/lib/pure/collections/tables.nim b/lib/pure/collections/tables.nim index 3b252f1d2..fc394d1f8 100755 --- a/lib/pure/collections/tables.nim +++ b/lib/pure/collections/tables.nim @@ -1,7 +1,7 @@ # # # Nimrod's Runtime Library -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim index a8c0ea809..ecf38f9f6 100755 --- a/lib/pure/osproc.nim +++ b/lib/pure/osproc.nim @@ -1,7 +1,7 @@ # # # Nimrod's Runtime Library -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -201,9 +201,9 @@ proc execProcesses*(cmds: openArray[string], q[r] = startCmd(cmds[i], options=options) inc(i) if i > high(cmds): break - for i in 0..m-1: - if q[i] != nil: close(q[i]) - result = max(waitForExit(q[i]), result) + for j in 0..m-1: + if q[j] != nil: close(q[j]) + result = max(waitForExit(q[j]), result) else: for i in 0..high(cmds): var p = startCmd(cmds[i], options=options) diff --git a/lib/system/ansi_c.nim b/lib/system/ansi_c.nim index 195bc2e60..f89577553 100755 --- a/lib/system/ansi_c.nim +++ b/lib/system/ansi_c.nim @@ -1,7 +1,7 @@ # # # Nimrod's Runtime Library -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. diff --git a/todo.txt b/todo.txt index 0b6457efc..dd3290117 100755 --- a/todo.txt +++ b/todo.txt @@ -1,9 +1,6 @@ version 0.9.2 ============= -- FFI: - * test libffi on windows - * test: times.format with the FFI - fix closure bug finally - fix marshal bug - investigate nimgame bug @@ -12,6 +9,9 @@ version 0.9.2 version 0.9.X ============= +- FFI: + * test libffi on windows + * test: times.format with the FFI - test&finish first class iterators: * nested iterators - implement the missing features wrt inheritance |