Browse Source

ensured constructor equality & correct unserialization.

Nicolas Cannasse 19 years ago
parent
commit
d730b5587c
1 changed files with 15 additions and 12 deletions
  1. 15 12
      std/haxe/Unserializer.hx

+ 15 - 12
std/haxe/Unserializer.hx

@@ -235,6 +235,7 @@ class Unserializer {
 			#else true
 			var e : Array<Dynamic> = new Array();
 			#end
+			var cpos = cache.length;
 			cache.push(e);
 			var a : Array<String> = unserialize();
             if( !Std.is(a,Array) )
@@ -260,20 +261,22 @@ class Unserializer {
 			if( buf.charCodeAt(pos++) != 58 ) // ':'
 				throw "Invalid enum format";
 			var nargs = readDigits();
-			if( nargs > 0 ) {
+			if( nargs == 0 ) {
+				cache[cpos] = constr;
+				return constr;
+			}
+			#if neko
+			var i = 0;
+			e.args = untyped __dollar__amake(nargs);
+			#end
+			while( nargs > 0 ) {
 				#if neko
-				var i = 0;
-				e.args = untyped __dollar__amake(nargs);
+				e.args[i] = unserialize();
+				i += 1;
+				#else true
+				e.push(unserialize());
 				#end
-				while( nargs > 0 ) {
-					#if neko
-					e.args[i] = unserialize();
-					i += 1;
-					#else true
-					e.push(unserialize());
-					#end
-					nargs -= 1;
-				}
+				nargs -= 1;
 			}
 			return e;
  		default: