浏览代码

[cs] Enum toString() correctly

Caue Waneck 13 年之前
父节点
当前提交
db783a38b6
共有 1 个文件被更改,包括 1 次插入1 次删除
  1. 1 1
      std/cs/_std/haxe/lang/HxObject.hx

+ 1 - 1
std/cs/_std/haxe/lang/HxObject.hx

@@ -1 +1 @@
-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;
	}
	
	
}