Apply StaticStructInit changes from [913] to dmd2/

This commit is contained in:
Christian Kamm
2009-02-03 18:00:17 +01:00
parent dc5944df99
commit 8726eefefa
5 changed files with 24 additions and 20 deletions

View File

@@ -1647,4 +1647,13 @@ Dsymbol *ThisDeclaration::syntaxCopy(Dsymbol *s)
return NULL;
}
/********************** StaticStructInitDeclaration ***************************/
StaticStructInitDeclaration::StaticStructInitDeclaration(Loc loc, StructDeclaration *dsym)
: Declaration(new Identifier("", TOKidentifier))
{
this->loc = loc;
this->dsym = dsym;
storage_class |= STCconst;
}

View File

@@ -284,19 +284,18 @@ struct VarDeclaration : Declaration
/**************************************************************/
// This is a shell around a back end symbol
// LDC uses this to denote static struct initializers
struct SymbolDeclaration : Declaration
struct StaticStructInitDeclaration : Declaration
{
Symbol *sym;
StructDeclaration *dsym;
SymbolDeclaration(Loc loc, Symbol *s, StructDeclaration *dsym);
StaticStructInitDeclaration(Loc loc, StructDeclaration *dsym);
Symbol *toSymbol();
// Eliminate need for dynamic_cast
SymbolDeclaration *isSymbolDeclaration() { return (SymbolDeclaration *)this; }
StaticStructInitDeclaration *isStaticStructInitDeclaration() { return (StaticStructInitDeclaration *)this; }
};
struct ClassInfoDeclaration : VarDeclaration

View File

@@ -65,7 +65,7 @@ struct EnumMember;
struct ScopeDsymbol;
struct WithScopeSymbol;
struct ArrayScopeSymbol;
struct SymbolDeclaration;
struct StaticStructInitDeclaration;
struct Expression;
struct DeleteDeclaration;
struct HdrGenState;
@@ -219,7 +219,7 @@ struct Dsymbol : Object
#ifdef _DH
virtual DeleteDeclaration *isDeleteDeclaration() { return NULL; }
#endif
virtual SymbolDeclaration *isSymbolDeclaration() { return NULL; }
virtual StaticStructInitDeclaration *isStaticStructInitDeclaration() { return NULL; }
virtual AttribDeclaration *isAttribDeclaration() { return NULL; }
virtual OverloadSet *isOverloadSet() { return NULL; }
virtual TypeInfoDeclaration* isTypeInfoDeclaration() { return NULL; }

View File

@@ -987,7 +987,7 @@ Expression *getVarExp(Loc loc, InterState *istate, Declaration *d)
{
Expression *e = EXP_CANT_INTERPRET;
VarDeclaration *v = d->isVarDeclaration();
SymbolDeclaration *s = d->isSymbolDeclaration();
StaticStructInitDeclaration *s = d->isStaticStructInitDeclaration();
if (v)
{
#if DMDV2
@@ -1011,11 +1011,9 @@ Expression *getVarExp(Loc loc, InterState *istate, Declaration *d)
}
else if (s)
{
if (s->dsym->toInitializer() == s->sym)
{ Expressions *exps = new Expressions();
e = new StructLiteralExp(0, s->dsym, exps);
e = e->semantic(NULL);
}
Expressions *exps = new Expressions();
e = new StructLiteralExp(0, s->dsym, exps);
e = e->semantic(NULL);
}
return e;
}
@@ -1466,10 +1464,10 @@ Expression *BinExp::interpretAssignCommon(InterState *istate, fp_t fp, int post)
if (v->value && v->value->op == TOKvar)
{
VarExp *ve2 = (VarExp *)v->value;
if (ve2->var->isSymbolDeclaration())
if (ve2->var->isStaticStructInitDeclaration())
{
/* This can happen if v is a struct initialized to
* 0 using an __initZ SymbolDeclaration from
* 0 using an StaticStructInitDeclaration from
* TypeStruct::defaultInit()
*/
}

View File

@@ -5249,14 +5249,12 @@ unsigned TypeStruct::memalign(unsigned salign)
}
Expression *TypeStruct::defaultInit(Loc loc)
{ Symbol *s;
Declaration *d;
{ Declaration *d;
#if LOGDEFAULTINIT
printf("TypeStruct::defaultInit() '%s'\n", toChars());
#endif
s = sym->toInitializer();
d = new SymbolDeclaration(sym->loc, s, sym);
d = new StaticStructInitDeclaration(sym->loc, sym);
assert(d);
d->type = this;
return new VarExp(sym->loc, d);