Browse Source

added EnumValue (any instance of any Enum)

Nicolas Cannasse 13 years ago
parent
commit
cd21e4a629
12 changed files with 59 additions and 48 deletions
  1. 1 0
      gencpp.ml
  2. 1 0
      genswf9.ml
  3. 7 0
      std/EnumValue.hx
  4. 4 4
      std/Type.hx
  5. 7 7
      std/cpp/_std/Type.hx
  6. 7 7
      std/flash/_std/Type.hx
  7. 7 7
      std/flash8/_std/Type.hx
  8. 7 7
      std/js/_std/Type.hx
  9. 7 7
      std/neko/_std/Type.hx
  10. 7 7
      std/php/_std/Type.hx
  11. 2 2
      std/sys/db/Types.hx
  12. 2 0
      type.ml

+ 1 - 0
gencpp.ml

@@ -344,6 +344,7 @@ let rec class_string klass suffix params =
 	|  ([],"#Int") -> "/* # */int"
 	|  (["haxe";"io"],"Unsigned_char__") -> "unsigned char"
 	|  ([],"Class") -> "::Class"
+	|  ([],"EnumValue") -> "Dynamic"
 	|  ([],"Null") -> (match params with
 			| [t] ->
 				(match follow t with

+ 1 - 0
genswf9.ml

@@ -147,6 +147,7 @@ let real_path = function
 	| [] , "Float" -> [] , "Number"
 	| [] , "Bool" -> [] , "Boolean"
 	| [] , "Enum" -> [] , "Class"
+	| [] , "EnumValue" -> [] , "Object"
 	| ["flash";"xml"], "XML" -> [], "XML"
 	| ["flash";"xml"], "XMLList" -> [], "XMLList"
 	| ["flash";"utils"], "QName" -> [] , "QName"

+ 7 - 0
std/EnumValue.hx

@@ -0,0 +1,7 @@
+
+/**
+	An abstract type that represents any enum value.
+	See [Type] for the haXe Reflection API.
+**/
+extern class EnumValue {
+}

+ 4 - 4
std/Type.hx

@@ -53,7 +53,7 @@ extern class Type {
 	/**
 		Returns the enum of a value or [null] if this value is not an Enum instance.
 	**/
-	public static function getEnum( o : Dynamic ) : Enum<Dynamic>;
+	public static function getEnum( o : EnumValue ) : Enum<Dynamic>;
 
 
 	/**
@@ -133,17 +133,17 @@ extern class Type {
 	/**
 		Returns the constructor of an enum
 	**/
-	public static function enumConstructor( e : Dynamic ) : String;
+	public static function enumConstructor( e : EnumValue ) : String;
 
 	/**
 		Returns the parameters of an enum
 	**/
-	public static function enumParameters( e : Dynamic ) : Array<Dynamic>;
+	public static function enumParameters( e : EnumValue ) : Array<Dynamic>;
 
 	/**
 		Returns the index of the constructor of an enum
 	**/
-	public static function enumIndex( e : Dynamic ) : Int;
+	public static function enumIndex( e : EnumValue ) : Int;
 
 	/**
 		Returns the list of all enum values that don't take any parameter.

+ 7 - 7
std/cpp/_std/Type.hx

@@ -47,9 +47,9 @@ enum ValueType {
 			return c;
 	}
 
-	public static function getEnum( o : Dynamic ) : Enum<Dynamic> untyped {
+	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped {
 		if (o==null) return null;
-		return o.__GetClass();
+		return untyped o.__GetClass();
 	}
 
 
@@ -135,17 +135,17 @@ enum ValueType {
 			return a==b;
 	}
 
-	public static function enumConstructor( e : Dynamic ) : String {
-			return e.__Tag();
+	public static function enumConstructor( e : EnumValue ) : String {
+			return untyped e.__Tag();
 	}
 
-	public static function enumParameters( e : Dynamic ) : Array<Dynamic> {
+	public static function enumParameters( e : EnumValue ) : Array<Dynamic> {
 			var result : Array<Dynamic> =  untyped e.__EnumParams();
 			return result==null ? [] : result;
 	}
 
-	public inline static function enumIndex( e : Dynamic ) : Int {
-			return e.__Index();
+	public inline static function enumIndex( e : EnumValue ) : Int {
+			return untyped e.__Index();
 	}
 
 	public static function allEnums<T>( e : Enum<T> ) : Array<T> {

+ 7 - 7
std/flash/_std/Type.hx

@@ -49,7 +49,7 @@ enum ValueType {
 		return c;
 	}
 
-	public static function getEnum( o : Dynamic ) : Enum<Dynamic> untyped {
+	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped {
 		var cname = __global__["flash.utils.getQualifiedClassName"](o);
 		if( cname == "null" || cname.substr(0,8) == "builtin." )
 			return null;
@@ -259,16 +259,16 @@ enum ValueType {
 		return true;
 	}
 
-	public static function enumConstructor( e : Dynamic ) : String {
-		return e.tag;
+	public static function enumConstructor( e : EnumValue ) : String {
+		return untyped e.tag;
 	}
 
-	public static function enumParameters( e : Dynamic ) : Array<Dynamic> {
-		return if( e.params == null ) [] else e.params;
+	public static function enumParameters( e : EnumValue ) : Array<Dynamic> {
+		return untyped if( e.params == null ) [] else e.params;
 	}
 
-	public inline static function enumIndex( e : Dynamic ) : Int {
-		return e.index;
+	public inline static function enumIndex( e : EnumValue ) : Int {
+		return untyped e.index;
 	}
 
 	public static function allEnums<T>( e : Enum<T> ) : Array<T> {

+ 7 - 7
std/flash8/_std/Type.hx

@@ -43,7 +43,7 @@ enum ValueType {
 		return o.__class__;
 	}
 
-	public static function getEnum( o : Dynamic ) : Enum<Dynamic> untyped {
+	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped {
 		return o.__enum__;
 	}
 
@@ -184,16 +184,16 @@ enum ValueType {
 		return true;
 	}
 
-	public static function enumConstructor( e : Dynamic ) : String {
-		return e[0];
+	public static function enumConstructor( e : EnumValue ) : String {
+		return untyped e[0];
 	}
 
-	public static function enumParameters( e : Dynamic ) : Array<Dynamic> {
-		return e.slice(2);
+	public static function enumParameters( e : EnumValue ) : Array<Dynamic> {
+		return untyped e.slice(2);
 	}
 
-	public inline static function enumIndex( e : Dynamic ) : Int {
-		return e[1];
+	public inline static function enumIndex( e : EnumValue ) : Int {
+		return untyped e[1];
 	}
 
 	public static function allEnums<T>( e : Enum<T> ) : Array<T> {

+ 7 - 7
std/js/_std/Type.hx

@@ -45,7 +45,7 @@ enum ValueType {
 		return o.__class__;
 	}
 
-	public static function getEnum( o : Dynamic ) : Enum<Dynamic> untyped {
+	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped {
 		if( o == null )
 			return null;
 		return o.__enum__;
@@ -202,16 +202,16 @@ enum ValueType {
 		return true;
 	}
 
-	public inline static function enumConstructor( e : Dynamic ) : String {
-		return e[0];
+	public inline static function enumConstructor( e : EnumValue ) : String {
+		return untyped e[0];
 	}
 
-	public inline static function enumParameters( e : Dynamic ) : Array<Dynamic> {
-		return e.slice(2);
+	public inline static function enumParameters( e : EnumValue ) : Array<Dynamic> {
+		return untyped e.slice(2);
 	}
 
-	public inline static function enumIndex( e : Dynamic ) : Int {
-		return e[1];
+	public inline static function enumIndex( e : EnumValue ) : Int {
+		return untyped e[1];
 	}
 
 	public static function allEnums<T>( e : Enum<T> ) : Array<T> {

+ 7 - 7
std/neko/_std/Type.hx

@@ -46,7 +46,7 @@ enum ValueType {
 		return p.__class__;
 	}
 
-	public static function getEnum( o : Dynamic ) : Enum<Dynamic> untyped {
+	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped {
 		if( __dollar__typeof(o) != __dollar__tobject )
 			return null;
 		return o.__enum__;
@@ -202,16 +202,16 @@ enum ValueType {
 		return true;
 	}
 
-	public static function enumConstructor( e : Dynamic ) : String {
-		return new String(e.tag);
+	public static function enumConstructor( e : EnumValue ) : String {
+		return new String(untyped e.tag);
 	}
 
-	public static function enumParameters( e : Dynamic ) : Array<Dynamic> {
-		return if( e.args == null ) [] else untyped Array.new1(e.args,__dollar__asize(e.args));
+	public static function enumParameters( e : EnumValue ) : Array<Dynamic> {
+		return untyped if( e.args == null ) [] else Array.new1(e.args,__dollar__asize(e.args));
 	}
 
-	public inline static function enumIndex( e : Dynamic ) : Int {
-		return e.index;
+	public inline static function enumIndex( e : EnumValue ) : Int {
+		return untyped e.index;
 	}
 
 	public static function allEnums<T>( e : Enum<T> ) : Array<T> {

+ 7 - 7
std/php/_std/Type.hx

@@ -32,7 +32,7 @@ enum ValueType {
 			return __call__("_hx_ttype", c);
 	}
 
-	public static function getEnum( o : Dynamic ) : Enum<Dynamic> untyped {
+	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped {
 		if(!__php__("$o instanceof Enum"))
 			return null;
 		else
@@ -210,19 +210,19 @@ enum ValueType {
 		return true;
 	}
 
-	public static function enumConstructor( e : Dynamic ) : String {
-		return e.tag;
+	public static function enumConstructor( e : EnumValue ) : String {
+		return untyped e.tag;
 	}
 
-	public static function enumParameters( e : Dynamic ) : Array<Dynamic> {
+	public static function enumParameters( e : EnumValue ) : Array<Dynamic> untyped {
 		if(e.params == null)
 			return [];
 		else
-			return untyped __php__("new _hx_array($e->params)");
+			return __php__("new _hx_array($e->params)");
 	}
 
-	public inline static function enumIndex( e : Dynamic ) : Int {
-		return e.index;
+	public inline static function enumIndex( e : EnumValue ) : Int {
+		return untyped e.index;
 	}
 
 	public static function allEnums<T>( e : Enum<T> ) : Array<T> {

+ 2 - 2
std/sys/db/Types.hx

@@ -101,7 +101,7 @@ typedef SSerialized = String
 typedef SNekoSerialized = haxe.io.Bytes
 
 @:native("Int")
-extern class SFlags<T> {
+extern class SFlags<T:EnumValue> {
 	public inline function init() : Void {
 		untyped __this__ = 0;
 	}
@@ -114,7 +114,7 @@ extern class SFlags<T> {
 	public inline function unset( v : T ) : Void {
 		untyped __this__ &= 0xFFFFFFF - (1 << Type.enumIndex(v));
 	}
-	public inline static function ofInt<T>( i : Int ) : SFlags<T> {
+	public inline static function ofInt( i : Int ) : SFlags<Dynamic> {
 		return cast i;
 	}
 	public inline function toInt() : Int {

+ 2 - 0
type.ml

@@ -910,6 +910,8 @@ let rec unify a b =
 		(match !(an.a_status) with
 		| EnumStatics e -> unify (TEnum (e,List.map snd e.e_types)) pt
 		| _ -> error [cannot_unify a b])
+	| TEnum _, TInst ({ cl_path = [],"EnumValue" },[]) ->
+		()
 	| TDynamic t , _ ->
 		if t == a then
 			()