From 0e22a51095d189080ef8af445376fb7ccc061c85 Mon Sep 17 00:00:00 2001 From: Araq Date: Sat, 7 Jan 2012 11:10:14 +0100 Subject: bugfix: removed newSons legacy --- compiler/ast.nim | 17 ++++++++++------- compiler/astalgo.nim | 1 + compiler/semgnrc.nim | 3 ++- todo.txt | 4 ++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/compiler/ast.nim b/compiler/ast.nim index 9eb2d21ac..46dc5e0de 100755 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -877,8 +877,10 @@ proc len*(n: PType): int = else: result = len(n.sons) proc newSons(father: PType, length: int) = - if isNil(father.sons): father.sons = @[] - setlen(father.sons, len(father.sons) + length) + if isNil(father.sons): + newSeq(father.sons, length) + else: + setlen(father.sons, length) proc addSon(father, son: PType) = if isNil(father.sons): father.sons = @[] @@ -890,8 +892,10 @@ proc sonsLen(n: PNode): int = else: result = len(n.sons) proc newSons(father: PNode, length: int) = - if isNil(father.sons): father.sons = @[] - setlen(father.sons, len(father.sons) + length) + if isNil(father.sons): + newSeq(father.sons, length) + else: + setlen(father.sons, length) proc addSon(father, son: PNode) = assert son != nil @@ -937,7 +941,7 @@ proc shallowCopy*(src: PNode): PNode = of nkSym: result.sym = src.sym of nkIdent: result.ident = src.ident of nkStrLit..nkTripleStrLit: result.strVal = src.strVal - else: newSons(result, sonsLen(src)) + else: newSeq(result.sons, sonsLen(src)) proc copyTree(src: PNode): PNode = # copy a whole syntax tree; performs deep copying @@ -954,8 +958,7 @@ proc copyTree(src: PNode): PNode = of nkIdent: result.ident = src.ident of nkStrLit..nkTripleStrLit: result.strVal = src.strVal else: - result.sons = nil - newSons(result, sonsLen(src)) + newSeq(result.sons, sonsLen(src)) for i in countup(0, sonsLen(src) - 1): result.sons[i] = copyTree(src.sons[i]) diff --git a/compiler/astalgo.nim b/compiler/astalgo.nim index 7303e3ff0..7128102a8 100755 --- a/compiler/astalgo.nim +++ b/compiler/astalgo.nim @@ -583,6 +583,7 @@ proc StrTableIncl*(t: var TStrTable, n: PSym): bool = # returns true if n is already in the string table: # It is essential that `n` is written nevertheless! # This way the newest redefinition is picked by the semantic analyses! + assert n.name != nil var h: THash = n.name.h and high(t.data) while true: var it = t.data[h] diff --git a/compiler/semgnrc.nim b/compiler/semgnrc.nim index a2e64e785..fb98e870b 100755 --- a/compiler/semgnrc.nim +++ b/compiler/semgnrc.nim @@ -246,7 +246,8 @@ proc semGenericStmt(c: PContext, n: PNode, of nkProcDef, nkMethodDef, nkConverterDef, nkMacroDef, nkTemplateDef, nkIteratorDef, nkLambda: checkSonsLen(n, bodyPos + 1) - addPrelimDecl(c, newSymS(skUnknown, getIdentNode(n.sons[0]), c)) + if n.kind != nkLambda: + addPrelimDecl(c, newSymS(skUnknown, getIdentNode(n.sons[0]), c)) openScope(c.tab) n.sons[genericParamsPos] = semGenericStmt(c, n.sons[genericParamsPos], flags, toBind) diff --git a/todo.txt b/todo.txt index 091426bc5..5a6990520 100755 --- a/todo.txt +++ b/todo.txt @@ -1,8 +1,7 @@ version 0.8.14 ============== -- BUG: type TX = TTable[string, int] -- BUG: temp2.nim triggers weird compiler bug +- fix remaining generics bugs - fix line info in assertions - implicit invokation of `items`/`pairs` seems nice; ensure items(23) does not compile though @@ -48,6 +47,7 @@ Bugs - bug: stress testing basic method example (eval example) without ``-d:release`` leaks memory; good way to figure out how a fixed amount of stack can hold an arbitrary number of GC roots! +- BUG: temp2.nim triggers weird compiler and except.nim bug version 0.9.XX -- cgit 1.4.1-2-gfad0