Selaa lähdekoodia

[cs] Minor improvements to Type API and correct getClass/getEnum handling

Caue Waneck 13 vuotta sitten
vanhempi
commit
5f4426329e
2 muutettua tiedostoa jossa 23 lisäystä ja 15 poistoa
  1. 19 7
      std/cs/_std/Type.hx
  2. 4 8
      std/java/_std/Type.hx

+ 19 - 7
std/cs/_std/Type.hx

@@ -40,21 +40,32 @@ enum ValueType {
 
 @:core_api class Type {
 	
+	@:functionBody('
+		if (o is haxe.lang.DynamicObject || o is System.Type)
+			return null;
+		
+		return o.GetType();
+	')
 	public static function getClass<T>( o : T ) : Class<T> untyped 
 	{
-		return cast o.GetType();
+		return null;
 	}
 	
+	@:functionBody('
+		if (o is System.Enum || o is haxe.lang.Enum)
+			return o.GetType();
+		return null;
+	')
 	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped 
 	{
-		return cast Lib.getNativeType(o);
+		return null;
 	}
 
 	public static function getSuperClass( c : Class<Dynamic> ) : Class<Dynamic> 
 	{
 		var t:system.Type = Lib.toNativeType(c);
 		var base = t.BaseType;
-		if (base == null || (base + "") == "haxe.lang.HxObject")
+		if (base == null || (base + "") == ("haxe.lang.HxObject") || (base + "") == ("System.Object"))
 		{
 			return null;
 		}
@@ -101,9 +112,10 @@ enum ValueType {
 		{
 			switch(name)
 			{
-				case "Int": return Int;
-				case "Float": return Float;
-				case "Class": return Class;
+				case #if no-root "haxe.root.Int" #else "Int" #end: return Int;
+				case #if no-root "haxe.root.Float" #else "Float" #end: return Float;
+				case #if no-root "haxe.root.Class" #else "Class" #end: return Class;
+				case #if no-root "haxe.root.String" #else "String" #end: return String;
 				default: return null;
 			}
 		} else if (t.IsInterface && t.IsAssignableFrom(untyped __typeof__(IGenericObject))) { 
@@ -193,7 +205,7 @@ enum ValueType {
 	public static function getEnumConstructs( e : Enum<Dynamic> ) : Array<String> {
 		if (Reflect.hasField(e, "constructs"))
 			return untyped e.constructs;
-		return getClassFields(cast e);
+		return untyped __cs__("new Array<object>(System.Enum.GetNames(e))");
 	}
 	
 	@:functionBody('

+ 4 - 8
std/java/_std/Type.hx

@@ -38,14 +38,10 @@ enum ValueType {
 @:core_api class Type {
 	
 	@:functionBody('
-		if (o instanceof java.lang.Enum || o instanceof haxe.lang.Enum)
-			return null;
-		
-		java.lang.Class<T> ret = (java.lang.Class<T>) o.getClass();
-		String name = ret.getName();
-		if (name == "java.lang.Object" || name == "haxe.lang.DynamicObject" || name == "java.lang.Class")
+		if (o instanceof haxe.lang.DynamicObject || o instanceof java.lang.Class)
 			return null;
-		return ret;
+			
+		return = (java.lang.Class<T>) o.getClass();
 	')
 	public static function getClass<T>( o : T ) : Class<T> untyped 
 	{
@@ -64,7 +60,7 @@ enum ValueType {
 	
 	@:functionBody('
 		java.lang.Class cl = (c == null) ? null : c.getSuperclass();
-		if (cl != null && cl.getName() != "haxe.lang.HxObject")
+		if (cl != null && !cl.getName().equals("haxe.lang.HxObject") && cl.getName().equals("java.lang.Object") )
 			return cl;
 		return null;
 	')