diff options
Diffstat (limited to 'compiler')
-rwxr-xr-x | compiler/semstmts.nim | 2 | ||||
-rwxr-xr-x | compiler/transf.nim | 11 |
2 files changed, 10 insertions, 3 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index b62f77888..193d6b7cf 100755 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1048,6 +1048,7 @@ proc instantiateDestructor*(c: PContext, typ: PType): bool = let fullDef = newNode(nkProcDef, i, @[ newIdentNode(destructorName, i), emptyNode, + emptyNode, newNode(nkFormalParams, i, @[ emptyNode, newNode(nkIdentDefs, i, @[ @@ -1056,6 +1057,7 @@ proc instantiateDestructor*(c: PContext, typ: PType): bool = emptyNode]), ]), newNode(nkPragma, i, @[destructorPragma]), + emptyNode, generated ]) discard semProc(c, fullDef) diff --git a/compiler/transf.nim b/compiler/transf.nim index d5ffbfd65..170f8ff0f 100755 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -140,6 +140,7 @@ proc transformVarSection(c: PTransf, v: PNode): PTransNode = result[i] = PTransNode(it) elif it.kind == nkIdentDefs: if it.sons[0].kind != nkSym: InternalError(it.info, "transformVarSection") + InternalAssert(it.len == 3) var newVar = copySym(it.sons[0].sym) incl(newVar.flags, sfFromGeneric) # fixes a strange bug for rodgen: @@ -498,9 +499,13 @@ proc transformCase(c: PTransf, n: PNode): PTransNode = add(result, elseBranch) proc transformArrayAccess(c: PTransf, n: PNode): PTransNode = - result = newTransNode(n) - result[0] = transform(c, skipConv(n.sons[0])) - result[1] = transform(c, skipConv(n.sons[1])) + # XXX this is really bad; transf should use a proper AST visitor + if n.sons[0].kind == nkSym and n.sons[0].sym.kind == skType: + result = n.ptransnode + else: + result = newTransNode(n) + for i in 0 .. < n.len: + result[i] = transform(c, skipConv(n.sons[i])) proc getMergeOp(n: PNode): PSym = case n.kind |