openfl
Version:
A fast, productive library for 2D cross-platform development.
382 lines (366 loc) • 11 kB
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 $hxEnums = require("./../hxEnums_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 haxe_ds_List() {return require("./../haxe/ds/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.__isInterface__ = false;
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() {
switch(this.get(this.pos++)) {
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 (haxe_ds_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 {
d = new Date(this.readFloat());
}
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());
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__ = Unserializer.prototype.constructor = $hxClasses["haxe.Unserializer"] = Unserializer;
// Init
// Statics
Unserializer.initCodes = function() {
var codes = [];
var _g = 0;
var _g1 = Unserializer.BASE64.length;
while(_g < _g1) {
var i = _g++;
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;