view dmd/Initializer.d @ 130:60bb0fe4563e

dmdfe 2.037 first main iteration
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Thu, 09 Sep 2010 22:51:44 +0100
parents 9ee9b55452cb
children e3afd1303184
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");
    	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 = ai[i];

				e = e.syntaxCopy();
				a[i] =  e;
			}
			}
			return a;
	}

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

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