view dmd/Initializer.d @ 114:e28b18c23469

added a module dmd.common for commonly used stuff it currently holds code for consistency checking of predefined versions also added a VisualD project file
author Trass3r
date Wed, 01 Sep 2010 18:21:58 +0200
parents 43073c7c7769
children 9ee9b55452cb
line wrap: on
line source

module dmd.Initializer;

import dmd.common;
import dmd.Loc;
import dmd.Scope;
import dmd.Type;
import dmd.Util;
import dmd.ArrayTypes;
import dmd.Expression;
import dmd.OutBuffer;
import dmd.HdrGenState;
import dmd.VoidInitializer;
import dmd.StructInitializer;
import dmd.ArrayInitializer;
import dmd.ExpInitializer;

import dmd.backend.dt_t;

class Initializer
{
    Loc loc;

    this(Loc loc)
	{
		this.loc = loc;
	}
	
    Initializer syntaxCopy()
	{
		return this;
	}
	
    Initializer semantic(Scope sc, Type t)
	{
		return this;
	}
	
    Type inferType(Scope sc)
	{
    	error(loc, "cannot infer type from initializer");
    	halt();
    	return Type.terror;
	}
	
	abstract Expression toExpression();
	
	abstract void toCBuffer(OutBuffer buf, HdrGenState* hgs);
	
	string toChars()
	{
		OutBuffer buf;
		HdrGenState hgs;

		buf = new OutBuffer();
		toCBuffer(buf, &hgs);
		return buf.toChars();
	}

    static Initializers arraySyntaxCopy(Initializers ai)
	{
		 Initializers a = null;

			if (ai)
			{
			a = new Initializers();
			a.setDim(ai.dim);
			for (int i = 0; i < a.dim; i++)
			{   Initializer e = cast(Initializer)ai.data[i];

				e = e.syntaxCopy();
				a.data[i] = cast(void*) e;
			}
			}
			return a;
	}

	dt_t* toDt()
	{
		assert(false);
	}

	VoidInitializer isVoidInitializer() { return null; }
	
    StructInitializer isStructInitializer()  { return null; }
    
	ArrayInitializer isArrayInitializer()  { return null; }
    
	ExpInitializer isExpInitializer()  { return null; }
}