public override bool Equals( object obj )
{
if( obj == null )
return false;
Variable v = (Variable) obj;
if( (object) v == null )
return false;
if( type != v.type )
return false;
switch( type )
{
case VarType.Null: return true;
case VarType.Bool: return var.data.B == v.var.data.B;
case VarType.Int: return var.data.I == v.var.data.I;
case VarType.Real: return var.data.R == v.var.data.R;
case VarType.String: return var.data.S == v.var.data.S; // all strings are interned
case VarType.Func: // union pointer overlap
case VarType.CFunc:
case VarType.Object:
case VarType.Ptr:
case VarType.Thread: return var.data.T == v.var.data.T;
default: return true;
}
}