diff dmd2/clone.c @ 847:356e65836fb5

Merged DMD 2.021 frontend. Removed generated files from dmd/dmd2 dirs.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sat, 13 Dec 2008 16:14:37 +0100
parents f04dde6e882c
children 638d16625da2
line wrap: on
line diff
--- a/dmd2/clone.c	Sat Dec 13 13:15:31 2008 +0100
+++ b/dmd2/clone.c	Sat Dec 13 16:14:37 2008 +0100
@@ -87,6 +87,9 @@
     Arguments *fparams = new Arguments;
     fparams->push(param);
     Type *ftype = new TypeFunction(fparams, handle, FALSE, LINKd);
+#if STRUCTTHISREF
+    ((TypeFunction *)ftype)->isref = 1;
+#endif
 
     fop = new FuncDeclaration(0, 0, Id::assign, STCundefined, ftype);
 
@@ -106,12 +109,21 @@
 	    e = new DeclarationExp(0, tmp);
 	    ec = new AssignExp(0,
 		new VarExp(0, tmp),
-		new PtrExp(0, new ThisExp(0)));
+#if STRUCTTHISREF
+		new ThisExp(0)
+#else
+		new PtrExp(0, new ThisExp(0))
+#endif
+		);
 	    ec->op = TOKblit;
 	    e = Expression::combine(e, ec);
 	}
 	ec = new AssignExp(0,
+#if STRUCTTHISREF
+		new ThisExp(0),
+#else
 		new PtrExp(0, new ThisExp(0)),
+#endif
 		new IdentifierExp(0, Id::p));
 	ec->op = TOKblit;
 	e = Expression::combine(e, ec);
@@ -205,7 +217,9 @@
 
 	// Build *this = p;
 	Expression *e = new ThisExp(0);
+#if !STRUCTTHISREF
 	e = new PtrExp(0, e);
+#endif
 	AssignExp *ea = new AssignExp(0, e, new IdentifierExp(0, Id::p));
 	ea->op = TOKblit;
 	Statement *s = new ExpStatement(0, ea);