changeset 1628:6c36e3f49b28

Merge DMD r324: bugzilla 3663 and 3664 - fwd ref regressions --- dmd/class.c | 2 +- dmd/enum.c | 4 +++- dmd/enum.h | 2 ++ dmd/mars.c | 2 +- dmd/struct.c | 5 ++++- 5 files changed, 11 insertions(+), 4 deletions(-)
author Leandro Lucarella <llucax@gmail.com>
date Wed, 06 Jan 2010 15:18:23 -0300
parents e83f0778c260
children b07d683ba4d0
files dmd/class.c dmd/enum.c dmd/enum.h dmd/mars.c dmd/struct.c
diffstat 5 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/dmd/class.c	Wed Jan 06 15:18:23 2010 -0300
+++ b/dmd/class.c	Wed Jan 06 15:18:23 2010 -0300
@@ -250,7 +250,7 @@
 	return;
     }
     if (symtab)
-    {	if (!scope)
+    {	if (sizeok == 1 || !scope)
 	{   //printf("\tsemantic for '%s' is already completed\n", toChars());
 	    return;		// semantic() already completed
 	}
--- a/dmd/enum.c	Wed Jan 06 15:18:23 2010 -0300
+++ b/dmd/enum.c	Wed Jan 06 15:18:23 2010 -0300
@@ -61,7 +61,7 @@
 	memtype = Type::tint32;
 
     if (symtab)			// if already done
-    {	if (!scope)
+    {	if (isdone || !scope)
 	    return;		// semantic() already completed
     }
     else
@@ -96,6 +96,8 @@
 	memtype = Type::tint32;
     }
 
+    isdone = 1;
+
     t = isAnonymous() ? memtype : type;
     symtab = new DsymbolTable();
     sce = sc->push(this);
--- a/dmd/enum.h	Wed Jan 06 15:18:23 2010 -0300
+++ b/dmd/enum.h	Wed Jan 06 15:18:23 2010 -0300
@@ -42,6 +42,8 @@
     Expression *defaultval;	// default initializer
 #endif
     int isdeprecated;
+    int isdone;			// 0: not done
+				// 1: semantic() successfully completed
 
     EnumDeclaration(Loc loc, Identifier *id, Type *memtype);
     Dsymbol *syntaxCopy(Dsymbol *s);
--- a/dmd/mars.c	Wed Jan 06 15:18:23 2010 -0300
+++ b/dmd/mars.c	Wed Jan 06 15:18:23 2010 -0300
@@ -58,7 +58,7 @@
 
     copyright = "Copyright (c) 1999-2009 by Digital Mars and Tomas Lindquist Olsen";
     written = "written by Walter Bright and Tomas Lindquist Olsen";
-    version = "v1.054";
+    version = "v1.055";
     ldc_version = LDC_REV;
     llvm_version = LLVM_REV_STR;
     global.structalign = 8;
--- a/dmd/struct.c	Wed Jan 06 15:18:23 2010 -0300
+++ b/dmd/struct.c	Wed Jan 06 15:18:23 2010 -0300
@@ -253,8 +253,11 @@
 	return;
 
     if (symtab)
-    {   if (!scope)
+    {   if (sizeok == 1 || !scope)
+	{   //printf("already completed\n");
+	    scope = NULL;
             return;             // semantic() already completed
+	}
     }
     else
         symtab = new DsymbolTable();