view dmd/TemplateParameter.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 3a0b150c9841
children 347de076ad34
line wrap: on
line source

module dmd.TemplateParameter;

import dmd.common;
import dmd.Loc;
import dmd.Identifier;
import dmd.Declaration;
import dmd.TemplateTypeParameter;
import dmd.TemplateValueParameter;
import dmd.TemplateAliasParameter;
import dmd.TemplateThisParameter;
import dmd.TemplateTupleParameter;
import dmd.Scope;
import dmd.OutBuffer;
import dmd.HdrGenState;
import dmd.MATCH;
import dmd.ArrayTypes;

class TemplateParameter
{
    /* For type-parameter:
     *	template Foo(ident)		// specType is set to NULL
     *	template Foo(ident : specType)
     * For value-parameter:
     *	template Foo(valType ident)	// specValue is set to NULL
     *	template Foo(valType ident : specValue)
     * For alias-parameter:
     *	template Foo(alias ident)
     * For this-parameter:
     *	template Foo(this ident)
     */

    Loc loc;
    Identifier ident;

    Declaration sparam;

    this(Loc loc, Identifier ident)
	{
		this.loc = loc;
		this.ident = ident;
	}

    TemplateTypeParameter isTemplateTypeParameter()
	{
		return null;
	}
	
    TemplateValueParameter isTemplateValueParameter()
	{
		return null; 
	}
	
    TemplateAliasParameter isTemplateAliasParameter()
	{
		return null; 
	}
	
version (DMDV2) {
    TemplateThisParameter isTemplateThisParameter()
	{
		return null; 
	}
}
    TemplateTupleParameter isTemplateTupleParameter()
	{
		return null;
	}

    abstract TemplateParameter syntaxCopy();
    abstract void declareParameter(Scope sc);
    abstract void semantic(Scope);
    abstract void print(Object oarg, Object oded);
    abstract void toCBuffer(OutBuffer buf, HdrGenState* hgs);
    abstract Object specialization();
    abstract Object defaultArg(Loc loc, Scope sc);

    /* If TemplateParameter's match as far as overloading goes.
     */
    abstract bool overloadMatch(TemplateParameter);

    /* Match actual argument against parameter.
     */
    abstract MATCH matchArg(Scope sc, Objects tiargs, int i, TemplateParameters parameters, Objects dedtypes, Declaration* psparam, int flags = 0);

    /* Create dummy argument based on parameter.
     */
    abstract Object dummyArg();
}