summary refs log tree commit diff stats
path: root/nim/ecmasgen.pas
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2009-01-07 17:03:25 +0100
committerAndreas Rumpf <rumpf_a@web.de>2009-01-07 17:03:25 +0100
commit439aa2d04d5528b5aed288f70895515d1da2dc3d (patch)
treecda2d0bc4d4f2bab189c4a0567cae3c1428c5ed0 /nim/ecmasgen.pas
parent1c8ddca7e08af9075a930edaca6c522d5e6fd8b5 (diff)
downloadNim-439aa2d04d5528b5aed288f70895515d1da2dc3d.tar.gz
version 0.7.4
Diffstat (limited to 'nim/ecmasgen.pas')
-rw-r--r--nim/ecmasgen.pas14
1 files changed, 11 insertions, 3 deletions
diff --git a/nim/ecmasgen.pas b/nim/ecmasgen.pas
index d50be9b0c..c9dfcfe25 100644
--- a/nim/ecmasgen.pas
+++ b/nim/ecmasgen.pas
@@ -896,7 +896,8 @@ begin
       or (skipGeneric(y.typ).kind in [tyRef, tyPtr, tyVar])
 end;
 
-procedure genAsgnAux(var p: TProc; x, y: PNode; var r: TCompRes);
+procedure genAsgnAux(var p: TProc; x, y: PNode; var r: TCompRes;
+                     noCopyNeeded: bool);
 var
   a, b: TCompRes;
 begin
@@ -906,7 +907,7 @@ begin
     etyObject: begin
       if a.com <> nil then appf(r.com, '$1;$n', [a.com]);
       if b.com <> nil then appf(r.com, '$1;$n', [b.com]);
-      if needsNoCopy(y) then
+      if needsNoCopy(y) or noCopyNeeded then
         appf(r.com, '$1 = $2;$n', [a.res, b.res])
       else begin
         useMagic(p, 'NimCopy');
@@ -930,7 +931,13 @@ end;
 procedure genAsgn(var p: TProc; n: PNode; var r: TCompRes);
 begin
   genLineDir(p, n, r);
-  genAsgnAux(p, n.sons[0], n.sons[1], r);
+  genAsgnAux(p, n.sons[0], n.sons[1], r, false);
+end;
+
+procedure genFastAsgn(var p: TProc; n: PNode; var r: TCompRes);
+begin
+  genLineDir(p, n, r);
+  genAsgnAux(p, n.sons[0], n.sons[1], r, true);
 end;
 
 procedure genSwap(var p: TProc; n: PNode; var r: TCompRes);
@@ -1692,6 +1699,7 @@ begin
     nkReturnStmt:  genReturnStmt(p, n, r);
     nkBreakStmt:   genBreakStmt(p, n, r);
     nkAsgn:        genAsgn(p, n, r);
+    nkFastAsgn:    genFastAsgn(p, n, r);
     nkDiscardStmt: begin
       genLineDir(p, n, r);
       gen(p, n.sons[0], r);