summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2013-08-31 02:07:52 +0200
committerAraq <rumpf_a@web.de>2013-08-31 02:07:52 +0200
commit6cc06cd35dc3aab58eb78757e76d5b72e5646c52 (patch)
tree11d4f8986208af2a0b7a225ac1ba85b29828ead3 /compiler
parent4d9b2f671ad1c8109c8478c9a78e05e25def5f78 (diff)
downloadNim-6cc06cd35dc3aab58eb78757e76d5b72e5646c52.tar.gz
fixes #569; C++ codegen works again
Diffstat (limited to 'compiler')
-rw-r--r--compiler/ccgexprs.nim19
1 files changed, 7 insertions, 12 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim
index 3475093cb..6b3906226 100644
--- a/compiler/ccgexprs.nim
+++ b/compiler/ccgexprs.nim
@@ -303,10 +303,11 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) =
       linefmt(p, cpsStmts, "$1 = $2;$n", rdLoc(dest), rdLoc(src))
   of tyObject:
     # XXX: check for subtyping?
-    if needsComplexAssignment(dest.t):
-      if asgnComplexity(dest.t.n) <= 4:
-        discard getTypeDesc(p.module, dest.t)
-        genOptAsgnObject(p, dest, src, flags, dest.t.n)
+    if needsComplexAssignment(ty):
+      if asgnComplexity(ty.n) <= 4:
+        discard getTypeDesc(p.module, ty)
+        internalAssert ty.n != nil
+        genOptAsgnObject(p, dest, src, flags, ty.n)
       else:
         genGenericAsgn(p, dest, src, flags)
     else:
@@ -642,14 +643,7 @@ proc genTupleElem(p: BProc, e: PNode, d: var TLoc) =
   case e.sons[1].kind
   of nkIntLit..nkUInt64Lit: i = int(e.sons[1].intVal)
   else: internalError(e.info, "genTupleElem")
-  when false:
-    if ty.n != nil:
-      var field = ty.n.sons[i].sym
-      if field == nil: InternalError(e.info, "genTupleElem")
-      if field.loc.r == nil: InternalError(e.info, "genTupleElem")
-      appf(r, ".$1", [field.loc.r])
-  else:
-    appf(r, ".Field$1", [toRope(i)])
+  appf(r, ".Field$1", [toRope(i)])
   putIntoDest(p, d, ty.sons[i], r)
 
 proc genRecordField(p: BProc, e: PNode, d: var TLoc) =
@@ -840,6 +834,7 @@ proc genAndOr(p: BProc, e: PNode, d: var TLoc, m: TMagic) =
 proc genEcho(p: BProc, n: PNode) =
   # this unusal way of implementing it ensures that e.g. ``echo("hallo", 45)``
   # is threadsafe.
+  discard lists.IncludeStr(p.module.headerFiles, "<stdio.h>")
   var args: PRope = nil
   var a: TLoc
   for i in countup(1, n.len-1):