view dmd/expression/Identity.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 10317f0c89a5
children
line wrap: on
line source

module dmd.expression.Identity;

import dmd.common;
import dmd.Expression;
import dmd.Type;
import dmd.TOK;
import dmd.Loc;
import dmd.SymOffExp;
import dmd.IntegerExp;

import dmd.expression.Equal;

Expression Identity(TOK op, Type type, Expression e1, Expression e2)
{   
	Expression e;
    Loc loc = e1.loc;
    int cmp;

    if (e1.op == TOK.TOKnull)
    {
		cmp = (e2.op == TOK.TOKnull);
    }
    else if (e2.op == TOK.TOKnull)
    {
		cmp = 0;
    }
    else if (e1.op == TOK.TOKsymoff && e2.op == TOK.TOKsymoff)
    {
		SymOffExp es1 = cast(SymOffExp)e1;
		SymOffExp es2 = cast(SymOffExp)e2;

		cmp = (es1.var == es2.var && es1.offset == es2.offset);
    }
    else if (e1.isConst() == 1 && e2.isConst() == 1)
		return Equal((op == TOK.TOKidentity) ? TOK.TOKequal : TOK.TOKnotequal, type, e1, e2);
    else
		assert(0);

    if (op == TOK.TOKnotidentity)
		cmp ^= 1;

    return new IntegerExp(loc, cmp, type);
}