# HG changeset patch # User Leandro Lucarella # Date 1262801902 10800 # Node ID 1d48eced441fe96a4fa58893fb02a443dbfed9bb # Parent a542ef277a84007b7057e7721a7196ead0f7bee1 Merge DMD r317: bugzilla 3611 Enum forward referencing regression --- dmd/enum.c | 17 +++++++++++++++-- dmd/mtype.c | 4 ++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff -r a542ef277a84 -r 1d48eced441f dmd/enum.c --- a/dmd/enum.c Wed Jan 06 15:18:22 2010 -0300 +++ b/dmd/enum.c Wed Jan 06 15:18:22 2010 -0300 @@ -57,10 +57,23 @@ Scope *sce; //printf("EnumDeclaration::semantic(sd = %p, '%s')\n", sc->scopesym, sc->scopesym->toChars()); - if (symtab) // if already done - return; if (!memtype) memtype = Type::tint32; + + if (symtab) // if already done + { if (!scope) + return; // semantic() already completed + } + else + symtab = new DsymbolTable(); + + Scope *scx = NULL; + if (scope) + { sc = scope; + scx = scope; // save so we don't make redundant copies + scope = NULL; + } + if (sc->stc & STCdeprecated) isdeprecated = 1; diff -r a542ef277a84 -r 1d48eced441f dmd/mtype.c --- a/dmd/mtype.c Wed Jan 06 15:18:22 2010 -0300 +++ b/dmd/mtype.c Wed Jan 06 15:18:22 2010 -0300 @@ -4065,6 +4065,10 @@ Type *TypeEnum::toBasetype() { + if (sym->scope) + { + sym->semantic(NULL); // attempt to resolve forward reference + } if (!sym->memtype) { #ifdef DEBUG