# HG changeset patch # User Leandro Lucarella # Date 1262801903 10800 # Node ID 6c36e3f49b28fbed79e9d3da4fad77632b16a65c # Parent e83f0778c260e391f087af1a29d243f279e64e7e 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(-) diff -r e83f0778c260 -r 6c36e3f49b28 dmd/class.c --- 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 } diff -r e83f0778c260 -r 6c36e3f49b28 dmd/enum.c --- 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); diff -r e83f0778c260 -r 6c36e3f49b28 dmd/enum.h --- 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); diff -r e83f0778c260 -r 6c36e3f49b28 dmd/mars.c --- 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; diff -r e83f0778c260 -r 6c36e3f49b28 dmd/struct.c --- 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();