aboutsummaryrefslogtreecommitdiff
path: root/demos/lua.js
diff options
context:
space:
mode:
Diffstat (limited to 'demos/lua.js')
-rw-r--r--demos/lua.js58562
1 files changed, 58562 insertions, 0 deletions
diff --git a/demos/lua.js b/demos/lua.js
new file mode 100644
index 00000000..8eba36f5
--- /dev/null
+++ b/demos/lua.js
@@ -0,0 +1,58562 @@
+// LLVM_STYLE: new
+
+// Capture the output of this into a variable, if you want
+//(function(Module, args) {
+// Module = Module || {};
+// args = args || [];
+
+// Runs much faster, for some reason
+var Module = {};
+// XXX manually added for demo // var args = arguments;
+ // === Auto-generated preamble library stuff ===
+
+ Runtime = {
+ stackAlloc: function stackAlloc(size) { var ret = STACKTOP; STACKTOP += size;STACKTOP = Math.ceil(STACKTOP/4)*4;; return ret; },
+ staticAlloc: function staticAlloc(size) { var ret = STATICTOP; STATICTOP += size;STATICTOP = Math.ceil(STATICTOP/4)*4;; return ret; },
+ alignMemory: function alignMemory(size,quantum) { var ret = size = Math.ceil(size/(quantum ? quantum : 4))*(quantum ? quantum : 4);; return ret; },
+ getFunctionIndex: function getFunctionIndex(func, ident) {
+ var key = FUNCTION_TABLE.length;
+ FUNCTION_TABLE[key] = func;
+ FUNCTION_TABLE[key+1] = null; // Need to have keys be even numbers, see |polymorph| test
+ Module[ident] = func; // Export using full name, for Closure Compiler
+ return key;
+ },
+ isNumberType: function (type) {
+ return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
+ },
+ isPointerType: function isPointerType(type) {
+ return pointingLevels(type) > 0;
+ },
+ isStructType: function isStructType(type) {
+ if (isPointerType(type)) return false;
+ if (new RegExp(/^\[\d+\ x\ (.*)\]/g).test(type)) return true; // [15 x ?] blocks. Like structs
+ // See comment in isStructPointerType()
+ return !Runtime.isNumberType(type) && type[0] == '%';
+ },
+ INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
+ FLOAT_TYPES: {"float":0,"double":0},
+ getNativeFieldSize: function getNativeFieldSize(field, alone) {
+ var size;
+ if (4 > 1) {
+ size = {
+ 'i1': alone ? 1 : 4, // inside a struct, aligned to 4,
+ 'i8': alone ? 1 : 4, // most likely...? XXX
+ 'i16': alone ? 2 : 4, // ditto
+ 'i32': 4,
+ 'i64': 8,
+ 'float': 4,
+ 'double':8
+ }[field]; // XXX 32/64 bit stuff
+ if (!size) {
+ size = 4; // Must be a pointer XXX 32/64
+ }
+ } else {
+ size = 1;
+ }
+ return size;
+ },
+ dedup: function dedup(items, ident) {
+ var seen = {};
+ if (ident) {
+ return items.filter(function(item) {
+ if (seen[item[ident]]) return false;
+ seen[item[ident]] = true;
+ return true;
+ });
+ } else {
+ return items.filter(function(item) {
+ if (seen[item]) return false;
+ seen[item] = true;
+ return true;
+ });
+ }
+ },
+ calculateStructAlignment: function calculateStructAlignment(type, otherTypes) {
+ type.flatSize = 0;
+ var diffs = [];
+ var prev = -1, maxSize = -1;
+ type.flatIndexes = type.fields.map(function(field) {
+ var size;
+ if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
+ size = Runtime.getNativeFieldSize(field, true); // pack char; char; in structs, also char[X]s.
+ maxSize = Math.max(maxSize, size);
+ } else if (Runtime.isStructType(field)) {
+ size = otherTypes[field].flatSize;
+ maxSize = Math.max(maxSize, 4);
+ } else {
+ dprint('Unclear type in struct: ' + field + ', in ' + type.name_);
+ assert(0);
+ }
+ var curr = Runtime.alignMemory(type.flatSize, Math.min(4, size)); // if necessary, place this on aligned memory
+ type.flatSize = curr + size;
+ if (prev >= 0) {
+ diffs.push(curr-prev);
+ }
+ prev = curr;
+ return curr;
+ });
+ type.flatSize = Runtime.alignMemory(type.flatSize, maxSize);
+ if (diffs.length == 0) {
+ type.flatFactor = type.flatSize;
+ } else if (Runtime.dedup(diffs).length == 1) {
+ type.flatFactor = diffs[0];
+ }
+ type.needsFlattening = (type.flatFactor != 1);
+ return type.flatIndexes;
+ },
+ __dummy__: 0
+ }
+
+
+ function __globalConstructor__() {
+ }
+
+ // Maps ints ==> functions. This lets us pass around ints, which are
+ // actually pointers to functions, and we convert at call()time
+ var FUNCTION_TABLE = [];
+
+ var __THREW__ = false; // Used in checking for thrown exceptions.
+
+ var __ATEXIT__ = [];
+
+
+
+
+ var ABORT = false;
+
+ var undef = 0;
+
+ function assert(condition, text) {
+ if (!condition) {
+ var text = "Assertion failed: " + text;
+ print(text + ':\n' + (new Error).stack);
+ ABORT = true;
+ throw "Assertion: " + text;
+ }
+ }
+
+ function Pointer_niceify(ptr) {
+ return { slab: IHEAP, pos: ptr };
+ }
+
+ // Creates a pointer for a certain slab and a certain address in that slab.
+ // If just a slab is given, will allocate room for it and copy it there. In
+ // other words, do whatever is necessary in order to return a pointer, that
+ // points to the slab (and possibly position) we are given.
+
+ var ALLOC_NORMAL = 0; // Tries to use _malloc()
+ var ALLOC_STACK = 1; // Lives for the duration of the current function call
+ var ALLOC_STATIC = 2; // Cannot be freed
+
+ function Pointer_make(slab, pos, allocator) {
+ pos = pos ? pos : 0;
+ assert(pos === 0); // TODO: remove 'pos'
+ if (slab === HEAP) return pos;
+ var size = 0;
+
+ // The slab may contain arrays, which we basically need to 'flatten' out
+ // into one long slab. We do that by traversing it, and not by creating
+ // a new slab, to save time and memory
+ var stack = [[slab, 0]], top, curr;
+ while(1) {
+ top = stack[stack.length-1];
+ if (top[1] >= top[0].length) {
+ stack.pop();
+ if (stack.length === 0) break;
+ top = stack[stack.length-1];
+ top[1]++;
+ continue;
+ }
+ var curr = top[0][top[1]];
+ if (curr === undefined)
+ throw 'Invalid element in slab'; // This can be caught, and you can try again to allocate later, see globalFuncs in run()
+ if (curr.length) {
+ stack.push([curr,0]);
+ continue;
+ }
+ size++;
+ top[1]++;
+ }
+
+ // Finalize
+ var ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc][allocator ? allocator : ALLOC_STATIC](Math.max(size, 1));
+
+ stack = [[slab, 0]];
+ var i = 0;
+ while(1) {
+ top = stack[stack.length-1];
+ if (top[1] >= top[0].length) {
+ stack.pop();
+ if (stack.length === 0) break;
+ top = stack[stack.length-1];
+ top[1]++;
+ continue;
+ }
+ var curr = top[0][top[1]];
+ if (curr.length) {
+ stack.push([curr,0]);
+ continue;
+ }
+
+ if (typeof curr === 'function') {
+ curr = Runtime.getFunctionIndex(curr);
+ }
+ // TODO: Check - also in non-typedarray case - for functions, and if so add |.__index__|
+ if (typeof curr === 'number' || typeof curr === 'boolean') {
+ IHEAP[ret + i] = curr; // TODO: optimize. Can easily detect floats, but 1.0 might look like an int...
+ FHEAP[ret + i] = curr;
+ } else {
+ HEAP[ret + i] = curr;
+ }
+
+ top[1]++;
+ i++;
+ }
+
+ return ret;
+ }
+
+ function Pointer_stringify(ptr) {
+ ptr = Pointer_niceify(ptr);
+
+ var ret = "";
+ var i = 0;
+ var t;
+ while (1) {
+ // if ((ptr.pos + i) >= ptr.slab.length) { return "<< Invalid read: " + (ptr.pos+i) + " : " + ptr.slab.length + " >>"; } else {}
+ if ((ptr.pos+i) >= ptr.slab.length) { break; } else {}
+ t = String.fromCharCode(ptr.slab[ptr.pos + i]);
+ if (t == "\0") { break; } else {}
+ ret += t;
+ i += 1;
+ }
+ return ret;
+ }
+
+ // Memory management
+
+ var PAGE_SIZE = 4096;
+ function alignMemoryPage(x) {
+ return Math.ceil(x/PAGE_SIZE)*PAGE_SIZE;
+ }
+
+ var HEAP, IHEAP, FHEAP;
+ var STACK_ROOT, STACKTOP, STACK_MAX;
+ var STATICTOP;
+
+ // Mangled |new| and |free| (various manglings, for int, long params; new and new[], etc.
+ var _malloc, _free, __Znwj, __Znaj, __Znam, __Znwm, __ZdlPv, __ZdaPv;
+
+ function __initializeRuntime__() {
+ // If we don't have malloc/free implemented, use a simple implementation.
+ Module['_malloc'] = _malloc = __Znwj = __Znaj = __Znam = __Znwm = Module['_malloc'] ? Module['_malloc'] : Runtime.staticAlloc;
+ Module['_free'] = _free = __ZdlPv = __ZdaPv = Module['_free'] ? Module['_free'] : function() { };
+
+ HEAP = intArrayFromString('(null)'); // So printing %s of NULL gives '(null)'
+ // Also this ensures we leave 0 as an invalid address, 'NULL'
+ if (!this['TOTAL_MEMORY']) TOTAL_MEMORY = 50*1024*1024;
+ if (this['Int32Array']) { // check for engine support
+ IHEAP = new Int32Array(TOTAL_MEMORY);
+ for (var i = 0; i < HEAP.length; i++) {
+ IHEAP[i] = HEAP[i];
+ }
+ } else {
+ IHEAP = HEAP; // fallback
+ }
+ if (this['Float64Array']) { // check for engine support
+ FHEAP = new Float64Array(TOTAL_MEMORY);
+ } else {
+ FHEAP = HEAP; // fallback
+ }
+
+ Module['HEAP'] = HEAP;
+ Module['IHEAP'] = IHEAP;
+ Module['FHEAP'] = FHEAP;
+
+ STACK_ROOT = STACKTOP = alignMemoryPage(10);
+ if (!this['TOTAL_STACK']) TOTAL_STACK = 1024*1024; // Reserved room for stack
+ STACK_MAX = STACK_ROOT + TOTAL_STACK;
+
+ STATICTOP = alignMemoryPage(STACK_MAX);
+ }
+
+ function __shutdownRuntime__() {
+ while( __ATEXIT__.length > 0) {
+ var func = __ATEXIT__.pop();
+ if (typeof func === 'number') {
+ func = FUNCTION_TABLE[func];
+ }
+ func();
+ }
+ }
+
+ // stdio.h
+
+ // C-style: we work on ints on the HEAP.
+ function __formatString() {
+ var textIndex = arguments[0];
+ var argIndex = 1;
+ var ret = [];
+ var curr = -1;
+ while (curr) { // Note: should be curr != 0, technically. But this helps catch bugs with undefineds
+ curr = IHEAP[textIndex];
+ next = IHEAP[textIndex+1];
+ if (curr == '%'.charCodeAt(0) && ['d', 'u', 'f', '.'].indexOf(String.fromCharCode(next)) != -1) {
+ var argText = String(+arguments[argIndex]); // +: boolean=>int
+ // Handle very very simply formatting, namely only %.Xf
+ if (next == '.'.charCodeAt(0)) {
+ var limit = 0;
+ while(1) {
+ var limitChr = IHEAP[textIndex+2];
+ if (!(limitChr >= '0'.charCodeAt(0) && limitChr <= '9'.charCodeAt(0))) break;
+ limit *= 10;
+ limit += limitChr - '0'.charCodeAt(0);
+ textIndex++;
+ }
+ textIndex--;
+ var dotIndex = argText.indexOf('.');
+ if (dotIndex == -1) {
+ dotIndex = argText.length;
+ argText += '.';
+ }
+ argText += '00000000000'; // padding
+ argText = argText.substr(0, dotIndex+1+limit);
+ textIndex += 2;
+ } else if (next == 'u'.charCodeAt(0)) {
+ argText = String(unSign(arguments[argIndex], 32));
+ }
+ argText.split('').forEach(function(chr) {
+ ret.push(chr.charCodeAt(0));
+ });
+ argIndex += 1;
+ textIndex += 2;
+ } else if (curr == '%'.charCodeAt(0) && next == 's'.charCodeAt(0)) {
+ ret = ret.concat(String_copy(arguments[argIndex]));
+ argIndex += 1;
+ textIndex += 2;
+ } else if (curr == '%'.charCodeAt(0) && next == 'c'.charCodeAt(0)) {
+ ret = ret.concat(arguments[argIndex]);
+ argIndex += 1;
+ textIndex += 2;
+ } else {
+ ret.push(curr);
+ textIndex += 1;
+ }
+ }
+ return Pointer_make(ret, 0, ALLOC_STACK); // NB: Stored on the stack
+ }
+
+ // Copies a list of num items on the HEAP into a
+ // a normal JavaScript array of numbers
+ function Array_copy(ptr, num) {
+ return Array.prototype.slice.call(IHEAP.slice(ptr, ptr+num)); // Make a normal array out of the typed one
+ }
+
+ // Copies a C-style string, terminated by a zero, from the HEAP into
+ // a normal JavaScript array of numbers
+ function String_copy(ptr, addZero) {
+ return Array_copy(ptr, _strlen(ptr)).concat(addZero ? [0] : []);
+ }
+
+ // stdlib.h
+
+ // Get a pointer, return int value of the string it points to
+ function _atoi(s) {
+ return Math.floor(Number(Pointer_stringify(s)));
+ }
+
+ function _llvm_memcpy_i32(dest, src, num, idunno) {
+ var curr;
+ for (var i = 0; i < num; i++) {
+ curr = HEAP[src + i] || 0; // memcpy sometimes copies uninitialized areas XXX: Investigate why initializing alloc'ed memory does not fix that too
+ HEAP[dest + i] = curr;
+ // TODO: optimize somehow - this is slower than without typed arrays
+ IHEAP[dest + i] = IHEAP[src + i];
+ FHEAP[dest + i] = FHEAP[src + i];
+ }
+ }
+ _memcpy = _llvm_memcpy_i64 = _llvm_memcpy_p0i8_p0i8_i32 = _llvm_memcpy_p0i8_p0i8_i64 = _llvm_memcpy_i32;
+
+ function llvm_memset_i32(ptr, value, num) {
+ for (var i = 0; i < num; i++) {
+ HEAP[ptr+i] = IHEAP[ptr+i] = FHEAP[ptr+i] = value;
+ }
+ }
+ _llvm_memset_p0i8_i64 = _llvm_memset_p0i8_i32 = llvm_memset_i32;
+
+ function _strlen(ptr) {
+ var i = 0;
+ while (IHEAP[ptr+i]) i++; // Note: should be IHEAP[ptr+i] != 0, technically. But this helps catch bugs with undefineds
+ return i;
+ }
+
+ // Tools
+
+ PRINTBUFFER = '';
+ function __print__(text) {
+ if (text === null) {
+ // Flush
+ print(PRINTBUFFER);
+ PRINTBUFFER = '';
+ return;
+ }
+ // We print only when we see a '\n', as console JS engines always add
+ // one anyhow.
+ PRINTBUFFER = PRINTBUFFER + text;
+ var endIndex;
+ while ((endIndex = PRINTBUFFER.indexOf('\n')) != -1) {
+ print(PRINTBUFFER.substr(0, endIndex));
+ PRINTBUFFER = PRINTBUFFER.substr(endIndex + 1);
+ }
+ }
+
+ function jrint(label, obj) { // XXX manual debugging
+ if (!obj) {
+ obj = label;
+ label = '';
+ } else
+ label = label + ' : ';
+ print(label + JSON.stringify(obj));
+ }
+
+ // This processes a 'normal' string into a C-line array of numbers.
+ // For LLVM-originating strings, see parser.js:parseLLVMString function
+ function intArrayFromString(stringy) {
+ var ret = [];
+ var t;
+ var i = 0;
+ while (i < stringy.length) {
+ ret.push(stringy.charCodeAt(i));
+ i = i + 1;
+ }
+ ret.push(0);
+ return ret;
+ }
+
+ // Converts a value we have as signed, into an unsigned value. For
+ // example, -1 in int32 would be a very large number as unsigned.
+ function unSign(value, bits) {
+ if (value >= 0) return value;
+ return 2*Math.abs(1 << (bits-1)) + value;
+ }
+
+ // === Body ===
+
+ var $0___SIZE = 12; // %0
+
+ var $1___SIZE = 16; // %1
+ var $1___FLATTENER = [0,8,12];
+ var $2___SIZE = 8; // %2
+
+ var $3___SIZE = 8; // %3
+
+ var $4___SIZE = 20; // %4
+ var $4___FLATTENER = [0,4,5,8,12,16];
+ var $5___SIZE = 8; // %5
+
+ var $6___SIZE = 16; // %6
+
+ var $7___SIZE = 12; // %7
+
+ var $8___SIZE = 8; // %8
+
+ var $9___SIZE = 28; // %9
+
+ var $10___SIZE = 16; // %10
+
+ var $11___SIZE = 16; // %11
+ var $11___FLATTENER = [0,8,12];
+ var $12___SIZE = 20; // %12
+
+ var $13___SIZE = 8; // %13
+
+ var $14___SIZE = 16; // %14
+
+ var $enum_BinOpr___SIZE = 4; // %enum.BinOpr
+
+ var $enum_OpArgMask___SIZE = 4; // %enum.OpArgMask
+
+ var $enum_OpMode___SIZE = 4; // %enum.OpMode
+
+ var $enum_UnOpr___SIZE = 4; // %enum.UnOpr
+
+ var $enum_anon___SIZE = 4; // %enum.anon
+
+ var $struct_BlockCnt___SIZE = 12; // %struct.BlockCnt
+ var $struct_BlockCnt___FLATTENER = [0,4,8,9,10];
+ var $struct_CCallS___SIZE = 8; // %struct.CCallS
+
+ var $struct_CClosure___SIZE = 32; // %struct.CClosure
+ var $struct_CClosure___FLATTENER = [0,4,5,6,7,8,12,16,20];
+ var $struct_CallInfo___SIZE = 24; // %struct.CallInfo
+
+ var $struct_CallS___SIZE = 8; // %struct.CallS
+
+ var $struct_ConsControl___SIZE = 36; // %struct.ConsControl
+ var $struct_ConsControl___FLATTENER = [0,20,24,28,32];
+ var $struct_FuncState___SIZE = 572; // %struct.FuncState
+ var $struct_FuncState___FLATTENER = [0,4,8,12,16,20,24,28,32,36,40,44,48,50,52,172];
+ var $struct_GCheader___SIZE = 8; // %struct.GCheader
+ var $struct_GCheader___FLATTENER = [0,4,5];
+ var $struct_LClosure___SIZE = 24; // %struct.LClosure
+ var $struct_LClosure___FLATTENER = [0,4,5,6,7,8,12,16,20];
+ var $struct_LG___SIZE = 348; // %struct.LG
+
+ var $struct_LHS_assign___SIZE = 24; // %struct.LHS_assign
+
+ var $struct_LexState___SIZE = 60; // %struct.LexState
+ var $struct_LexState___FLATTENER = [0,4,8,12,24,36,40,44,48,52,56];
+ var $struct_LoadF___SIZE = 8200; // %struct.LoadF
+
+ var $struct_LoadS___SIZE = 8; // %struct.LoadS
+
+ var $struct_LocVar___SIZE = 12; // %struct.LocVar
+
+ var $struct_MatchState___SIZE = 272; // %struct.MatchState
+
+ var $struct_Mbuffer___SIZE = 12; // %struct.Mbuffer
+
+ var $struct_Node___SIZE = 28; // %struct.Node
+
+ var $struct_Proto___SIZE = 76; // %struct.Proto
+ var $struct_Proto___FLATTENER = [0,4,5,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,73,74,75];
+ var $struct_SParser___SIZE = 20; // %struct.SParser
+ var $struct_SParser___FLATTENER = [0,4,16];
+ var $struct_Smain___SIZE = 12; // %struct.Smain
+
+ var $struct_Table___SIZE = 32; // %struct.Table
+ var $struct_Table___FLATTENER = [0,4,5,6,7,8,12,16,20,24,28];
+ var $struct_Token___SIZE = 12; // %struct.Token
+
+ var $struct_UpVal___SIZE = 24; // %struct.UpVal
+ var $struct_UpVal___FLATTENER = [0,4,5,8,12];
+ var $struct_Zio___SIZE = 20; // %struct.Zio
+
+ var $struct__IO_FILE___SIZE = 152; // %struct._IO_FILE
+ var $struct__IO_FILE___FLATTENER = [0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,70,71,72,76,84,88,92,96,100,104,108];
+ var $struct__IO_marker___SIZE = 12; // %struct._IO_marker
+
+ var $struct_anon___SIZE = 16; // %struct.anon
+ var $struct_anon___FLATTENER = [0,4,5,6,8,12];
+ var $struct_expdesc___SIZE = 20; // %struct.expdesc
+ var $struct_expdesc___FLATTENER = [0,4,12,16];
+ var $struct_global_State___SIZE = 236; // %struct.global_State
+ var $struct_global_State___FLATTENER = [0,12,16,20,21,24,28,32,36,40,44,48,52,64,68,72,76,80,84,88,92,104,108,132,168];
+ var $struct_lconv___SIZE = 56; // %struct.lconv
+ var $struct_lconv___FLATTENER = [0,4,8,12,16,20,24,28,32,36,40,41,42,43,44,45,46,47,48,49,50,51,52,53];
+ var $struct_luaL_Buffer___SIZE = 8204; // %struct.luaL_Buffer
+
+ var $struct_luaL_Reg___SIZE = 8; // %struct.luaL_Reg
+
+ var $struct_lua_Debug___SIZE = 100; // %struct.lua_Debug
+ var $struct_lua_Debug___FLATTENER = [0,4,8,12,16,20,24,28,32,36,96];
+ var $struct_lua_State___SIZE = 112; // %struct.lua_State
+ var $struct_lua_State___FLATTENER = [0,4,5,6,8,12,16,20,24,28,32,36,40,44,48,52,54,56,57,60,64,68,72,84,96,100,104,108];
+ var $struct_lua_TValue___SIZE = 12; // %struct.lua_TValue
+
+ var $struct_lua_longjmp___SIZE = 12; // %struct.lua_longjmp
+
+ var $struct_stringtable___SIZE = 12; // %struct.stringtable
+
+ var $struct_tm___SIZE = 44; // %struct.tm
+
+ var $struct_upvaldesc___SIZE = 2; // %struct.upvaldesc
+
+ var $union_Closure___SIZE = 32; // %union.Closure
+
+ var $union_GCObject___SIZE = 112; // %union.GCObject
+
+ var $union_TKey___SIZE = 16; // %union.TKey
+
+ var $union_TString___SIZE = 16; // %union.TString
+
+ var $union_Udata___SIZE = 20; // %union.Udata
+
+ var $union_anon___SIZE = 8; // %union.anon
+
+ var __ZL7globalL;
+ var __str;
+ var __str1;
+ var __ZL8progname;
+ var __str2;
+ var __str3;
+ var __str4;
+ var __str5;
+ var _stdout;
+ var __str6;
+ var __str7;
+ var __str8;
+ var __str9;
+ var __str10;
+ var _stdin;
+ var __str11;
+ var __str12;
+ var __str13;
+ var __str14;
+ var __str15;
+ var __str16;
+ var __str17;
+ var __str18;
+ var __str19;
+ var __str20;
+ var __str21;
+ var __str22;
+ var _stderr;
+ var __str23;
+ var __str24;
+ var __str25;
+ var __str26;
+ var __str27;
+ var __str28;
+ var __str129;
+ var __str230;
+ var __str331;
+ var __str432;
+ var __str1533;
+ var __str2634;
+ var __str37;
+ var __str835;
+ var __str1936;
+ var __str210;
+ var __str311;
+ var __str412;
+ var __str537;
+ var __str638;
+ var __str739;
+ var __str813;
+ var __str940;
+ var __str1041;
+ var __str1142;
+ var __str1243;
+ var __str1344;
+ var __str1445;
+ var __str1514;
+ var __str1646;
+ var __str1747;
+ var __str1848;
+ var __str1915;
+ var __str2049;
+ var __str2150;
+ var __str122;
+ var __ZTVN10__cxxabiv119__pointer_type_infoE;
+ var __ZTSP11lua_longjmp;
+ var __ZTVN10__cxxabiv117__class_type_infoE;
+ var __ZTS11lua_longjmp;
+ var __ZTI11lua_longjmp;
+ var __ZTIP11lua_longjmp;
+ var __str223;
+ var __str324;
+ var __str425;
+ var __str526;
+ var __str627;
+ var __str728;
+ var __str829;
+ var __str47;
+ var __str148;
+ var __str249;
+ var __str350;
+ var __str451;
+ var __str552;
+ var __str653;
+ var __str754;
+ var __str855;
+ var __str956;
+ var __str1057;
+ var __str1158;
+ var __str1259;
+ var __str1360;
+ var __str1461;
+ var __str1562;
+ var __str1663;
+ var __str1764;
+ var __str1865;
+ var __str1966;
+ var __str2067;
+ var __str2168;
+ var __str2251;
+ var __str2352;
+ var __str2453;
+ var __str2554;
+ var __str2669;
+ var __str2755;
+ var __str2856;
+ var __str29;
+ var __str30;
+ var _luaX_tokens;
+ var __str31;
+ var __str32;
+ var __str33;
+ var __str34;
+ var __str35;
+ var __str36;
+ var __str3770;
+ var __str38;
+ var __str39;
+ var __str40;
+ var __str41;
+ var __str42;
+ var __str43;
+ var __str44;
+ var __str45;
+ var __str46;
+ var __str72;
+ var _luaO_nilobject_;
+ var __ZZ9luaO_log2jE5log_2;
+ var __str77;
+ var __str178;
+ var __str279;
+ var __str380;
+ var __str481;
+ var __str582;
+ var __str683;
+ var __str784;
+ var __str90;
+ var __str191;
+ var __str292;
+ var __str393;
+ var __str494;
+ var __str595;
+ var __str696;
+ var __str797;
+ var __str898;
+ var __str999;
+ var __str10100;
+ var __str11101;
+ var __str12102;
+ var __str13103;
+ var __str14104;
+ var __str15105;
+ var __str16106;
+ var __str17107;
+ var __str18108;
+ var __str19109;
+ var __str20110;
+ var __str21111;
+ var __str22112;
+ var __str23113;
+ var __str24114;
+ var __str25115;
+ var __str26116;
+ var __str27117;
+ var __str28118;
+ var __str29119;
+ var __str30120;
+ var __str31121;
+ var __str32122;
+ var __str33123;
+ var __str34124;
+ var __str35125;
+ var __str36126;
+ var __str37127;
+ var _luaP_opnames;
+ var _luaP_opmodes;
+ var __str12957;
+ var __str1130;
+ var __ZL8priority;
+ var __str2131;
+ var __str3132;
+ var __str4133;
+ var __str5134;
+ var __str6135;
+ var __str7136;
+ var __str8137;
+ var __str9138;
+ var __str10139;
+ var __str11140;
+ var __str12141;
+ var __str13142;
+ var __str14143;
+ var __str15144;
+ var __str16145;
+ var __str17146;
+ var __str18147;
+ var __str19148;
+ var __str20149;
+ var __str21150;
+ var __str22151;
+ var __str23152;
+ var __str24153;
+ var __str25154;
+ var __str26155;
+ var __str27156;
+ var __str158;
+ var __ZL10dummynode_;
+ var __str164;
+ var __str1165;
+ var __str2166;
+ var __str3167;
+ var __str177;
+ var __str1178;
+ var __str2179;
+ var __str3180;
+ var __str4181;
+ var __str5182;
+ var __str6183;
+ var __str7184;
+ var __str8185;
+ var __str9186;
+ var _luaT_typenames;
+ var __ZZ9luaT_initP9lua_StateE14luaT_eventname;
+ var __str10188;
+ var __str11189;
+ var __str12190;
+ var __str13191;
+ var __str14192;
+ var __str15193;
+ var __str16194;
+ var __str17195;
+ var __str18196;
+ var __str19197;
+ var __str20198;
+ var __str21199;
+ var __str22200;
+ var __str23201;
+ var __str24202;
+ var __str25203;
+ var __str26204;
+ var __str208;
+ var __str1209;
+ var __str2210;
+ var __str3211;
+ var __str4212;
+ var __str5213;
+ var __str6214;
+ var __str7215;
+ var __str8216;
+ var __str9217;
+ var __str220;
+ var __str1221;
+ var __str2222;
+ var __str3223;
+ var __str4224;
+ var __str5225;
+ var __str6226;
+ var __str7227;
+ var __str8228;
+ var __str242;
+ var __str124358;
+ var __str2244;
+ var __str3245;
+ var __str4246;
+ var __str5247;
+ var __str6248;
+ var __str7249;
+ var __str8250;
+ var __str9251;
+ var __str10252;
+ var __str11253;
+ var __str12254;
+ var __str13255;
+ var __str14256;
+ var __str15257;
+ var __str16258;
+ var __str17259;
+ var __str18260;
+ var __str19261;
+ var __str20262;
+ var __str21263;
+ var __str22264;
+ var __str23265;
+ var __str24266;
+ var __str25267;
+ var __str268;
+ var __str1269;
+ var __str2270;
+ var __str3271;
+ var __str4272;
+ var __str5273;
+ var __str6274;
+ var __str7275;
+ var __str8276;
+ var __str9277;
+ var __str10278;
+ var __str11279;
+ var __str12280;
+ var __str13281;
+ var __str14282;
+ var __str15283;
+ var __str16284;
+ var __str17285;
+ var __str18286;
+ var __str19287;
+ var __str20288;
+ var __str21289;
+ var __str22290;
+ var __str23291;
+ var __ZL10base_funcs;
+ var __str24292;
+ var __str25293;
+ var __str26294;
+ var __str27295;
+ var __str28296;
+ var __str29297;
+ var __ZL8co_funcs;
+ var __str30298;
+ var __str31299;
+ var __str32300;
+ var __str33301;
+ var __str34302;
+ var __str35303;
+ var __str36304;
+ var __str37305;
+ var __str38306;
+ var __str39307;
+ var __str40308;
+ var __str41309;
+ var __ZL9statnames;
+ var __str42310;
+ var __str43311;
+ var __str44312;
+ var __str45313;
+ var __str46314;
+ var __str47315;
+ var __str48;
+ var __str49;
+ var __str50;
+ var __str51;
+ var __str52;
+ var __str53;
+ var __str54;
+ var __str55;
+ var __str56;
+ var __str57;
+ var __str58;
+ var __str59;
+ var __str60;
+ var __str61;
+ var __str62;
+ var __str63;
+ var __str64;
+ var __str65;
+ var __str66;
+ var __str67;
+ var __str68;
+ var __str69;
+ var __ZZ19luaB_collectgarbageP9lua_StateE4opts;
+ var __str70;
+ var __str71;
+ var __str72316;
+ var __str73;
+ var __str74;
+ var __str75;
+ var __str76;
+ var __ZZ19luaB_collectgarbageP9lua_StateE7optsnum;
+ var __str77317;
+ var __str78;
+ var __str318;
+ var __str1319;
+ var __str2320;
+ var __str3321;
+ var __str4322;
+ var __str5323;
+ var __str6324;
+ var __str7325;
+ var __str8326;
+ var __str9327;
+ var __str10328;
+ var __str11329;
+ var __str12330;
+ var __str13331;
+ var __ZL5dblib;
+ var __str14332;
+ var __str15333;
+ var __str16334;
+ var __str17335;
+ var __str18336;
+ var __str19337;
+ var __str20338;
+ var __str21339;
+ var __str22340;
+ var __str23341;
+ var __str24342;
+ var __str25343;
+ var __str26344;
+ var __str27345;
+ var __ZL8KEY_HOOK;
+ var __ZZ5hookfP9lua_StateP9lua_DebugE9hooknames;
+ var __str28346;
+ var __str29347;
+ var __str30348;
+ var __str31349;
+ var __str32350;
+ var __str33351;
+ var __str34352;
+ var __str35353;
+ var __str36354;
+ var __str37355;
+ var __str38356;
+ var __str39357;
+ var __str40358;
+ var __str41359;
+ var __str42360;
+ var __str43361;
+ var __str44362;
+ var __str45363;
+ var __str46364;
+ var __str47365;
+ var __str48366;
+ var __str49367;
+ var __str50368;
+ var __str51369;
+ var __str52370;
+ var __str371;
+ var __str1372;
+ var __str2373;
+ var __str3374;
+ var __str4375;
+ var __str5376;
+ var __str6377;
+ var __str7378;
+ var __str8379;
+ var __str9380;
+ var __str10381;
+ var __ZL5iolib;
+ var __str11382;
+ var __str12383;
+ var __str13384;
+ var __str14385;
+ var __ZL4flib;
+ var __str15386;
+ var __str16387;
+ var __str17388;
+ var __str18389;
+ var __str19390;
+ var __str20391;
+ var __str21392;
+ var __str22393;
+ var __str23394;
+ var __str24395;
+ var __str25396;
+ var __str26397;
+ var __str27398;
+ var __str28399;
+ var __ZZ9f_setvbufP9lua_StateE4mode;
+ var __ZZ9f_setvbufP9lua_StateE9modenames;
+ var __str29400;
+ var __str30401;
+ var __str31402;
+ var __ZZ6f_seekP9lua_StateE4mode;
+ var __ZZ6f_seekP9lua_StateE9modenames;
+ var __str32403;
+ var __str33404;
+ var __str34405;
+ var __str35406;
+ var __str36407;
+ var __str37408;
+ var __str38409;
+ var __str39410;
+ var __str40411;
+ var __ZL6fnames;
+ var __str41412;
+ var __str42413;
+ var __str43414;
+ var __str44415;
+ var __str45416;
+ var __str417;
+ var __str1418;
+ var __str2419;
+ var __str3420;
+ var __str4421;
+ var __str5422;
+ var __str6423;
+ var __str7424;
+ var __str8425;
+ var __str9426;
+ var __str10427;
+ var __str11428;
+ var __str12429;
+ var __str13430;
+ var __str14431;
+ var __str15432;
+ var __str16433;
+ var __str17434;
+ var __str18435;
+ var __str19436;
+ var __str20437;
+ var __str21438;
+ var __str22439;
+ var __str23440;
+ var __str24441;
+ var __str25442;
+ var __str26443;
+ var __str27444;
+ var __ZL7mathlib;
+ var __str28445;
+ var __str29446;
+ var __str30447;
+ var __str31448;
+ var __str32449;
+ var __str33450;
+ var __str452;
+ var __str1453;
+ var __str2454;
+ var __str3455;
+ var __str4456;
+ var __str5457;
+ var __str6458;
+ var __str7459;
+ var __str8460;
+ var __str9461;
+ var __str10462;
+ var __ZL6syslib;
+ var __str11463;
+ var __str12464;
+ var __str13465;
+ var __str14466;
+ var __str15467;
+ var __str16468;
+ var __str17469;
+ var __str18470;
+ var __str19471;
+ var __str20472;
+ var __ZZ12os_setlocaleP9lua_StateE3cat;
+ var __ZZ12os_setlocaleP9lua_StateE8catnames;
+ var __str21473;
+ var __str22474;
+ var __str23475;
+ var __str24476;
+ var __str25477;
+ var __str26478;
+ var __str27479;
+ var __str28480;
+ var __str29481;
+ var __str30482;
+ var __str483;
+ var __str1484;
+ var __str2485;
+ var __str3486;
+ var __str4487;
+ var __str5488;
+ var __str6489;
+ var __str7490;
+ var __str8491;
+ var __ZL9tab_funcs;
+ var __str9492;
+ var __str10493;
+ var __str11494;
+ var __str12495;
+ var __str13496;
+ var __str14497;
+ var __str498;
+ var __str1499;
+ var __str2500;
+ var __str3501;
+ var __str4502;
+ var __str5503;
+ var __str6504;
+ var __str7505;
+ var __str8506;
+ var __str9507;
+ var __str10508;
+ var __str11509;
+ var __str12510;
+ var __str13511;
+ var __str14512;
+ var __ZL6strlib;
+ var __str15513;
+ var __str16514;
+ var __str17515;
+ var __str18516;
+ var __str19517;
+ var __str20518;
+ var __str21519;
+ var __str22520;
+ var __str23521;
+ var __str24522;
+ var __str25523;
+ var __str26524;
+ var __str27525;
+ var __str28526;
+ var __str29527;
+ var __str30528;
+ var __str31529;
+ var __str32530;
+ var __str33531;
+ var __str34532;
+ var __str35533;
+ var __str36534;
+ var __str37535;
+ var __str38536;
+ var __str39537;
+ var __str538;
+ var __str1539;
+ var __ZL8pk_funcs;
+ var __str2540;
+ var __str3541;
+ var __ZL8ll_funcs;
+ var __ZL7loaders;
+ var __str4542;
+ var __str5543;
+ var __str6544;
+ var __str7545;
+ var __str8546;
+ var __str9547;
+ var __str10548;
+ var __str11549;
+ var __str12550;
+ var __str13551;
+ var __str14552;
+ var __str15553;
+ var __str16554;
+ var __str17555;
+ var __str18556;
+ var __str19557;
+ var __str20558;
+ var __str21559;
+ var __str22560;
+ var __str23561;
+ var __str24562;
+ var __str25563;
+ var __str26564;
+ var __str27565;
+ var __str28566;
+ var __str29567;
+ var __str30568;
+ var __str31569;
+ var __str32570;
+ var __str33571;
+ var __str34572;
+ var __str35573;
+ var __str36574;
+ var __str37575;
+ var __str38576;
+ var __str39577;
+ var __ZL9sentinel_;
+ var __str40578;
+ var __str41579;
+ var __str42580;
+ var __str43581;
+ var __str44582;
+ var __str45583;
+ var __str46584;
+ var __str47585;
+ var __str48586;
+ var __str49587;
+ var __str50588;
+ var __str51589;
+ var __str590;
+ var __str1591;
+ var __str2592;
+ var __str3593;
+ var __str4594;
+ var __str5595;
+ var __str6596;
+ var __str7597;
+ var __ZL7lualibs;
+
+ _fputs = function (p, stream) {
+ var str = Pointer_stringify(p); if (str == '\n') return; // XXX manually added for demo, suppress unneeded newlines
+ __print__(str + '\n');
+ }
+ _fflush = function (file) {
+ __print__(null);
+ }
+ _signal = function (sig, func) {
+ // TODO
+ return 0;
+ }
+ // s