383 lines
11 KiB
JavaScript
383 lines
11 KiB
JavaScript
// Class: haxe.Unserializer
|
|
|
|
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
|
|
|
|
$global.Object.defineProperty(exports, "__esModule", {value: true});
|
|
|
|
var __map_reserved = {};
|
|
|
|
// Imports
|
|
|
|
var $hxClasses = require("./../hxClasses_stub").default;
|
|
var $import = require("./../import_stub").default;
|
|
function haxe__$Unserializer_NullResolver() {return require("./../haxe/_Unserializer/NullResolver");}
|
|
function StringTools() {return require("./../StringTools");}
|
|
function Std() {return require("./../Std");}
|
|
function HxOverrides() {return require("./../HxOverrides");}
|
|
function js__$Boot_HaxeError() {return require("./../js/_Boot/HaxeError");}
|
|
function Reflect() {return require("./../Reflect");}
|
|
function Type() {return require("./../Type");}
|
|
function haxe_ds_ObjectMap() {return require("./../haxe/ds/ObjectMap");}
|
|
function haxe_ds_StringMap() {return require("./../haxe/ds/StringMap");}
|
|
function List() {return require("./../List");}
|
|
function haxe_ds_IntMap() {return require("./../haxe/ds/IntMap");}
|
|
function haxe_io_Bytes() {return require("./../haxe/io/Bytes");}
|
|
function haxe__$Unserializer_DefaultResolver() {return require("./../haxe/_Unserializer/DefaultResolver");}
|
|
|
|
// Constructor
|
|
|
|
var Unserializer = function(buf) {
|
|
this.buf = buf;
|
|
this.length = buf.length;
|
|
this.pos = 0;
|
|
this.scache = [];
|
|
this.cache = [];
|
|
var r = Unserializer.DEFAULT_RESOLVER;
|
|
if(r == null) {
|
|
r = new (haxe__$Unserializer_DefaultResolver().default)();
|
|
Unserializer.DEFAULT_RESOLVER = r;
|
|
}
|
|
this.resolver = r;
|
|
}
|
|
|
|
// Meta
|
|
|
|
Unserializer.__name__ = ["haxe","Unserializer"];
|
|
Unserializer.prototype = {
|
|
setResolver: function(r) {
|
|
if(r == null) {
|
|
this.resolver = (haxe__$Unserializer_NullResolver().default).get_instance();
|
|
} else {
|
|
this.resolver = r;
|
|
}
|
|
},
|
|
get: function(p) {
|
|
return (StringTools().default).fastCodeAt(this.buf,p);
|
|
},
|
|
readDigits: function() {
|
|
var k = 0;
|
|
var s = false;
|
|
var fpos = this.pos;
|
|
while(true) {
|
|
var c = this.get(this.pos);
|
|
if((StringTools().default).isEof(c)) {
|
|
break;
|
|
}
|
|
if(c == 45) {
|
|
if(this.pos != fpos) {
|
|
break;
|
|
}
|
|
s = true;
|
|
this.pos++;
|
|
continue;
|
|
}
|
|
if(c < 48 || c > 57) {
|
|
break;
|
|
}
|
|
k = k * 10 + (c - 48);
|
|
this.pos++;
|
|
}
|
|
if(s) {
|
|
k *= -1;
|
|
}
|
|
return k;
|
|
},
|
|
readFloat: function() {
|
|
var p1 = this.pos;
|
|
while(true) {
|
|
var c = this.get(this.pos);
|
|
if((StringTools().default).isEof(c)) {
|
|
break;
|
|
}
|
|
if(c >= 43 && c < 58 || c == 101 || c == 69) {
|
|
this.pos++;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
return (Std().default).parseFloat((HxOverrides().default).substr(this.buf,p1,this.pos - p1));
|
|
},
|
|
unserializeObject: function(o) {
|
|
while(true) {
|
|
if(this.pos >= this.length) {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid object");
|
|
}
|
|
if(this.get(this.pos) == 103) {
|
|
break;
|
|
}
|
|
var k = this.unserialize();
|
|
if(typeof(k) != "string") {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid object key");
|
|
}
|
|
var v = this.unserialize();
|
|
(Reflect().default).setField(o,k,v);
|
|
}
|
|
this.pos++;
|
|
},
|
|
unserializeEnum: function(edecl,tag) {
|
|
if(this.get(this.pos++) != 58) {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid enum format");
|
|
}
|
|
var nargs = this.readDigits();
|
|
if(nargs == 0) {
|
|
return (Type().default).createEnum(edecl,tag);
|
|
}
|
|
var args = [];
|
|
while(nargs-- > 0) args.push(this.unserialize());
|
|
return (Type().default).createEnum(edecl,tag,args);
|
|
},
|
|
unserialize: function() {
|
|
var _g = this.get(this.pos++);
|
|
switch(_g) {
|
|
case 65:
|
|
var name = this.unserialize();
|
|
var cl = this.resolver.resolveClass(name);
|
|
if(cl == null) {
|
|
throw new (js__$Boot_HaxeError().default)("Class not found " + name);
|
|
}
|
|
return cl;
|
|
case 66:
|
|
var name1 = this.unserialize();
|
|
var e = this.resolver.resolveEnum(name1);
|
|
if(e == null) {
|
|
throw new (js__$Boot_HaxeError().default)("Enum not found " + name1);
|
|
}
|
|
return e;
|
|
case 67:
|
|
var name2 = this.unserialize();
|
|
var cl1 = this.resolver.resolveClass(name2);
|
|
if(cl1 == null) {
|
|
throw new (js__$Boot_HaxeError().default)("Class not found " + name2);
|
|
}
|
|
var o = (Type().default).createEmptyInstance(cl1);
|
|
this.cache.push(o);
|
|
o.hxUnserialize(this);
|
|
if(this.get(this.pos++) != 103) {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid custom data");
|
|
}
|
|
return o;
|
|
case 77:
|
|
var h = new (haxe_ds_ObjectMap().default)();
|
|
this.cache.push(h);
|
|
var buf = this.buf;
|
|
while(this.get(this.pos) != 104) {
|
|
var s = this.unserialize();
|
|
h.set(s,this.unserialize());
|
|
}
|
|
this.pos++;
|
|
return h;
|
|
case 82:
|
|
var n = this.readDigits();
|
|
if(n < 0 || n >= this.scache.length) {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid string reference");
|
|
}
|
|
return this.scache[n];
|
|
case 97:
|
|
var buf1 = this.buf;
|
|
var a = [];
|
|
this.cache.push(a);
|
|
while(true) {
|
|
var c = this.get(this.pos);
|
|
if(c == 104) {
|
|
this.pos++;
|
|
break;
|
|
}
|
|
if(c == 117) {
|
|
this.pos++;
|
|
var n1 = this.readDigits();
|
|
a[a.length + n1 - 1] = null;
|
|
} else {
|
|
a.push(this.unserialize());
|
|
}
|
|
}
|
|
return a;
|
|
case 98:
|
|
var h1 = new (haxe_ds_StringMap().default)();
|
|
this.cache.push(h1);
|
|
var buf2 = this.buf;
|
|
while(this.get(this.pos) != 104) {
|
|
var s1 = this.unserialize();
|
|
h1.set(s1,this.unserialize());
|
|
}
|
|
this.pos++;
|
|
return h1;
|
|
case 99:
|
|
var name3 = this.unserialize();
|
|
var cl2 = this.resolver.resolveClass(name3);
|
|
if(cl2 == null) {
|
|
throw new (js__$Boot_HaxeError().default)("Class not found " + name3);
|
|
}
|
|
var o1 = (Type().default).createEmptyInstance(cl2);
|
|
this.cache.push(o1);
|
|
this.unserializeObject(o1);
|
|
return o1;
|
|
case 100:
|
|
return this.readFloat();
|
|
case 102:
|
|
return false;
|
|
case 105:
|
|
return this.readDigits();
|
|
case 106:
|
|
var name4 = this.unserialize();
|
|
var edecl = this.resolver.resolveEnum(name4);
|
|
if(edecl == null) {
|
|
throw new (js__$Boot_HaxeError().default)("Enum not found " + name4);
|
|
}
|
|
this.pos++;
|
|
var index = this.readDigits();
|
|
var tag = (Type().default).getEnumConstructs(edecl)[index];
|
|
if(tag == null) {
|
|
throw new (js__$Boot_HaxeError().default)("Unknown enum index " + name4 + "@" + index);
|
|
}
|
|
var e1 = this.unserializeEnum(edecl,tag);
|
|
this.cache.push(e1);
|
|
return e1;
|
|
case 107:
|
|
return NaN;
|
|
case 108:
|
|
var l = new (List().default)();
|
|
this.cache.push(l);
|
|
var buf3 = this.buf;
|
|
while(this.get(this.pos) != 104) l.add(this.unserialize());
|
|
this.pos++;
|
|
return l;
|
|
case 109:
|
|
return -Infinity;
|
|
case 110:
|
|
return null;
|
|
case 111:
|
|
var o2 = { };
|
|
this.cache.push(o2);
|
|
this.unserializeObject(o2);
|
|
return o2;
|
|
case 112:
|
|
return Infinity;
|
|
case 113:
|
|
var h2 = new (haxe_ds_IntMap().default)();
|
|
this.cache.push(h2);
|
|
var buf4 = this.buf;
|
|
var c1 = this.get(this.pos++);
|
|
while(c1 == 58) {
|
|
var i = this.readDigits();
|
|
h2.set(i,this.unserialize());
|
|
c1 = this.get(this.pos++);
|
|
}
|
|
if(c1 != 104) {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid IntMap format");
|
|
}
|
|
return h2;
|
|
case 114:
|
|
var n2 = this.readDigits();
|
|
if(n2 < 0 || n2 >= this.cache.length) {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid reference");
|
|
}
|
|
return this.cache[n2];
|
|
case 115:
|
|
var len = this.readDigits();
|
|
var buf5 = this.buf;
|
|
if(this.get(this.pos++) != 58 || this.length - this.pos < len) {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid bytes length");
|
|
}
|
|
var codes = Unserializer.CODES;
|
|
if(codes == null) {
|
|
codes = Unserializer.initCodes();
|
|
Unserializer.CODES = codes;
|
|
}
|
|
var i1 = this.pos;
|
|
var rest = len & 3;
|
|
var size = (len >> 2) * 3 + (rest >= 2 ? rest - 1 : 0);
|
|
var max = i1 + (len - rest);
|
|
var bytes = (haxe_io_Bytes().default).alloc(size);
|
|
var bpos = 0;
|
|
while(i1 < max) {
|
|
var c11 = codes[(StringTools().default).fastCodeAt(buf5,i1++)];
|
|
var c2 = codes[(StringTools().default).fastCodeAt(buf5,i1++)];
|
|
bytes.set(bpos++,c11 << 2 | c2 >> 4);
|
|
var c3 = codes[(StringTools().default).fastCodeAt(buf5,i1++)];
|
|
bytes.set(bpos++,c2 << 4 | c3 >> 2);
|
|
var c4 = codes[(StringTools().default).fastCodeAt(buf5,i1++)];
|
|
bytes.set(bpos++,c3 << 6 | c4);
|
|
}
|
|
if(rest >= 2) {
|
|
var c12 = codes[(StringTools().default).fastCodeAt(buf5,i1++)];
|
|
var c21 = codes[(StringTools().default).fastCodeAt(buf5,i1++)];
|
|
bytes.set(bpos++,c12 << 2 | c21 >> 4);
|
|
if(rest == 3) {
|
|
var c31 = codes[(StringTools().default).fastCodeAt(buf5,i1++)];
|
|
bytes.set(bpos++,c21 << 4 | c31 >> 2);
|
|
}
|
|
}
|
|
this.pos += len;
|
|
this.cache.push(bytes);
|
|
return bytes;
|
|
case 116:
|
|
return true;
|
|
case 118:
|
|
var d;
|
|
if(this.get(this.pos) >= 48 && this.get(this.pos) <= 57 && this.get(this.pos + 1) >= 48 && this.get(this.pos + 1) <= 57 && this.get(this.pos + 2) >= 48 && this.get(this.pos + 2) <= 57 && this.get(this.pos + 3) >= 48 && this.get(this.pos + 3) <= 57 && this.get(this.pos + 4) == 45) {
|
|
d = (HxOverrides().default).strDate((HxOverrides().default).substr(this.buf,this.pos,19));
|
|
this.pos += 19;
|
|
} else {
|
|
var t = this.readFloat();
|
|
d = new Date(t);
|
|
}
|
|
this.cache.push(d);
|
|
return d;
|
|
case 119:
|
|
var name5 = this.unserialize();
|
|
var edecl1 = this.resolver.resolveEnum(name5);
|
|
if(edecl1 == null) {
|
|
throw new (js__$Boot_HaxeError().default)("Enum not found " + name5);
|
|
}
|
|
var e2 = this.unserializeEnum(edecl1,this.unserialize());
|
|
this.cache.push(e2);
|
|
return e2;
|
|
case 120:
|
|
throw (js__$Boot_HaxeError().default).wrap(this.unserialize());
|
|
break;
|
|
case 121:
|
|
var len1 = this.readDigits();
|
|
if(this.get(this.pos++) != 58 || this.length - this.pos < len1) {
|
|
throw new (js__$Boot_HaxeError().default)("Invalid string length");
|
|
}
|
|
var s2 = (HxOverrides().default).substr(this.buf,this.pos,len1);
|
|
this.pos += len1;
|
|
s2 = (StringTools().default).urlDecode(s2);
|
|
this.scache.push(s2);
|
|
return s2;
|
|
case 122:
|
|
return 0;
|
|
default:
|
|
}
|
|
this.pos--;
|
|
throw new (js__$Boot_HaxeError().default)("Invalid char " + this.buf.charAt(this.pos) + " at position " + this.pos);
|
|
}
|
|
};
|
|
Unserializer.prototype.__class__ = $hxClasses["haxe.Unserializer"] = Unserializer;
|
|
|
|
// Init
|
|
|
|
|
|
|
|
// Statics
|
|
|
|
Unserializer.initCodes = function() {
|
|
var codes = [];
|
|
var _g1 = 0;
|
|
var _g = Unserializer.BASE64.length;
|
|
while(_g1 < _g) {
|
|
var i = _g1++;
|
|
codes[(StringTools().default).fastCodeAt(Unserializer.BASE64,i)] = i;
|
|
}
|
|
return codes;
|
|
}
|
|
Unserializer.run = function(v) {
|
|
return new Unserializer(v).unserialize();
|
|
}
|
|
Unserializer.DEFAULT_RESOLVER = new (haxe__$Unserializer_DefaultResolver().default)()
|
|
Unserializer.BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:"
|
|
Unserializer.CODES = null
|
|
|
|
// Export
|
|
|
|
exports.default = Unserializer; |