Browse Source

flash9 support, small changes in class & enum encoding.

Nicolas Cannasse 19 years ago
parent
commit
04ba9c4073
1 changed files with 38 additions and 5 deletions
  1. 38 5
      std/haxe/Serializer.hx

+ 38 - 5
std/haxe/Serializer.hx

@@ -119,10 +119,24 @@ class Serializer {
 		return false;
 		return false;
 	}
 	}
 
 
+	#if flash9
+	// only the instance variables
+
+	function serializeClassFields(v,c) {
+		var xml : Dynamic = untyped __global__["flash.utils.describeType"](c).factory;
+		var vars = xml.child("variable");
+		for( i in 0...vars.length() ) {
+			var f = untyped vars[i].attribute("name").toString();
+			if( !v.hasOwnProperty(f) )
+				continue;
+			serializeString(f);
+			serialize(Reflect.field(v,f));
+		}
+		buf.add("g");
+	}
+	#end
+
 	function serializeFields(v) {
 	function serializeFields(v) {
-		#if flash9
-		throw "TODO";
-		#end
 		for( f in Reflect.fields(v) ) {
 		for( f in Reflect.fields(v) ) {
 			serializeString(f);
 			serializeString(f);
 			serialize(Reflect.field(v,f));
 			serialize(Reflect.field(v,f));
@@ -190,9 +204,15 @@ class Serializer {
 				}
 				}
 				buf.add("h");
 				buf.add("h");
 			default:
 			default:
+				cache.pop();
 				buf.add("c");
 				buf.add("c");
-				serialize(Type.getClassName(c).split("."));
+				serialize(Type.getClassName(c));
+				cache.push(v);
+				#if flash9
+				serializeClassFields(v,c);
+				#else true
 				serializeFields(v);
 				serializeFields(v);
+				#end
 			}
 			}
 		case TObject:
 		case TObject:
 			if( useCache && serializeRef(v) )
 			if( useCache && serializeRef(v) )
@@ -202,8 +222,9 @@ class Serializer {
 		case TEnum(e):
 		case TEnum(e):
 			if( useCache && serializeRef(v) )
 			if( useCache && serializeRef(v) )
 				return;
 				return;
+			cache.pop();
 			buf.add("w");
 			buf.add("w");
-			serialize(Type.getEnumName(e).split("."));
+			serialize(Type.getEnumName(e));
 			#if neko
 			#if neko
 			serializeString(new String(v.tag));
 			serializeString(new String(v.tag));
 			buf.add(":");
 			buf.add(":");
@@ -215,6 +236,17 @@ class Serializer {
 				for( i in 0...l )
 				for( i in 0...l )
 					serialize(v.args[i]);
 					serialize(v.args[i]);
 			}
 			}
+			#else flash9
+			serializeString(v.tag);
+			buf.add(":");
+			if( v.params == null )
+				buf.add(0);
+			else {
+				var l : Int = v.params.length;
+				buf.add(l);
+				for( i in 0...l )
+					serialize(v.params[i]);
+			}
 			#else true
 			#else true
 			serializeString(v[0]);
 			serializeString(v[0]);
 			buf.add(":");
 			buf.add(":");
@@ -223,6 +255,7 @@ class Serializer {
 			for( i in 1...l )
 			for( i in 1...l )
 				serialize(v[i]);
 				serialize(v[i]);
 			#end
 			#end
+			cache.push(v);
 		case TFunction:
 		case TFunction:
 			throw "Cannot serialize function";
 			throw "Cannot serialize function";
 		default:
 		default: