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(-)
This commit is contained in:
Leandro Lucarella
2010-01-06 15:18:23 -03:00
parent 003f306cba
commit cae60aa406
5 changed files with 11 additions and 4 deletions

View File

@@ -250,7 +250,7 @@ void ClassDeclaration::semantic(Scope *sc)
return;
}
if (symtab)
{ if (!scope)
{ if (sizeok == 1 || !scope)
{ //printf("\tsemantic for '%s' is already completed\n", toChars());
return; // semantic() already completed
}

View File

@@ -61,7 +61,7 @@ void EnumDeclaration::semantic(Scope *sc)
memtype = Type::tint32;
if (symtab) // if already done
{ if (!scope)
{ if (isdone || !scope)
return; // semantic() already completed
}
else
@@ -96,6 +96,8 @@ void EnumDeclaration::semantic(Scope *sc)
memtype = Type::tint32;
}
isdone = 1;
t = isAnonymous() ? memtype : type;
symtab = new DsymbolTable();
sce = sc->push(this);

View File

@@ -42,6 +42,8 @@ struct EnumDeclaration : ScopeDsymbol
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);

View File

@@ -58,7 +58,7 @@ Global::Global()
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;

View File

@@ -253,8 +253,11 @@ void StructDeclaration::semantic(Scope *sc)
return;
if (symtab)
{ if (!scope)
{ if (sizeok == 1 || !scope)
{ //printf("already completed\n");
scope = NULL;
return; // semantic() already completed
}
}
else
symtab = new DsymbolTable();