|
@@ -33,13 +33,11 @@ class Type {
|
|
|
**/
|
|
|
public static function toEnum( t : Dynamic ) : Enum untyped {
|
|
|
try {
|
|
|
- #if flash9
|
|
|
- if( !t.__isenum )
|
|
|
- return null;
|
|
|
- #else true
|
|
|
- if( t.__ename__ == null )
|
|
|
- return null;
|
|
|
- #end
|
|
|
+ #if flash9
|
|
|
+ if( !t.__isenum ) return null;
|
|
|
+ #else
|
|
|
+ if( t.__ename__ == null ) return null;
|
|
|
+ #end
|
|
|
return t;
|
|
|
} catch( e : Dynamic ) {
|
|
|
}
|
|
@@ -51,13 +49,13 @@ class Type {
|
|
|
**/
|
|
|
public static function toClass( t : Dynamic ) : Class<Dynamic> untyped {
|
|
|
try {
|
|
|
- #if flash9
|
|
|
- if( !t.hasOwnProperty("prototype") )
|
|
|
- return null;
|
|
|
- #else true
|
|
|
- if( t.__name__ == null )
|
|
|
- return null;
|
|
|
- #end
|
|
|
+ #if flash9
|
|
|
+ if( !t.hasOwnProperty("prototype") )
|
|
|
+ return null;
|
|
|
+ #else
|
|
|
+ if( t.__name__ == null )
|
|
|
+ return null;
|
|
|
+ #end
|
|
|
return t;
|
|
|
} catch( e : Dynamic ) {
|
|
|
}
|
|
@@ -78,24 +76,25 @@ class Type {
|
|
|
if( c.__isenum )
|
|
|
return null;
|
|
|
return c;
|
|
|
- #else flash
|
|
|
+ #elseif flash
|
|
|
if( o.__enum__ != null )
|
|
|
return null;
|
|
|
return o.__class__;
|
|
|
- #else js
|
|
|
+ #elseif js
|
|
|
if( o == null )
|
|
|
return null;
|
|
|
if( o.__enum__ != null )
|
|
|
return null;
|
|
|
return o.__class__;
|
|
|
- #else neko
|
|
|
+ #elseif neko
|
|
|
if( __dollar__typeof(o) != __dollar__tobject )
|
|
|
return null;
|
|
|
var p = __dollar__objgetproto(o);
|
|
|
if( p == null )
|
|
|
return null;
|
|
|
return p.__class__;
|
|
|
- #else error
|
|
|
+ #else
|
|
|
+ return null;
|
|
|
#end
|
|
|
}
|
|
|
|
|
@@ -114,17 +113,18 @@ class Type {
|
|
|
if( !c.__isenum )
|
|
|
return null;
|
|
|
return c;
|
|
|
- #else flash
|
|
|
+ #elseif flash
|
|
|
return o.__enum__;
|
|
|
- #else js
|
|
|
+ #elseif js
|
|
|
if( o == null )
|
|
|
return null;
|
|
|
return o.__enum__;
|
|
|
- #else neko
|
|
|
+ #elseif neko
|
|
|
if( __dollar__typeof(o) != __dollar__tobject )
|
|
|
return null;
|
|
|
return o.__enum__;
|
|
|
- #else error
|
|
|
+ #else
|
|
|
+ return null;
|
|
|
#end
|
|
|
}
|
|
|
|
|
@@ -138,7 +138,7 @@ class Type {
|
|
|
if( cname == "Object" )
|
|
|
return null;
|
|
|
return __as__(__global__["flash.utils.getDefinitionByName"](cname),Class);
|
|
|
- #else true
|
|
|
+ #else
|
|
|
return c.__super__;
|
|
|
#end
|
|
|
}
|
|
@@ -153,7 +153,7 @@ class Type {
|
|
|
#if flash9
|
|
|
var str : String = untyped __global__["flash.utils.getQualifiedClassName"](c);
|
|
|
return str.split("::").join(".");
|
|
|
- #else true
|
|
|
+ #else
|
|
|
var a : Array<String> = untyped c.__name__;
|
|
|
return a.join(".");
|
|
|
#end
|
|
@@ -166,7 +166,7 @@ class Type {
|
|
|
#if flash9
|
|
|
var n = untyped __global__["flash.utils.getQualifiedClassName"](e);
|
|
|
return n;
|
|
|
- #else true
|
|
|
+ #else
|
|
|
var a : Array<String> = untyped e.__ename__;
|
|
|
return a.join(".");
|
|
|
#end
|
|
@@ -176,9 +176,8 @@ class Type {
|
|
|
Evaluates a class from a name. The class must have been compiled
|
|
|
to be accessible.
|
|
|
**/
|
|
|
- public static function resolveClass( name : String ) : Class<Dynamic> {
|
|
|
+ public static function resolveClass( name : String ) : Class<Dynamic> untyped {
|
|
|
var cl : Class<Dynamic>;
|
|
|
- untyped {
|
|
|
#if flash9
|
|
|
try {
|
|
|
cl = __as__(__global__["flash.utils.getDefinitionByName"](name),Class);
|
|
@@ -188,15 +187,15 @@ class Type {
|
|
|
} catch( e : Dynamic ) {
|
|
|
return null;
|
|
|
}
|
|
|
- #else flash
|
|
|
+ #elseif flash
|
|
|
cl = __eval__(name);
|
|
|
- #else js
|
|
|
+ #elseif js
|
|
|
try {
|
|
|
cl = eval(name);
|
|
|
} catch( e : Dynamic ) {
|
|
|
cl = null;
|
|
|
}
|
|
|
- #else neko
|
|
|
+ #elseif neko
|
|
|
var path = name.split(".");
|
|
|
cl = Reflect.field(untyped neko.Boot.__classes,path[0]);
|
|
|
var i = 1;
|
|
@@ -204,12 +203,10 @@ class Type {
|
|
|
cl = Reflect.field(cl,path[i]);
|
|
|
i += 1;
|
|
|
}
|
|
|
- #else error
|
|
|
#end
|
|
|
// ensure that this is a class
|
|
|
if( cl == null || cl.__name__ == null )
|
|
|
return null;
|
|
|
- }
|
|
|
return cl;
|
|
|
}
|
|
|
|
|
@@ -218,9 +215,8 @@ class Type {
|
|
|
Evaluates an enum from a name. The enum must have been compiled
|
|
|
to be accessible.
|
|
|
**/
|
|
|
- public static function resolveEnum( name : String ) : Enum {
|
|
|
+ public static function resolveEnum( name : String ) : Enum untyped {
|
|
|
var e : Dynamic;
|
|
|
- untyped {
|
|
|
#if flash9
|
|
|
try {
|
|
|
e = __global__["flash.utils.getDefinitionByName"](name);
|
|
@@ -230,15 +226,15 @@ class Type {
|
|
|
} catch( e : Dynamic ) {
|
|
|
return null;
|
|
|
}
|
|
|
- #else flash
|
|
|
+ #elseif flash
|
|
|
e = __eval__(name);
|
|
|
- #else js
|
|
|
+ #elseif js
|
|
|
try {
|
|
|
e = eval(name);
|
|
|
} catch( e : Dynamic ) {
|
|
|
e = null;
|
|
|
}
|
|
|
- #else neko
|
|
|
+ #elseif neko
|
|
|
var path = name.split(".");
|
|
|
e = Reflect.field(neko.Boot.__classes,path[0]);
|
|
|
var i = 1;
|
|
@@ -246,12 +242,10 @@ class Type {
|
|
|
e = Reflect.field(e,path[i]);
|
|
|
i += 1;
|
|
|
}
|
|
|
- #else error
|
|
|
#end
|
|
|
// ensure that this is an enum
|
|
|
if( e == null || e.__ename__ == null )
|
|
|
return null;
|
|
|
- }
|
|
|
return e;
|
|
|
}
|
|
|
|
|
@@ -267,18 +261,25 @@ class Type {
|
|
|
case 3: __new__(cl,args[0],args[1],args[2]);
|
|
|
case 4: __new__(cl,args[0],args[1],args[2],args[3]);
|
|
|
case 5: __new__(cl,args[0],args[1],args[2],args[3],args[4]);
|
|
|
+ case 6: __new__(cl,args[0],args[1],args[2],args[3],args[4],args[5]);
|
|
|
+ case 7: __new__(cl,args[0],args[1],args[2],args[3],args[4],args[5],args[6]);
|
|
|
+ case 8: __new__(cl,args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]);
|
|
|
default: throw "Too many arguments";
|
|
|
}
|
|
|
- #else flash
|
|
|
+ #elseif flash
|
|
|
var o = { __constructor__ : cl, __proto__ : cl.prototype };
|
|
|
cl["apply"](o,args);
|
|
|
return o;
|
|
|
- #else neko
|
|
|
- return untyped __dollar__call(__dollar__objget(cl,__dollar__hash("new".__s)),cl,args.__neko());
|
|
|
- #else js
|
|
|
- if( args.length >= 6 ) throw "Too many arguments";
|
|
|
- return untyped __new__(cl,args[0],args[1],args[2],args[3],args[4],args[5]);
|
|
|
- #else error
|
|
|
+ #elseif neko
|
|
|
+ return __dollar__call(__dollar__objget(cl,__dollar__hash("new".__s)),cl,args.__neko());
|
|
|
+ #elseif js
|
|
|
+ if( args.length <= 3 )
|
|
|
+ return __new__(cl,args[0],args[1],args[2]);
|
|
|
+ if( args.length > 8 )
|
|
|
+ throw "Too many arguments";
|
|
|
+ return __new__(cl,args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]);
|
|
|
+ #else
|
|
|
+ return null;
|
|
|
#end
|
|
|
}
|
|
|
|
|
@@ -298,17 +299,18 @@ class Type {
|
|
|
throw e;
|
|
|
}
|
|
|
return null;
|
|
|
- #else flash
|
|
|
+ #elseif flash
|
|
|
var o : Dynamic = __new__(_global["Object"]);
|
|
|
o.__proto__ = cl.prototype;
|
|
|
return o;
|
|
|
- #else js
|
|
|
+ #elseif js
|
|
|
return __new__(cl,__js__("$_"));
|
|
|
- #else neko
|
|
|
+ #elseif neko
|
|
|
var o = __dollar__new(null);
|
|
|
__dollar__objsetproto(o,cl.prototype);
|
|
|
return o;
|
|
|
- #else error
|
|
|
+ #else
|
|
|
+ return null;
|
|
|
#end
|
|
|
}
|
|
|
|
|
@@ -334,7 +336,7 @@ class Type {
|
|
|
public static function getInstanceFields( c : Class<Dynamic> ) : Array<String> {
|
|
|
#if flash9
|
|
|
return describe(c,true);
|
|
|
- #else true
|
|
|
+ #else
|
|
|
var a = Reflect.fields(untyped c.prototype);
|
|
|
c = untyped c.__super__;
|
|
|
while( c != null ) {
|
|
@@ -359,7 +361,7 @@ class Type {
|
|
|
var a = describe(c,false);
|
|
|
a.remove("__construct__");
|
|
|
return a;
|
|
|
- #else true
|
|
|
+ #else
|
|
|
var a = Reflect.fields(c);
|
|
|
a.remove(__unprotect__("__name__"));
|
|
|
a.remove(__unprotect__("__interfaces__"));
|
|
@@ -388,85 +390,86 @@ class Type {
|
|
|
**/
|
|
|
public static function typeof( v : Dynamic ) : ValueType untyped {
|
|
|
#if neko
|
|
|
- return switch( __dollar__typeof(v) ) {
|
|
|
- case __dollar__tnull: TNull;
|
|
|
- case __dollar__tint: TInt;
|
|
|
- case __dollar__tfloat: TFloat;
|
|
|
- case __dollar__tbool: TBool;
|
|
|
- case __dollar__tfunction: TFunction;
|
|
|
- case __dollar__tobject:
|
|
|
- var c = v.__class__;
|
|
|
- if( c != null )
|
|
|
- TClass(c);
|
|
|
- else {
|
|
|
- var e = v.__enum__;
|
|
|
- if( e != null )
|
|
|
- TEnum(e);
|
|
|
- else
|
|
|
- TObject;
|
|
|
+ return switch( __dollar__typeof(v) ) {
|
|
|
+ case __dollar__tnull: TNull;
|
|
|
+ case __dollar__tint: TInt;
|
|
|
+ case __dollar__tfloat: TFloat;
|
|
|
+ case __dollar__tbool: TBool;
|
|
|
+ case __dollar__tfunction: TFunction;
|
|
|
+ case __dollar__tobject:
|
|
|
+ var c = v.__class__;
|
|
|
+ if( c != null )
|
|
|
+ TClass(c);
|
|
|
+ else {
|
|
|
+ var e = v.__enum__;
|
|
|
+ if( e != null )
|
|
|
+ TEnum(e);
|
|
|
+ else
|
|
|
+ TObject;
|
|
|
+ }
|
|
|
+ default: TUnknown;
|
|
|
}
|
|
|
- default: TUnknown;
|
|
|
- }
|
|
|
- #else flash9
|
|
|
- var cname = __global__["flash.utils.getQualifiedClassName"](v);
|
|
|
- switch(cname) {
|
|
|
- case "null": return TNull;
|
|
|
- case "void": return TNull; // undefined
|
|
|
- case "int": return TInt;
|
|
|
- case "Number": return TFloat;
|
|
|
- case "Boolean": return TBool;
|
|
|
- case "Object": return TObject;
|
|
|
- default:
|
|
|
- var c : Dynamic;
|
|
|
- try {
|
|
|
- c = __global__["flash.utils.getDefinitionByName"](cname);
|
|
|
- if( v.hasOwnProperty("prototype") )
|
|
|
- return TObject;
|
|
|
- if( c.__isenum )
|
|
|
- return TEnum(c);
|
|
|
- return TClass(c);
|
|
|
- } catch( e : Dynamic ) {
|
|
|
- if( cname == "builtin.as$0::MethodClosure" || cname.indexOf("-") != -1 )
|
|
|
- return TFunction;
|
|
|
- return if( c == null ) TFunction else TClass(c);
|
|
|
+ #elseif flash9
|
|
|
+ var cname = __global__["flash.utils.getQualifiedClassName"](v);
|
|
|
+ switch(cname) {
|
|
|
+ case "null": return TNull;
|
|
|
+ case "void": return TNull; // undefined
|
|
|
+ case "int": return TInt;
|
|
|
+ case "Number": return TFloat;
|
|
|
+ case "Boolean": return TBool;
|
|
|
+ case "Object": return TObject;
|
|
|
+ default:
|
|
|
+ var c : Dynamic;
|
|
|
+ try {
|
|
|
+ c = __global__["flash.utils.getDefinitionByName"](cname);
|
|
|
+ if( v.hasOwnProperty("prototype") )
|
|
|
+ return TObject;
|
|
|
+ if( c.__isenum )
|
|
|
+ return TEnum(c);
|
|
|
+ return TClass(c);
|
|
|
+ } catch( e : Dynamic ) {
|
|
|
+ if( cname == "builtin.as$0::MethodClosure" || cname.indexOf("-") != -1 )
|
|
|
+ return TFunction;
|
|
|
+ return if( c == null ) TFunction else TClass(c);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- return null;
|
|
|
- #else (flash || js)
|
|
|
- switch( #if flash __typeof__ #else true __js__("typeof") #end(v) ) {
|
|
|
- #if flash
|
|
|
- case "null": return TNull;
|
|
|
- #end
|
|
|
- case "boolean": return TBool;
|
|
|
- case "string": return TClass(String);
|
|
|
- case "number":
|
|
|
- if( v+1 == v )
|
|
|
- return TFloat;
|
|
|
- if( Math.ceil(v) == v )
|
|
|
- return TInt;
|
|
|
- return TFloat;
|
|
|
- case "object":
|
|
|
- #if js
|
|
|
- if( v == null )
|
|
|
- return TNull;
|
|
|
+ return null;
|
|
|
+ #elseif (flash || js)
|
|
|
+ switch( #if flash __typeof__ #else __js__("typeof") #end(v) ) {
|
|
|
+ #if flash
|
|
|
+ case "null": return TNull;
|
|
|
#end
|
|
|
- var e = v.__enum__;
|
|
|
- if( e != null )
|
|
|
- return TEnum(e);
|
|
|
- var c = v.__class__;
|
|
|
- if( c != null )
|
|
|
- return TClass(c);
|
|
|
- return TObject;
|
|
|
- case "function":
|
|
|
- if( v.__name__ != null )
|
|
|
+ case "boolean": return TBool;
|
|
|
+ case "string": return TClass(String);
|
|
|
+ case "number":
|
|
|
+ if( v+1 == v )
|
|
|
+ return TFloat;
|
|
|
+ if( Math.ceil(v) == v )
|
|
|
+ return TInt;
|
|
|
+ return TFloat;
|
|
|
+ case "object":
|
|
|
+ #if js
|
|
|
+ if( v == null )
|
|
|
+ return TNull;
|
|
|
+ #end
|
|
|
+ var e = v.__enum__;
|
|
|
+ if( e != null )
|
|
|
+ return TEnum(e);
|
|
|
+ var c = v.__class__;
|
|
|
+ if( c != null )
|
|
|
+ return TClass(c);
|
|
|
return TObject;
|
|
|
- return TFunction;
|
|
|
- case "undefined":
|
|
|
- return TNull;
|
|
|
- default:
|
|
|
+ case "function":
|
|
|
+ if( v.__name__ != null )
|
|
|
+ return TObject;
|
|
|
+ return TFunction;
|
|
|
+ case "undefined":
|
|
|
+ return TNull;
|
|
|
+ default:
|
|
|
+ return TUnknown;
|
|
|
+ }
|
|
|
+ #else
|
|
|
return TUnknown;
|
|
|
- }
|
|
|
- #else error
|
|
|
#end
|
|
|
}
|
|
|
|
|
@@ -477,34 +480,34 @@ class Type {
|
|
|
if( a == b )
|
|
|
return true;
|
|
|
#if neko
|
|
|
- try {
|
|
|
- if( a.__enum__ == null || a.tag != b.tag )
|
|
|
+ try {
|
|
|
+ if( a.__enum__ == null || a.tag != b.tag )
|
|
|
+ return false;
|
|
|
+ } catch( e : Dynamic ) {
|
|
|
return false;
|
|
|
- } catch( e : Dynamic ) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- for( i in 0...__dollar__asize(a.args) )
|
|
|
- if( !enumEq(a.args[i],b.args[i]) )
|
|
|
+ }
|
|
|
+ for( i in 0...__dollar__asize(a.args) )
|
|
|
+ if( !enumEq(a.args[i],b.args[i]) )
|
|
|
+ return false;
|
|
|
+ #elseif flash9
|
|
|
+ try {
|
|
|
+ if( a.tag != b.tag )
|
|
|
+ return false;
|
|
|
+ for( i in 0...a.params.length )
|
|
|
+ if( !enumEq(a.params[i],b.params[i]) )
|
|
|
+ return false;
|
|
|
+ } catch( e : Dynamic ) {
|
|
|
return false;
|
|
|
- #else flash9
|
|
|
- try {
|
|
|
- if( a.tag != b.tag )
|
|
|
+ }
|
|
|
+ #else
|
|
|
+ if( a[0] != b[0] )
|
|
|
return false;
|
|
|
- for( i in 0...a.params.length )
|
|
|
- if( !enumEq(a.params[i],b.params[i]) )
|
|
|
+ for( i in 2...a.length )
|
|
|
+ if( !enumEq(a[i],b[i]) )
|
|
|
return false;
|
|
|
- } catch( e : Dynamic ) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- #else true
|
|
|
- if( a[0] != b[0] )
|
|
|
- return false;
|
|
|
- for( i in 2...a.length )
|
|
|
- if( !enumEq(a[i],b[i]) )
|
|
|
+ var e = a.__enum__;
|
|
|
+ if( e != b.__enum__ || e == null )
|
|
|
return false;
|
|
|
- var e = a.__enum__;
|
|
|
- if( e != b.__enum__ || e == null )
|
|
|
- return false;
|
|
|
#end
|
|
|
return true;
|
|
|
}
|
|
@@ -513,37 +516,37 @@ class Type {
|
|
|
Returns the constructor of an enum
|
|
|
**/
|
|
|
public static function enumConstructor( e : Dynamic ) : String {
|
|
|
- #if neko
|
|
|
- return new String(e.tag);
|
|
|
- #else flash9
|
|
|
- return e.tag;
|
|
|
- #else true
|
|
|
- return e[0];
|
|
|
- #end
|
|
|
+ #if neko
|
|
|
+ return new String(e.tag);
|
|
|
+ #elseif flash9
|
|
|
+ return e.tag;
|
|
|
+ #else
|
|
|
+ return e[0];
|
|
|
+ #end
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
Returns the parameters of an enum
|
|
|
**/
|
|
|
public static function enumParameters( e : Dynamic ) : Array<Dynamic> {
|
|
|
- #if neko
|
|
|
- return if( e.args == null ) [] else untyped Array.new1(e.args,__dollar__asize(e.args));
|
|
|
- #else flash9
|
|
|
- return if( e.params == null ) [] else e.params;
|
|
|
- #else true
|
|
|
- return e.slice(2);
|
|
|
- #end
|
|
|
+ #if neko
|
|
|
+ return if( e.args == null ) [] else untyped Array.new1(e.args,__dollar__asize(e.args));
|
|
|
+ #elseif flash9
|
|
|
+ return if( e.params == null ) [] else e.params;
|
|
|
+ #else
|
|
|
+ return e.slice(2);
|
|
|
+ #end
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
Returns the index of the constructor of an enum
|
|
|
**/
|
|
|
- public static function enumIndex( e : Dynamic ) : Int {
|
|
|
- #if (neko || flash9)
|
|
|
- return e.index;
|
|
|
- #else true
|
|
|
- return e[1];
|
|
|
- #end
|
|
|
+ public inline static function enumIndex( e : Dynamic ) : Int {
|
|
|
+ #if (neko || flash9)
|
|
|
+ return e.index;
|
|
|
+ #else
|
|
|
+ return e[1];
|
|
|
+ #end
|
|
|
}
|
|
|
|
|
|
}
|