changeset 803:c62c6936635b

Removed DtoConstFieldInitializer, it's no longer needed and was buggy.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sat, 29 Nov 2008 21:26:50 +0100
parents 28ce72c60a21
children 236f4b5eddca
files gen/classes.cpp gen/llvmhelpers.cpp gen/llvmhelpers.h gen/structs.cpp ir/irstruct.cpp
diffstat 5 files changed, 4 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/gen/classes.cpp	Sat Nov 29 20:57:52 2008 +0100
+++ b/gen/classes.cpp	Sat Nov 29 21:26:50 2008 +0100
@@ -485,7 +485,7 @@
         // add the field
         // and build its constant initializer lazily
         if (!var->ir.irField->constInit)
-            var->ir.irField->constInit = DtoConstFieldInitializer(var->loc, var->type, var->init);
+            var->ir.irField->constInit = DtoConstInitializer(var->loc, var->type, var->init);
         inits.push_back(var->ir.irField->constInit);
 
         lastoffset = offset;
--- a/gen/llvmhelpers.cpp	Sat Nov 29 20:57:52 2008 +0100
+++ b/gen/llvmhelpers.cpp	Sat Nov 29 21:26:50 2008 +0100
@@ -1428,55 +1428,6 @@
 
 //////////////////////////////////////////////////////////////////////////////////////////
 
-LLConstant* DtoConstFieldInitializer(Loc loc, Type* t, Initializer* init)
-{
-    Logger::println("DtoConstFieldInitializer");
-    LOG_SCOPE;
-
-    const LLType* _type = DtoType(t);
-
-    LLConstant* _init = DtoConstInitializer(loc, t, init);
-    assert(_init);
-    if (_type != _init->getType())
-    {
-        if (Logger::enabled())
-            Logger::cout() << "field init is: " << *_init << " type should be " << *_type << '\n';
-        if (t->ty == Tsarray)
-        {
-            const LLArrayType* arrty = isaArray(_type);
-            uint64_t n = arrty->getNumElements();
-            std::vector<LLConstant*> vals(n,_init);
-            _init = llvm::ConstantArray::get(arrty, vals);
-        }
-        else if (t->ty == Tarray)
-        {
-            assert(isaStruct(_type));
-            _init = llvm::ConstantAggregateZero::get(_type);
-        }
-        else if (t->ty == Tstruct)
-        {
-            const LLStructType* structty = isaStruct(_type);
-            TypeStruct* ts = (TypeStruct*)t;
-            assert(ts);
-            assert(ts->sym);
-            assert(ts->sym->ir.irStruct->constInit);
-            _init = ts->sym->ir.irStruct->constInit;
-        }
-        else if (t->ty == Tclass)
-        {
-            _init = llvm::Constant::getNullValue(_type);
-        }
-        else {
-            Logger::println("failed for type %s", t->toChars());
-            assert(0);
-        }
-    }
-
-    return _init;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-
 DValue* DtoInitializer(LLValue* target, Initializer* init)
 {
     if (!init)
@@ -1538,17 +1489,6 @@
 
     LLSmallVector<size_t, 4> dims;
 
-    // handle zero initializers
-    if (expbase->isintegral() && exp->isConst())
-    {
-        if (!exp->toInteger())
-            return LLConstant::getNullValue(dstTy);
-    }
-    else if (exp->op == TOKnull)
-    {
-        return LLConstant::getNullValue(dstTy);
-    }
-
     while(1)
     {
         Logger::println("t: %s", t->toChars());
--- a/gen/llvmhelpers.h	Sat Nov 29 20:57:52 2008 +0100
+++ b/gen/llvmhelpers.h	Sat Nov 29 21:26:50 2008 +0100
@@ -87,7 +87,6 @@
 
 // initializer helpers
 LLConstant* DtoConstInitializer(Loc loc, Type* type, Initializer* init);
-LLConstant* DtoConstFieldInitializer(Loc loc, Type* type, Initializer* init);
 LLConstant* DtoConstExpInit(Loc loc, Type* t, Expression* exp);
 DValue* DtoInitializer(LLValue* target, Initializer* init);
 
--- a/gen/structs.cpp	Sat Nov 29 20:57:52 2008 +0100
+++ b/gen/structs.cpp	Sat Nov 29 21:26:50 2008 +0100
@@ -208,7 +208,7 @@
                 // do the default
                 Logger::println("adding default field: %s : +%u", nextdef->toChars(), nextdef->offset);
                 if (!nextdef->ir.irField->constInit)
-                    nextdef->ir.irField->constInit = DtoConstFieldInitializer(nextdef->loc, nextdef->type, nextdef->init);
+                    nextdef->ir.irField->constInit = DtoConstInitializer(nextdef->loc, nextdef->type, nextdef->init);
                 LLConstant* c = nextdef->ir.irField->constInit;
                 inits.push_back(c);
 
@@ -263,7 +263,7 @@
             // do the default
             Logger::println("adding default field: %s : +%u", nextdef->toChars(), nextdef->offset);
             if (!nextdef->ir.irField->constInit)
-                nextdef->ir.irField->constInit = DtoConstFieldInitializer(nextdef->loc, nextdef->type, nextdef->init);
+                nextdef->ir.irField->constInit = DtoConstInitializer(nextdef->loc, nextdef->type, nextdef->init);
             LLConstant* c = nextdef->ir.irField->constInit;
             inits.push_back(c);
 
--- a/ir/irstruct.cpp	Sat Nov 29 20:57:52 2008 +0100
+++ b/ir/irstruct.cpp	Sat Nov 29 21:26:50 2008 +0100
@@ -319,7 +319,7 @@
             // add the field
             // lazily default initialize
             if (!var->ir.irField->constInit)
-                var->ir.irField->constInit = DtoConstFieldInitializer(var->loc, var->type, var->init);
+                var->ir.irField->constInit = DtoConstInitializer(var->loc, var->type, var->init);
             inits.push_back(var->ir.irField->constInit);
 
             lastoffset = offset;