|
-package haxe.lang;
private typedef StdType = Type;
import system.Type;
@:native('haxe.lang.HxObject')
private class HxObject implements IHxObject
{
}
@:native('haxe.lang.IHxObject')
private interface IHxObject
{
}
@:native('haxe.lang.DynamicObject')
private class DynamicObject extends HxObject, implements Dynamic
{
}
interface IGenericObject
{
}
@:native('haxe.lang.Enum')
@:skip_ctor
private class Enum
{
@:readonly private var index:Int;
@:readonly private var params:Array<{}>;
public function new(index:Int, params:Array<{}>)
{
this.index = index;
this.params = params;
}
@:final public function getTag():String
{
var cl:Dynamic = StdType.getClass(this);
return cl.constructs[index];
}
public function equals(obj:Dynamic)
{
if (obj == this) //we cannot use == as .Equals !
return true;
var obj:Enum = cast obj;
var ret = obj != null && Std.is(obj, StdType.getClass(this)) && obj.index == this.index;
if (!ret)
return false;
if (obj.params == this.params)
return true;
var len = 0;
if (obj.params == null || this.params == null || (len = this.params.length) != obj.params.length)
return false;
for (i in 0...len)
{
if (obj.params[i] != this.params[i])
return false;
}
return true;
}
}
|
|
|
|
|
|
+package haxe.lang;
private typedef StdType = Type;
import system.Type;
@:native('haxe.lang.HxObject')
private class HxObject implements IHxObject
{
}
@:native('haxe.lang.IHxObject')
private interface IHxObject
{
}
@:native('haxe.lang.DynamicObject')
private class DynamicObject extends HxObject, implements Dynamic
{
}
interface IGenericObject
{
}
@:native('haxe.lang.Enum')
@:skip_ctor
private class Enum
{
@:readonly private var index:Int;
@:readonly private var params:Array<{}>;
public function new(index:Int, params:Array<{}>)
{
this.index = index;
this.params = params;
}
@:final public function getTag():String
{
var cl:Dynamic = StdType.getClass(this);
return cl.constructs[index];
}
public function toString():String
{
if (params == null) return getTag();
var ret = new StringBuf();
ret.add(getTag()); ret.add("(");
var first = true;
for (p in params)
{
if (first)
first = false;
else
ret.add(",");
ret.add(p);
}
ret.add(")");
return ret.toString();
}
public function equals(obj:Dynamic)
{
if (obj == this) //we cannot use == as .Equals !
return true;
var obj:Enum = cast obj;
var ret = obj != null && Std.is(obj, StdType.getClass(this)) && obj.index == this.index;
if (!ret)
return false;
if (obj.params == this.params)
return true;
var len = 0;
if (obj.params == null || this.params == null || (len = this.params.length) != obj.params.length)
return false;
for (i in 0...len)
{
if (obj.params[i] != this.params[i])
return false;
}
return true;
}
}
|