summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rwxr-xr-xcompiler/semstmts.nim2
-rwxr-xr-xcompiler/transf.nim11
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