diff --git a/dist/asc.js b/dist/asc.js index d2ab323b..2049355a 100644 --- a/dist/asc.js +++ b/dist/asc.js @@ -1,6 +1,2 @@ -(function(e,t){'object'==typeof exports&&'object'==typeof module?module.exports=t(function(){try{return require('assemblyscript')}catch(t){}}(),require('./assemblyscript')):'function'==typeof define&&define.amd?define(['assemblyscript'],t):'object'==typeof exports?exports.asc=t(function(){try{return require('assemblyscript')}catch(t){}}(),require('./assemblyscript')):e.asc=t(e._,e[void 0])})('undefined'==typeof self?this:self,function(t,e){var r=Math.floor,o=Math.pow,s=Math.min;return function(e){function t(r){if(i[r])return i[r].exports;var s=i[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,t),s.l=!0,s.exports}var i={};return t.m=e,t.c=i,t.d=function(e,i,r){t.o(e,i)||Object.defineProperty(e,i,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var i=e&&e.__esModule?function(){return e['default']}:function(){return e};return t.d(i,'a',i),i},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p='',t(t.s=3)}([function(e,t,i){t.nextTick=function(e){setTimeout(e,0)},t.platform=t.arch=t.execPath=t.title='browser',t.pid=1,t.browser=!0,t.env={},t.argv=[],t.binding=function(){throw new Error('No such module. (Possibly not yet loaded)')},function(){var e,r='/';t.cwd=function(){return r},t.chdir=function(t){e||(e=i(1)),r=e.resolve(t,r)}}(),t.exit=t.kill=t.umask=t.dlopen=t.uptime=t.memoryUsage=t.uvCounters=function(){},t.features={}},function(e,t,i){(function(e){function r(e,t){for(var r,s=0,o=e.length-1;0<=o;o--)r=e[o],'.'===r?e.splice(o,1):'..'===r?(e.splice(o,1),s++):s&&(e.splice(o,1),s--);if(t)for(;s--;s)e.unshift('..');return e}function o(e,t){if(e.filter)return e.filter(t);for(var r=[],s=0;si?[]:e.slice(t,i-t+1)}e=t.resolve(e).substr(1),r=t.resolve(r).substr(1);for(var n=o(e.split('/')),a=o(r.split('/')),l=s(n.length,a.length),u=l,c=0;c{const i=t.options[e];i.aliases&&((r.alias||(r.alias={}))[e]=i.aliases),void 0!==i.default&&((r.default||(r.default={}))[e]=i.default),'string'===i.type?(r.string||(r.string=[])).push(e):'boolean'===i.type&&(r.boolean||(r.boolean=[])).push(e)}),i(14)(e,r)}function o(e,t){for(var i,r=!1;null!=(i=d.nextDiagnostic(e));)t.write(d.formatDiagnostic(i,t.isTTY,!0)+f.EOL+f.EOL),d.isError(i)&&(r=!0);return r}function n(){return{readTime:0,readCount:0,writeTime:0,writeCount:0,parseTime:0,parseCount:0,compileTime:0,compileCount:0,emitTime:0,emitCount:0,validateTime:0,validateCount:0,optimizeTime:0,optimizeCount:0}}function a(t){const i=e.hrtime();t();const r=e.hrtime(i);return 1e9*r[0]+r[1]}function l(t,i){function r(e){return e?(e/1e6).toFixed(3)+' ms':'N/A'}(i||e.stdout).write(['I/O Read : '+r(t.readTime,t.readCount),'I/O Write : '+r(t.writeTime,t.writeCount),'Parse : '+r(t.parseTime,t.parseCount),'Compile : '+r(t.compileTime,t.compileCount),'Emit : '+r(t.emitTime,t.emitCount),'Validate : '+r(t.validateTime,t.validateCount),'Optimize : '+r(t.optimizeTime,t.optimizeCount)].join(f.EOL)+f.EOL)}const u=i(9),c=i(1),f=i(10);var d,p;try{d=i(11),p=!1;try{i(!function(){var t=new Error('Cannot find module "source-map-support"');throw t.code='MODULE_NOT_FOUND',t}()).install()}catch(t){}}catch(t){try{i(!function(){var t=new Error('Cannot find module "ts-node"');throw t.code='MODULE_NOT_FOUND',t}()).register({project:c.join('.','..','src','tsconfig.json')}),i(!function(){var t=new Error('Cannot find module "../src/glue/js"');throw t.code='MODULE_NOT_FOUND',t}()),d=i(!function(){var t=new Error('Cannot find module "../src"');throw t.code='MODULE_NOT_FOUND',t}()),p=!0}catch(t){d=i(12),p=!1}}t.isBundle=!0,t.isDev=p,t.version=t.isBundle?'0.5.0':i(!function(){var t=new Error('Cannot find module "../package.json"');throw t.code='MODULE_NOT_FOUND',t}()).version,t.options=i(13),t.sourceMapRoot='assemblyscript:///',t.libraryPrefix=d.LIBRARY_PREFIX,t.defaultOptimizeLevel=2,t.defaultShrinkLevel=1,t.libraryFiles=t.isBundle?{"(lib)/allocator/arena":'/////////////// A simple yet effective Arena Memory Allocator /////////////////\n\n// Provides a `reset_memory` function to reset the heap to its initial state. A\n// user has to make sure that there are no more references to cleared memory\n// afterwards. Always aligns to 8 bytes.\n\nconst ALIGN_LOG2: usize = 3;\nconst ALIGN_SIZE: usize = 1 << ALIGN_LOG2;\nconst ALIGN_MASK: usize = ALIGN_SIZE - 1;\n\nvar HEAP_OFFSET: usize = HEAP_BASE;\n\n@global\nexport function allocate_memory(size: usize): usize {\n if (!size) return 0;\n var ptr = HEAP_OFFSET;\n var off = (ptr + size + ALIGN_MASK) & ~ALIGN_MASK;\n var avail = current_memory() << 16;\n if (off > avail && grow_memory(\n max(\n (((off + 0xffff) & ~0xffff) - avail) >> 16, // minimum required pages\n avail >> 16 // at least double memory\n )\n ) < 0) unreachable(); // out of memory\n HEAP_OFFSET = off;\n return ptr;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n // nop\n}\n\n@global\nexport function reset_memory(): void {\n HEAP_OFFSET = HEAP_BASE;\n}\n',"(lib)/allocator/emscripten":'///////////////////////// Emscripten Memory Allocator //////////////////////////\n\n// Uses Emscripten\'s exported _malloc and _free implementations, i.e., when\n// linking with Emscripten-compiled programs that already provide these.\n// Differs from \'system\' in that their names are prefixed with an underscore.\n\ndeclare function _malloc(size: usize): usize;\ndeclare function _free(ptr: usize): void;\n\n@global\nexport function allocate_memory(size: usize): usize {\n return _malloc(size);\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n _free(ptr);\n}\n\n@global\nexport { reset_memory } from "./none";\n',"(lib)/allocator/none":'export function allocate_memory(size: usize): usize {\n throw new Error("not supported");\n}\n\nexport function free_memory(ptr: usize): void {\n throw new Error("not supported");\n}\n\nexport function reset_memory(): void {\n throw new Error("not supported");\n}\n',"(lib)/allocator/system":'/////////////////////////// System Memory Allocator ////////////////////////////\n\n// Uses the environment\'s malloc and free implementations, i.e., when linking\n// with other C-like programs that already provide these.\n\ndeclare function malloc(size: usize): usize;\ndeclare function free(ptr: usize): void;\n\n@global\nexport function allocate_memory(size: usize): usize {\n return malloc(size);\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n free(ptr);\n}\n\n@global\nexport { reset_memory } from "./none";\n',"(lib)/allocator/tlsf":'////////////// TLSF (Two-Level Segregate Fit) Memory Allocator ////////////////\n\n// \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 Block size interpretation (32-bit) \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// \u251C\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u253C\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u256B\u2500\u2534\u2500\u2534\u2500\u2524\n// \u2502 | FL \u2502 SB = SL + AL \u2502 \u25C4\u2500 usize\n// \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2568\u2500\u2500\u2500\u2500\u2500\u2518\n// FL: first level, SL: second level, AL: alignment, SB: small block\n\nconst AL_BITS: u32 = sizeof() == sizeof() ? 2 : 3;\nconst AL_SIZE: usize = 1 << AL_BITS;\nconst AL_MASK: usize = AL_SIZE - 1;\n\nconst SL_BITS: u32 = 5;\nconst SL_SIZE: usize = 1 << SL_BITS;\n\nconst SB_BITS: usize = (SL_BITS + AL_BITS);\nconst SB_SIZE: usize = 1 << SB_BITS;\n\nconst FL_BITS: u32 = (sizeof() == sizeof()\n ? 30 // ^= up to 1GB per block\n : 32 // ^= up to 4GB per block\n) - SB_BITS;\n\n// \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 Block structure layout (32-bit) \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// \u251C\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u253C\u2500\u253C\u2500\u2524\n// \u2502 size \u2502L\u2502F\u2502 \u25C4\u2500\u2510\n// \u255E\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2567\u2550\u2561 \u2502 \u2510\n// \u2502 if free: \u25C4 prev \u2502 \u25C4\u2500\u2524 usize\n// \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502\n// \u2502 if free: next \u25BA \u2502 \u25C4\u2500\u2524\n// \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502\n// \u2502 ... unused free space >= 0 ... \u2502 \u2502 = 0\n// \u251C \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2524 \u2502\n// \u2502 if free: jump \u25B2 \u2502 \u25C4\u2500\u2518\n// \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 MIN SIZE \u2518\n// F: FREE, L: LEFT_FREE\n\n/** Tag indicating that this block is free. */\nconst FREE: usize = 1 << 0;\n/** Tag indicating that this block\'s left block is free. */\nconst LEFT_FREE: usize = 1 << 1;\n/** Mask to obtain all tags. */\nconst TAGS: usize = FREE | LEFT_FREE;\n\nassert(AL_BITS >= 2); // alignment must be large enough to store all tags\n\n/** Block structure. */\n@unmanaged\nclass Block {\n\n /** Info field holding this block\'s size and tags. */\n info: usize;\n\n /** End offset of the {@link Block#info} field. User data starts here. */\n static readonly INFO: usize = sizeof();\n\n /** Previous free block, if any. Only valid if free. */\n prev: Block | null;\n /** Next free block, if any. Only valid if free. */\n next: Block | null;\n\n /** Minimum size of a block, excluding {@link Block#info}. */\n static readonly MIN_SIZE: usize = 3 * sizeof(); // prev + next + jump\n\n /** Maximum size of a used block, excluding {@link Block#info}. */\n static readonly MAX_SIZE: usize = 1 << (FL_BITS + SB_BITS);\n\n /** Gets this block\'s left (free) block in memory. */\n get left(): Block {\n assert(this.info & LEFT_FREE); // must be free to contain a jump\n return assert(\n load(changetype(this) - sizeof())\n ); // can\'t be null\n }\n\n /** Gets this block\'s right block in memory. */\n get right(): Block {\n assert(this.info & ~TAGS); // can\'t skip beyond the tail block\n return assert(\n changetype(\n changetype(this) + Block.INFO + (this.info & ~TAGS)\n )\n ); // can\'t be null\n }\n}\n\n// \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 Root structure layout (32-bit) \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// \u251C\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2524 \u2510\n// \u2502 0 | flMap S\u2502 \u25C4\u2500\u2500\u2500\u2500\u2510\n// \u255E\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561 \u2502\n// \u2502 slMap[0] S \u2502 \u25C4\u2500\u2510 \u2502\n// \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 \u2502\n// \u2502 slMap[1] \u2502 \u25C4\u2500\u2524 \u2502\n// \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 u32 \u2502\n// \u2502 ... \u2502 \u25C4\u2500\u2524 \u2502\n// \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 \u2502\n// \u2502 slMap[22] P \u2502 \u25C4\u2500\u2518 \u2502\n// \u255E\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561 usize\n// \u2502 head[0] \u2502 \u25C4\u2500\u2500\u2500\u2500\u2524\n// \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502\n// \u2502 ... \u2502 \u25C4\u2500\u2500\u2500\u2500\u2524\n// \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502\n// \u2502 head[736] \u2502 \u25C4\u2500\u2500\u2500\u2500\u2524\n// \u255E\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561 \u2502\n// \u2502 tailRef \u2502 \u25C4\u2500\u2500\u2500\u2500\u2518\n// \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 SIZE \u2518\n// S: Small blocks map, P: Possibly padded if 64-bit\n\nassert((1 << SL_BITS) <= 32); // second level must fit into 32 bits\n\n/** Root structure. */\n@unmanaged\nclass Root {\n\n /** First level bitmap. */\n flMap: usize = 0;\n\n /** Start offset of second level maps. */\n private static readonly SL_START: usize = sizeof();\n\n // Using *one* SL map per *FL bit*\n\n /** Gets the second level map for the specified first level. */\n getSLMap(fl: usize): u32 {\n assert(fl < FL_BITS); // fl out of range\n return load(changetype(this) + fl * 4, Root.SL_START);\n }\n\n /** Sets the second level map for the specified first level. */\n setSLMap(fl: usize, value: u32): void {\n assert(fl < FL_BITS); // fl out of range\n store(changetype(this) + fl * 4, value, Root.SL_START);\n }\n\n /** End offset of second level maps. */\n private static readonly SL_END: usize = Root.SL_START + FL_BITS * 4;\n\n // Using *number bits per SL* heads per *FL bit*\n\n /** Start offset of FL/SL heads. */\n private static readonly HL_START: usize = (Root.SL_END + AL_MASK) & ~AL_MASK;\n\n /** Gets the head of the specified first and second level index. */\n getHead(fl: usize, sl: u32): Block | null {\n assert(fl < FL_BITS); // fl out of range\n assert(sl < SL_SIZE); // sl out of range\n return changetype(load(\n changetype(this) + (fl * SL_SIZE + sl) * sizeof()\n , Root.HL_START));\n }\n\n /** Sets the head of the specified first and second level index. */\n setHead(fl: usize, sl: u32, value: Block | null): void {\n assert(fl < FL_BITS); // fl out of range\n assert(sl < SL_SIZE); // sl out of range\n store(\n changetype(this) + (fl * SL_SIZE + sl) * sizeof()\n , changetype(value)\n , Root.HL_START);\n }\n\n /** End offset of FL/SL heads. */\n private static readonly HL_END: usize = (\n Root.HL_START + FL_BITS * SL_SIZE * sizeof()\n );\n\n get tailRef(): usize { return load(0, Root.HL_END); }\n set tailRef(value: usize) { store(0, value, Root.HL_END); }\n\n /** Total size of the {@link Root} structure. */\n static readonly SIZE: usize = Root.HL_END + sizeof();\n\n /** Inserts a previously used block back into the free list. */\n insert(block: Block): void {\n // check as much as possible here to prevent invalid free blocks\n assert(block); // cannot be null\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free\n var size: usize;\n assert(\n (size = block.info & ~TAGS) >= Block.MIN_SIZE && size < Block.MAX_SIZE\n ); // must be valid, not necessary to compute yet if noAssert=true\n\n var right: Block = assert(block.right); // can\'t be null\n var rightInfo = right.info;\n\n // merge with right block if also free\n if (rightInfo & FREE) {\n this.remove(right);\n block.info = (blockInfo += Block.INFO + (rightInfo & ~TAGS));\n right = block.right;\n rightInfo = right.info;\n // jump is set below\n }\n\n // merge with left block if also free\n if (blockInfo & LEFT_FREE) {\n var left: Block = assert(block.left); // can\'t be null\n var leftInfo = left.info;\n assert(leftInfo & FREE); // must be free according to tags\n this.remove(left);\n left.info = (leftInfo += Block.INFO + (blockInfo & ~TAGS));\n block = left;\n blockInfo = leftInfo;\n // jump is set below\n }\n\n right.info = rightInfo | LEFT_FREE;\n this.setJump(block, right);\n // right is no longer used now, hence rightInfo is not synced\n\n size = blockInfo & ~TAGS;\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n\n // mapping_insert\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n\n // perform insertion\n var head = this.getHead(fl, sl);\n block.prev = null;\n block.next = head;\n if (head) head.prev = block;\n this.setHead(fl, sl, block);\n\n // update first and second level maps\n this.flMap |= (1 << fl);\n this.setSLMap(fl, this.getSLMap(fl) | (1 << sl));\n }\n\n /**\n * Removes a free block from FL/SL maps. Does not alter left/jump because it\n * is likely that splitting is performed afterwards, invalidating any changes\n * again.\n */\n private remove(block: Block): void {\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free\n var size = blockInfo & ~TAGS;\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n\n // mapping_insert\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n\n // link previous and next free block\n var prev = block.prev;\n var next = block.next;\n if (prev) prev.next = next;\n if (next) next.prev = prev;\n\n // update head if we are removing it\n if (block == this.getHead(fl, sl)) {\n this.setHead(fl, sl, next);\n\n // clear second level map if head is empty now\n if (!next) {\n var slMap = this.getSLMap(fl);\n this.setSLMap(fl, slMap &= ~(1 << sl));\n\n // clear first level map if second level is empty now\n if (!slMap) this.flMap &= ~(1 << fl);\n }\n }\n }\n\n /** Searches for a free block of at least the specified size. */\n search(size: usize): Block | null {\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE);\n\n // mapping_search\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n // (*) size += (1 << (fls(size) - SL_BITS)) - 1;\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n // (*) instead of rounding up, use next second level list for better fit\n if (sl < SL_SIZE - 1) ++sl;\n else ++fl, sl = 0;\n }\n\n // search second level\n var slMap = this.getSLMap(fl) & (~0 << sl);\n var head: Block | null;\n if (!slMap) {\n // search next larger first level\n var flMap = this.flMap & (~0 << (fl + 1));\n if (!flMap) {\n head = null;\n } else {\n fl = ffs(flMap);\n slMap = assert(this.getSLMap(fl)); // can\'t be zero if fl points here\n head = this.getHead(fl, ffs(slMap));\n }\n } else {\n head = this.getHead(fl, ffs(slMap));\n }\n return head;\n }\n\n /** Links a free left with its right block in memory. */\n private setJump(left: Block, right: Block): void {\n assert(left.info & FREE); // must be free\n assert(left.right == right); // right block must match\n assert(right.info & LEFT_FREE); // right block must be tagged as LEFT_FREE\n store(\n changetype(right) - sizeof()\n , left); // last word in left block\'s (free) data region\n }\n\n /**\n * Uses the specified free block, removing it from internal maps and\n * splitting it if possible, and returns its data pointer.\n */\n use(block: Block, size: usize): usize {\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free so we can use it\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n assert(!(size & AL_MASK)); // size must be aligned so the new block is\n\n this.remove(block);\n\n // split if the block can hold another MIN_SIZE block\n var remaining = (blockInfo & ~TAGS) - size;\n if (remaining >= Block.INFO + Block.MIN_SIZE) {\n block.info = size | (blockInfo & LEFT_FREE); // also discards FREE\n\n var spare = changetype(\n changetype(block) + Block.INFO + size\n );\n spare.info = (remaining - Block.INFO) | FREE; // not LEFT_FREE\n this.insert(spare); // also sets jump\n\n // otherwise tag block as no longer FREE and right as no longer LEFT_FREE\n } else {\n block.info = blockInfo & ~FREE;\n var right: Block = assert(block.right); // can\'t be null (tail)\n right.info &= ~LEFT_FREE;\n }\n\n return changetype(block) + Block.INFO;\n }\n\n /** Adds more memory to the pool. */\n addMemory(start: usize, end: usize): bool {\n assert(start <= end);\n assert(!(start & AL_MASK)); // must be aligned\n assert(!(end & AL_MASK)); // must be aligned\n\n var tailRef = this.tailRef;\n var tailInfo: usize = 0;\n if (tailRef) {\n assert(start >= tailRef + sizeof()); // starts after tail\n\n // merge with current tail if adjacent\n if (start - Block.INFO == tailRef) {\n start -= Block.INFO;\n tailInfo = changetype(tailRef).info;\n }\n\n } else {\n assert(start >= changetype(this) + Root.SIZE); // starts after root\n }\n\n // check if size is large enough for a free block and the tail block\n var size = end - start;\n if (size < Block.INFO + Block.MIN_SIZE + Block.INFO) {\n return false;\n }\n\n // left size is total minus its own and the zero-length tail\'s header\n var leftSize = size - 2 * Block.INFO;\n var left = changetype(start);\n left.info = leftSize | FREE | (tailInfo & LEFT_FREE);\n left.prev = null;\n left.next = null;\n\n // tail is a zero-length used block\n var tail = changetype(start + size - Block.INFO);\n tail.info = 0 | LEFT_FREE;\n this.tailRef = changetype(tail);\n\n this.insert(left); // also merges with free left before tail / sets jump\n\n return true;\n }\n}\n\n/** Determines the first (LSB to MSB) set bit\'s index of a word. */\nfunction ffs(word: T): T {\n assert(word != 0); // word cannot be 0\n return ctz(word); // differs from ffs only for 0\n}\n\n/** Determines the last (LSB to MSB) set bit\'s index of a word. */\nfunction fls(word: T): T {\n assert(word != 0); // word cannot be 0\n const inv: T = (sizeof() << 3) - 1;\n return inv - clz(word);\n}\n\n/** Reference to the initialized {@link Root} structure, once initialized. */\nvar ROOT: Root = changetype(0);\n\n// External interface\n\n/** Allocates a chunk of memory. */\n@global\nexport function allocate_memory(size: usize): usize {\n\n // initialize if necessary\n var root = ROOT;\n if (!root) {\n var rootOffset = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n ROOT = root = changetype(rootOffset);\n root.tailRef = 0;\n root.flMap = 0;\n for (var fl: usize = 0; fl < FL_BITS; ++fl) {\n root.setSLMap(fl, 0);\n for (var sl: u32 = 0; sl < SL_SIZE; ++sl) {\n root.setHead(fl, sl, null);\n }\n }\n root.addMemory(rootOffset + Root.SIZE, current_memory() << 16);\n }\n\n // search for a suitable block\n var data: usize = 0;\n if (size && size < Block.MAX_SIZE) {\n size = max((size + AL_MASK) & ~AL_MASK, Block.MIN_SIZE);\n\n var block = root.search(size);\n if (!block) {\n\n // request more memory\n var pagesBefore = current_memory();\n var pagesNeeded = ((size + 0xffff) & ~0xffff) >>> 16;\n var pagesWanted = max(pagesBefore, pagesNeeded); // double memory\n if (grow_memory(pagesWanted) < 0) {\n if (grow_memory(pagesNeeded) < 0) {\n unreachable(); // out of memory\n }\n }\n var pagesAfter = current_memory();\n root.addMemory(pagesBefore << 16, pagesAfter << 16);\n block = assert(root.search(size)); // must be found now\n }\n\n assert((block.info & ~TAGS) >= size);\n data = root.use(block, size);\n }\n\n return data;\n}\n\n/** Frees the chunk of memory at the specified address. */\n@global\nexport function free_memory(data: usize): void {\n if (data) {\n var root = ROOT;\n if (root) {\n var block = changetype(data - Block.INFO);\n var blockInfo = block.info;\n assert(!(blockInfo & FREE)); // must be used\n block.info = blockInfo | FREE;\n root.insert(changetype(data - Block.INFO));\n }\n }\n}\n\nexport { reset_memory } from "./none";\n',"(lib)/array":'export class Array {\n\n private __memory: usize;\n private __capacity: i32; // capped to [0, 0x7fffffff]\n private __length: i32; // capped to [0, __capacity]\n\n private __grow(newCapacity: i32): void {\n assert(newCapacity > this.__capacity);\n var newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\n free_memory(this.__memory);\n }\n this.__memory = newMemory;\n this.__capacity = newCapacity;\n }\n\n constructor(capacity: i32 = 0) {\n if (capacity < 0) {\n throw new RangeError("Invalid array length");\n }\n this.__memory = capacity\n ? allocate_memory(capacity * sizeof())\n : 0;\n this.__capacity = this.__length = capacity;\n }\n\n get length(): i32 {\n return this.__length;\n }\n\n set length(length: i32) {\n if (length < 0) {\n throw new RangeError("Invalid array length");\n }\n if (length > this.__capacity) {\n this.__grow(max(length, this.__capacity << 1));\n }\n this.__length = length;\n }\n\n @operator("[]")\n private __get(index: i32): T {\n if (index >= this.__capacity) {\n throw new Error("Index out of bounds"); // return changetype(0) ?\n }\n return load(this.__memory + index * sizeof());\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n if (index < 0) {\n throw new Error("Index out of bounds");\n }\n if (index >= this.__capacity) {\n this.__grow(max(index + 1, this.__capacity << 1));\n }\n store(this.__memory + index * sizeof(), value);\n }\n\n indexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n if (fromIndex < 0) {\n fromIndex = this.__length + fromIndex;\n }\n while (fromIndex < this.__length) {\n if (load(this.__memory + fromIndex * sizeof()) == searchElement) {\n return fromIndex;\n }\n ++fromIndex;\n }\n return -1;\n }\n\n lastIndexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n if (fromIndex < 0) {\n fromIndex = this.__length + fromIndex;\n } else if (fromIndex >= this.__length) {\n fromIndex = this.__length - 1;\n }\n while (fromIndex >= 0) {\n if (load(this.__memory + fromIndex * sizeof()) == searchElement) {\n return fromIndex;\n }\n --fromIndex;\n }\n return -1;\n }\n\n push(element: T): i32 {\n if (this.__length == this.__capacity) {\n this.__grow(this.__capacity ? this.__capacity << 1 : 1);\n }\n store(this.__memory + this.__length * sizeof(), element);\n return ++this.__length;\n }\n\n pop(): T {\n if (this.__length < 1) {\n throw new RangeError("Array is empty"); // return changetype(0) ?\n }\n return load(this.__memory + --this.__length * sizeof());\n }\n\n shift(): T {\n if (this.__length < 1) {\n throw new RangeError("Array is empty"); // return changetype(0) ?\n }\n var element = load(this.__memory);\n move_memory(\n this.__memory,\n this.__memory + sizeof(),\n (this.__capacity - 1) * sizeof()\n );\n set_memory(\n this.__memory + (this.__capacity - 1) * sizeof(),\n 0,\n sizeof()\n );\n --this.__length;\n return element;\n }\n\n unshift(element: T): i32 {\n var oldCapacity = this.__capacity;\n if (this.__length == oldCapacity) {\n // inlined __grow (avoids moving twice)\n var newCapacity: i32 = oldCapacity ? oldCapacity << 1 : 1;\n assert(newCapacity > this.__capacity);\n var newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(\n newMemory + sizeof(),\n this.__memory,\n oldCapacity * sizeof()\n );\n free_memory(this.__memory);\n }\n this.__memory = newMemory;\n this.__capacity = newCapacity;\n } else {\n move_memory(\n this.__memory + sizeof(),\n this.__memory,\n oldCapacity * sizeof()\n );\n }\n store(this.__memory, element);\n return ++this.__length;\n }\n\n slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Array {\n if (begin < 0) {\n begin = this.__length + begin;\n if (begin < 0) {\n begin = 0;\n }\n } else if (begin > this.__length) {\n begin = this.__length;\n }\n if (end < 0) {\n end = this.__length + end;\n } else if (end > this.__length) {\n end = this.__length;\n }\n if (end < begin) {\n end = begin;\n }\n var capacity = end - begin;\n assert(capacity >= 0);\n var sliced = new Array(capacity);\n if (capacity) {\n move_memory(\n sliced.__memory,\n this.__memory + begin * sizeof(),\n capacity * sizeof()\n );\n }\n return sliced;\n }\n\n splice(start: i32, deleteCount: i32 = i32.MAX_VALUE): void {\n if (deleteCount < 1) {\n return;\n }\n if (start < 0) {\n start = this.__length + start;\n if (start < 0) {\n start = 0;\n } else if (start >= this.__length) {\n return;\n }\n } else if (start >= this.__length) {\n return;\n }\n deleteCount = min(deleteCount, this.__length - start);\n move_memory(\n this.__memory + start * sizeof(),\n this.__memory + (start + deleteCount) * sizeof(),\n deleteCount * sizeof()\n );\n this.__length -= deleteCount;\n }\n\n reverse(): Array {\n for (var front: usize = 0, back: usize = this.__length - 1; front < back; ++front, --back) {\n var temp = load(this.__memory + front * sizeof());\n store(this.__memory + front * sizeof(), load(this.__memory + back * sizeof()));\n store(this.__memory + back * sizeof(), temp);\n }\n return this;\n }\n}\n\n@unmanaged\nexport class CArray {\n\n private constructor() {}\n\n @operator("[]")\n private __get(index: i32): T {\n if (index < 0) {\n throw new RangeError("Index out of range");\n }\n return load(changetype(this) + index * sizeof());\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n if (index < 0) {\n throw new RangeError("Index out of range");\n }\n store(changetype(this) + index * sizeof(), value);\n }\n}\n',"(lib)/builtins":'@builtin\nexport declare const NaN: f64; // | f32\n\n@builtin\nexport declare const Infinity: f64; // | f32\n\n@builtin\nexport declare function isNaN(value: T): bool;\n\n@builtin\nexport declare function isFinite(value: T): bool;\n\n@builtin\nexport declare function clz(value: T): T;\n\n@builtin\nexport declare function ctz(value: T): T;\n\n@builtin\nexport declare function popcnt(value: T): T;\n\n@builtin\nexport declare function rotl(value: T, shift: T): T;\n\n@builtin\nexport declare function rotr(value: T, shift: T): T;\n\n@builtin\nexport declare function abs(value: T): T;\n\n@builtin\nexport declare function max(left: T, right: T): T;\n\n@builtin\nexport declare function min(left: T, right: T): T;\n\n@builtin\nexport declare function ceil(value: T): T;\n\n@builtin\nexport declare function floor(value: T): T;\n\n@builtin\nexport declare function copysign(left: T, right: T): T;\n\n@builtin\nexport declare function nearest(left: T, right: T): T;\n\n@builtin\nexport declare function reinterpret(value: void): T;\n\n@builtin\nexport declare function sqrt(value: T): T;\n\n@builtin\nexport declare function trunc(value: T): T;\n\n@builtin\nexport declare function load(offset: usize, constantOffset?: usize): T;\n\n@builtin\nexport declare function store(offset: usize, value: void, constantOffset?: usize): T;\n\n@builtin\nexport declare function sizeof(): usize;\n\n@builtin\nexport declare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n\n@builtin\nexport declare function unreachable(): void;\n\n@builtin\nexport declare function current_memory(): i32;\n\n@builtin\nexport declare function grow_memory(pages: i32): i32;\n\n// @builtin\n// export declare function move_memory(dest: usize, src: usize: n: usize): void;\n\n// @builtin\n// export declare function set_memory(dest: usize, value: u32, n: usize): void;\n\n@builtin\nexport declare function changetype(value: void): T;\n\n@builtin\nexport declare function assert(isTrueish: T, message?: string): T;\n\n@builtin\nexport declare function abort(\n message?: string | null,\n fileName?: string | null,\n lineNumber?: u32,\n columnNumber?: u32\n): void;\n\n@builtin\ndeclare function i8(value: void): i8;\nnamespace i8 {\n export const MIN_VALUE: i8 = -128;\n export const MAX_VALUE: i8 = 127;\n}\nexport { i8 };\n\n@builtin\ndeclare function i16(value: void): i16;\nnamespace i16 {\n export const MIN_VALUE: i16 = -32768;\n export const MAX_VALUE: i16 = 32767;\n}\nexport { i16 };\n\n@builtin\ndeclare function i32(value: void): i32;\nnamespace i32 {\n export const MIN_VALUE: i32 = -2147483648;\n export const MAX_VALUE: i32 = 2147483647;\n}\nexport { i32 };\n\n@builtin\ndeclare function i64(value: void): i64;\nnamespace i64 {\n export const MIN_VALUE: i64 = -9223372036854775808;\n export const MAX_VALUE: i64 = 9223372036854775807;\n}\nexport { i64 };\n\n@builtin\ndeclare function isize(value: void): isize;\nnamespace isize {\n export const MIN_VALUE: isize = sizeof() == sizeof()\n ? -2147483648\n : -9223372036854775808;\n export const MAX_VALUE: isize = sizeof() == sizeof()\n ? 2147483647\n : 9223372036854775807;\n}\nexport { isize };\n\n@builtin\ndeclare function u8(value: void): u8;\nnamespace u8 {\n export const MIN_VALUE: u8 = 0;\n export const MAX_VALUE: u8 = 255;\n}\nexport { u8 };\n\n@builtin\ndeclare function u16(value: void): u16;\nnamespace u16 {\n export const MIN_VALUE: u16 = 0;\n export const MAX_VALUE: u16 = 65535;\n}\nexport { u16 };\n\n@builtin\ndeclare function u32(value: void): u32;\nnamespace u32 {\n export const MIN_VALUE: u32 = 0;\n export const MAX_VALUE: u32 = 4294967295;\n}\nexport { u32 };\n\n@builtin\ndeclare function u64(value: void): u64;\nnamespace u64 {\n export const MIN_VALUE: u64 = 0;\n export const MAX_VALUE: u64 = 18446744073709551615;\n}\nexport { u64 };\n\n@builtin\ndeclare function usize(value: void): usize;\nnamespace usize {\n export const MIN_VALUE: usize = 0;\n export const MAX_VALUE: usize = sizeof() == sizeof()\n ? 4294967295\n : 18446744073709551615;\n}\nexport { usize };\n\n@builtin\ndeclare function bool(value: void): bool;\nnamespace bool {\n export const MIN_VALUE: bool = 0;\n export const MAX_VALUE: bool = 1;\n}\nexport { bool };\n\n@builtin\ndeclare function f32(value: void): f32;\nnamespace f32 {\n export const MIN_VALUE: f32 = -3.40282347e+38;\n export const MAX_VALUE: f32 = 3.40282347e+38;\n export const MIN_SAFE_INTEGER: f32 = -16777215;\n export const MAX_SAFE_INTEGER: f32 = 16777215;\n export const EPSILON: f32 = 1.19209290e-07;\n}\nexport { f32 };\n\n@builtin\ndeclare function f64(value: void): f64;\nnamespace f64 {\n export const MIN_VALUE: f64 = -1.7976931348623157e+308;\n export const MAX_VALUE: f64 = 1.7976931348623157e+308;\n export const MIN_SAFE_INTEGER: f64 = -9007199254740991;\n export const MAX_SAFE_INTEGER: f64 = 9007199254740991;\n export const EPSILON: f64 = 2.2204460492503131e-16;\n}\nexport{ f64 };\n\n@builtin\nexport declare const HEAP_BASE: usize;\n\n@builtin\nexport declare function start(): void;\n',"(lib)/error":'export class Error {\n\n name: string = "Error";\n message: string;\n stack: string = ""; // TODO\n\n constructor(message: string = "") {\n this.message = message;\n }\n}\n\nexport class RangeError extends Error {\n name: string = "RangeError";\n}\n\nexport class TypeError extends Error {\n name: string = "TypeError";\n}\n',"(lib)/iterator":'// export abstract class Iterator {\n// abstract get done(): bool;\n// abstract next(): T;\n// }\n',"(lib)/map":'export class Map {\n\n private __keys: K[] = [];\n private __values: V[] = [];\n\n // FIXME: not a proper map implementation, just a filler\n\n get size(): i32 {\n return this.__keys.length;\n }\n\n get(key: K): V | null {\n var keys = this.__keys;\n for (var i = 0, k = keys.length; i < k; ++i) {\n if (keys[i] == key) {\n return this.__values[i];\n }\n }\n return null;\n }\n\n has(key: K): bool {\n var keys = this.__keys;\n for (var i = 0, k = keys.length; i < k; ++i) {\n if (keys[i] == key) {\n return true;\n }\n }\n return false;\n }\n\n set(key: K, value: V): void {\n this.__keys.push(key);\n this.__values.push(value);\n }\n\n clear(): void {\n this.__keys.length = 0;\n this.__values.length = 0;\n }\n}\n',"(lib)/memory":'function copy_memory(dest: usize, src: usize, n: usize): void {\n // based on musl\'s implementation of memcpy\n // not a future instruction and sufficiently covered by the upcoming move_memory intrinsic\n\n var w: u32, x: u32;\n\n // copy 1 byte each until src is aligned to 4 bytes\n while (n && (src & 3)) {\n store(dest++, load(src++));\n n--;\n }\n\n // if dst is aligned to 4 bytes as well, copy 4 bytes each\n if ((dest & 3) == 0) {\n while (n >= 16) {\n store(dest , load(src ));\n store(dest + 4, load(src + 4));\n store(dest + 8, load(src + 8));\n store(dest + 12, load(src + 12));\n src += 16; dest += 16; n -= 16;\n }\n if (n & 8) {\n store(dest , load(src ));\n store(dest + 4, load(src + 4));\n dest += 8; src += 8;\n }\n if (n & 4) {\n store(dest, load(src));\n dest += 4; src += 4;\n }\n if (n & 2) { // drop to 2 bytes each\n store(dest, load(src));\n dest += 2; src += 2;\n }\n if (n & 1) { // drop to 1 byte\n store(dest++, load(src++));\n }\n return;\n }\n\n // if dst is not aligned to 4 bytes, use alternating shifts to copy 4 bytes each\n // doing shifts if faster when copying enough bytes (here: 32 or more)\n if (n >= 32) {\n switch (dest & 3) {\n // known to be != 0\n case 1:\n w = load(src);\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n n -= 3;\n while (n >= 17) {\n x = load(src + 1);\n store(dest, w >> 24 | x << 8);\n w = load(src + 5);\n store(dest + 4, x >> 24 | w << 8);\n x = load(src + 9);\n store(dest + 8, w >> 24 | x << 8);\n w = load(src + 13);\n store(dest + 12, x >> 24 | w << 8);\n src += 16; dest += 16; n -= 16;\n }\n break;\n case 2:\n w = load(src);\n store(dest++, load(src++));\n store(dest++, load(src++));\n n -= 2;\n while (n >= 18) {\n x = load(src + 2);\n store(dest, w >> 16 | x << 16);\n w = load(src + 6);\n store(dest + 4, x >> 16 | w << 16);\n x = load(src + 10);\n store(dest + 8, w >> 16 | x << 16);\n w = load(src + 14);\n store(dest + 12, x >> 16 | w << 16);\n src += 16; dest += 16; n -= 16;\n }\n break;\n case 3:\n w = load(src);\n store(dest++, load(src++));\n n -= 1;\n while (n >= 19) {\n x = load(src + 3);\n store(dest, w >> 8 | x << 24);\n w = load(src + 7);\n store(dest + 4, x >> 8 | w << 24);\n x = load(src + 11);\n store(dest + 8, w >> 8 | x << 24);\n w = load(src + 15);\n store(dest + 12, x >> 8 | w << 24);\n src += 16; dest += 16; n -= 16;\n }\n break;\n }\n }\n\n // copy remaining bytes one by one\n if (n & 16) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 8) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 4) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 2) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 1) {\n store(dest++, load(src++));\n }\n}\n\nexport function move_memory(dest: usize, src: usize, n: usize): void {\n // based on musl\'s implementation of memmove\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\n\n if (dest == src) return;\n if (src + n <= dest || dest + n <= src) {\n copy_memory(dest, src, n);\n return;\n }\n if (dest < src) {\n if ((src & 7) == (dest & 7)) {\n while (dest & 7) {\n if (!n) return;\n --n;\n store(dest++, load(src++));\n }\n while (n >= 8) {\n store(dest, load(src));\n n -= 8;\n dest += 8;\n src += 8;\n }\n }\n while (n) {\n store(dest++, load(src++));\n --n;\n }\n } else {\n if ((src & 7) == (dest & 7)) {\n while ((dest + n) & 7) {\n if (!n) return;\n store(dest + --n, load(src + n));\n }\n while (n >= 8) {\n n -= 8;\n store(dest + n, load(src + n));\n }\n }\n while (n) {\n store(dest + --n, load(src + n));\n }\n }\n}\n\nexport function set_memory(dest: usize, c: u8, n: usize): void {\n // based on musl\'s implementation of memset\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\n\n // fill head and tail with minimal branching\n if (!n) return;\n store(dest, c);\n store(dest + n - 1, c);\n if (n <= 2) return;\n\n store(dest + 1, c);\n store(dest + 2, c);\n store(dest + n - 2, c);\n store(dest + n - 3, c);\n if (n <= 6) return;\n store(dest + 3, c);\n store(dest + n - 4, c);\n if (n <= 8) return;\n\n // advance pointer to align it at 4-byte boundary\n var k: usize = -dest & 3;\n dest += k;\n n -= k;\n n &= -4;\n\n var c32: u32 = -1 / 255 * c;\n\n // fill head/tail up to 28 bytes each in preparation\n store(dest, c32);\n store(dest + n - 4, c32);\n if (n <= 8) return;\n store(dest + 4, c32);\n store(dest + 8, c32);\n store(dest + n - 12, c32);\n store(dest + n - 8, c32);\n if (n <= 24) return;\n store(dest + 12, c32);\n store(dest + 16, c32);\n store(dest + 20, c32);\n store(dest + 24, c32);\n store(dest + n - 28, c32);\n store(dest + n - 24, c32);\n store(dest + n - 20, c32);\n store(dest + n - 16, c32);\n\n // align to a multiple of 8\n k = 24 + (dest & 4);\n dest += k;\n n -= k;\n\n // copy 32 bytes each\n var c64: u64 = c32 | (c32 << 32);\n while (n >= 32) {\n store(dest, c64);\n store(dest + 8, c64);\n store(dest + 16, c64);\n store(dest + 24, c64);\n n -= 32;\n dest += 32;\n }\n}\n\nexport function compare_memory(vl: usize, vr: usize, n: usize): i32 {\n // based on musl\'s implementation of memcmp\n // provided because there\'s no proposed alternative\n if (vl == vr) return 0;\n while (n && load(vl) == load(vr)) {\n n--;\n vl++;\n vr++;\n }\n return n ? load(vl) - load(vr) : 0;\n}\n',"(lib)/polyfills":'export function bswap(value: T): T {\n assert(sizeof() == 1 || sizeof() == 2 || sizeof() == 4 || sizeof() == 8);\n\n if (sizeof() == 2) {\n return bswap16(value);\n } else if (sizeof() == 4) {\n return (\n rotl(value & 0xFF00FF00, 8) |\n rotr(value & 0x00FF00FF, 8)\n );\n } else if (sizeof() == 8) {\n var a: u64 = (value >> 8) & 0x00FF00FF00FF00FF;\n var b: u64 = (value & 0x00FF00FF00FF00FF) << 8;\n var v: u64 = a | b;\n\n a = (v >> 16) & 0x0000FFFF0000FFFF;\n b = (v & 0x0000FFFF0000FFFF) << 16;\n\n return rotr(a | b, 32);\n }\n return value;\n}\n\nexport function bswap16(value: T): T {\n assert(sizeof() == 1 || sizeof() == 2 || sizeof() == 4);\n\n if (sizeof() == 2 || sizeof() == 4) {\n return (((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000));\n }\n return value;\n}\n',"(lib)/regexp":'export class RegExp {\n\n // @binding(CALL_NEW, [ STRING, STRING], OBJECT_HANDLE)\n constructor(pattern: string, flags: string = "") { throw new Error("unreachable"); }\n\n // @binding(CALL_THIS, [ STRING ], PASS_THRU)\n test(search: string): bool { throw new Error("unreachable"); }\n\n // @binding(CALL_THIS, [], STRING)\n toString(): string { throw new Error("unreachable"); }\n\n}\n',"(lib)/set":'// const prime1: u32 = 73;\n// const prime2: u32 = 5009;\n\nexport class Set {\n\n private __memory: usize;\n private __capacity: u32;\n private __size: u32;\n\n constructor() {\n this.__memory = 0;\n this.__capacity = this.__size = 0;\n }\n\n get size(): i32 {\n return this.__size;\n }\n\n // FIXME: not a proper set implementation, just a filler\n\n has(value: T): bool {\n assert(this != null);\n\n for (var index: usize = 0, limit: usize = this.__size; index < limit; ++index) {\n if (load(this.__memory + index * sizeof()) == value) {\n return true;\n }\n }\n return false;\n }\n\n add(value: T): Set {\n assert(this != null);\n\n if (this.__size >= this.__capacity) {\n var newCapacity = max(this.__capacity << 1, 8);\n var newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\n free_memory(this.__memory);\n }\n this.__capacity = newCapacity;\n this.__memory = newMemory;\n }\n store(this.__memory + this.__size * sizeof(), value);\n ++this.__size;\n return this;\n }\n\n delete(value: T): bool {\n assert(this != null);\n\n for (var index: usize = 0, limit: usize = this.__size; index < limit; ++index) {\n if (load(this.__memory + index * sizeof()) == value) {\n if (index + 1 < limit) {\n move_memory(\n this.__memory + index * sizeof(),\n this.__memory + (index + 1) * sizeof(),\n limit - index - 1\n );\n }\n --this.__size;\n return true;\n }\n }\n return false;\n }\n\n clear(): void {\n assert(this != null);\n\n this.__size = 0;\n }\n\n // TODO: think about iterators\n}\n\n// class SetIterator extends Iterator {\n\n// get done(): bool {\n// throw new Error("not implemented");\n// }\n\n// next(): T {\n// throw new Error("not implemented");\n// }\n// }\n',"(lib)/string":'// singleton empty string\nconst EMPTY: String = changetype("");\n\n// number of bytes preceeding string data\nconst HEAD: usize = 4;\n\nfunction allocate(length: i32): String {\n assert(length > 0); // 0 -> EMPTY\n var ptr = allocate_memory(HEAD + (length << 1));\n store(ptr, length);\n return changetype(ptr);\n}\n\nexport class String {\n\n readonly length: i32;\n\n @operator("[]")\n charAt(pos: i32): String {\n assert(this != null);\n\n if (pos >= this.length) {\n return EMPTY;\n }\n\n var out = allocate(1);\n store(\n changetype(out),\n load(\n changetype(this) + (pos << 1),\n HEAD\n ),\n HEAD\n );\n return out;\n }\n\n charCodeAt(pos: i32): i32 {\n assert(this != null);\n if (pos >= this.length) {\n return -1; // (NaN)\n }\n return load(\n changetype(this) + (pos << 1),\n HEAD\n );\n }\n\n codePointAt(pos: i32): i32 {\n assert(this != null);\n if (pos >= this.length) {\n return -1; // (undefined)\n }\n var first = load(\n changetype(this) + (pos << 1),\n HEAD\n );\n if (first < 0xD800 || first > 0xDBFF || pos + 1 == this.length) {\n return first;\n }\n var second = load(\n changetype(this) + ((pos + 1) << 1),\n HEAD\n );\n if (second < 0xDC00 || second > 0xDFFF) {\n return first;\n }\n return ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n }\n\n @operator("+")\n private static __concat(left: String, right: String): String {\n if (left == null) {\n left = changetype("null");\n }\n return left.concat(right);\n }\n\n concat(other: String): String {\n assert(this != null);\n if (other == null) {\n other = changetype("null");\n }\n var thisLen: isize = this.length;\n var otherLen: isize = other.length;\n var outLen: usize = thisLen + otherLen;\n if (outLen == 0) {\n return EMPTY;\n }\n var out = allocate(outLen);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD,\n thisLen << 1\n );\n move_memory(\n changetype(out) + HEAD + (thisLen << 1),\n changetype(other) + HEAD,\n otherLen << 1\n );\n return out;\n }\n\n endsWith(searchString: String, endPosition: i32 = 0x7fffffff): bool {\n assert(this != null);\n if (searchString == null) {\n return false;\n }\n var end: isize = min(max(endPosition, 0), this.length);\n var searchLength: isize = searchString.length;\n var start: isize = end - searchLength;\n if (start < 0) {\n return false;\n }\n return !compare_memory(\n changetype(this) + HEAD + (start << 1),\n changetype(searchString) + HEAD,\n searchLength << 1\n );\n }\n\n @operator("==")\n private static __eq(left: String, right: String): bool {\n if (left == null) {\n return right == null;\n } else if (right == null) {\n return false;\n }\n var leftLength = left.length;\n if (leftLength != right.length) {\n return false;\n }\n return !compare_memory(\n changetype(left) + HEAD,\n changetype(right) + HEAD,\n (leftLength << 1)\n );\n }\n\n includes(searchString: String, position: i32 = 0): bool {\n return this.indexOf(searchString, position) != -1;\n }\n\n indexOf(searchString: String, position: i32 = 0): i32 {\n assert(this != null);\n if (searchString == null) {\n searchString = changetype("null");\n }\n var pos: isize = position;\n var len: isize = this.length;\n var start: isize = min(max(pos, 0), len);\n var searchLen: isize = searchString.length;\n\n // TODO: two-way, multiple char codes\n for (var k: usize = start; k + searchLen <= len; ++k) {\n if (!compare_memory(\n changetype(this) + HEAD + (k << 1),\n changetype(searchString) + HEAD,\n searchLen << 1)\n ) {\n return k;\n }\n }\n return -1;\n }\n\n startsWith(searchString: String, position: i32 = 0): bool {\n assert(this != null);\n if (searchString == null) {\n searchString = changetype("null");\n }\n var pos: isize = position;\n var len: isize = this.length;\n var start: isize = min(max(pos, 0), len);\n var searchLength: isize = searchString.length;\n if (searchLength + start > len) {\n return false;\n }\n return !compare_memory(\n changetype(this) + HEAD + (start << 1),\n changetype(searchString) + HEAD,\n searchLength << 1\n );\n }\n\n substr(start: i32, length: i32 = i32.MAX_VALUE): String {\n assert(this != null);\n var intStart: isize = start;\n var end: isize = length;\n var size: isize = this.length;\n if (intStart < 0) {\n intStart = max(size + intStart, 0);\n }\n var resultLength: isize = min(max(end, 0), size - intStart);\n if (resultLength <= 0) {\n return EMPTY;\n }\n var out = allocate(resultLength);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (intStart << 1),\n resultLength << 1\n );\n return out;\n }\n\n substring(start: i32, end: i32 = i32.MAX_VALUE): String {\n assert(this != null);\n var len = this.length;\n var finalStart = min(max(start, 0), len);\n var finalEnd = min(max(end, 0), len);\n var from = min(finalStart, finalEnd);\n var to = max(finalStart, finalEnd);\n len = to - from;\n if (!len) {\n return EMPTY;\n }\n if (!from && to == this.length) {\n return this;\n }\n var out = allocate(len);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (from << 1),\n len << 1\n );\n return out;\n }\n\n trim(): String {\n assert(this != null);\n var length: usize = this.length;\n while (\n length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (length << 1), HEAD)\n )\n ) {\n --length;\n }\n var start: usize = 0;\n while (\n start < length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEAD)\n )\n ) {\n ++start, --length;\n }\n if (!length) {\n return EMPTY;\n }\n if (!start && length == this.length) {\n return this;\n }\n var out = allocate(length);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (start << 1),\n length << 1\n );\n return out;\n }\n\n trimLeft(): String {\n assert(this != null);\n var start: isize = 0;\n var len: isize = this.length;\n while (\n start < len &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEAD)\n )\n ) {\n ++start;\n }\n if (!start) {\n return this;\n }\n var outLen = len - start;\n if (!outLen) {\n return EMPTY;\n }\n var out = allocate(outLen);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (start << 1),\n outLen << 1\n );\n return out;\n }\n\n trimRight(): String {\n assert(this != null);\n var len: isize = this.length;\n while (\n len > 0 &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (len << 1), HEAD)\n )\n ) {\n --len;\n }\n if (len <= 0) {\n return EMPTY;\n }\n if (len == this.length) {\n return this;\n }\n var out = allocate(len);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD,\n len << 1\n );\n return out;\n }\n}\n\nfunction isWhiteSpaceOrLineTerminator(c: u16): bool {\n switch (c) {\n case 10: // \n case 13: // \n case 8232: // \n case 8233: // \n case 9: // \n case 11: // \n case 12: // \n case 32: // \n case 160: // \n case 65279: // \n return true;\n default:\n return false;\n }\n}\n\nconst enum CharCode {\n PLUS = 0x2B,\n MINUS = 0x2D,\n DOT = 0x2E,\n _0 = 0x30,\n _1 = 0x31,\n _2 = 0x32,\n _3 = 0x33,\n _4 = 0x34,\n _5 = 0x35,\n _6 = 0x36,\n _7 = 0x37,\n _8 = 0x38,\n _9 = 0x39,\n A = 0x41,\n B = 0x42,\n E = 0x45,\n O = 0x4F,\n X = 0x58,\n Z = 0x5a,\n a = 0x61,\n b = 0x62,\n e = 0x65,\n o = 0x6F,\n x = 0x78,\n z = 0x7A\n}\n\nexport function parseInt(str: String, radix: i32 = 0): f64 {\n return parse(str, radix);\n}\n\nexport function parseI32(str: String, radix: i32 = 0): i32 {\n return parse(str, radix);\n}\n\nexport function parseI64(str: String, radix: i32 = 0): i64 {\n return parse(str, radix);\n}\n\nfunction parse(str: String, radix: i32 = 0): T {\n var len: i32 = str.length;\n if (!len) {\n return NaN;\n }\n var ptr = changetype(str) /* + HEAD -> offset */;\n var code = load(ptr, HEAD);\n\n // determine sign\n var sign: T;\n if (code == CharCode.MINUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = 1;\n } else {\n sign = 1;\n }\n\n // determine radix\n if (!radix) {\n if (code == CharCode._0 && len > 2) {\n switch (load(ptr + 2, HEAD)) {\n\n case CharCode.B:\n case CharCode.b:\n ptr += 4; len -= 2;\n radix = 2;\n break;\n\n case CharCode.O:\n case CharCode.o:\n ptr += 4; len -= 2;\n radix = 8;\n break;\n\n case CharCode.X:\n case CharCode.x:\n ptr += 4; len -= 2;\n radix = 16;\n break;\n\n default:\n radix = 10;\n }\n } else radix = 10;\n } else if (radix < 2 || radix > 36) {\n return NaN;\n }\n\n // calculate value\n var num: T = 0;\n while (len--) {\n code = load(ptr, HEAD);\n if (code >= CharCode._0 && code <= CharCode._9) {\n code -= CharCode._0;\n } else if (code >= CharCode.A && code <= CharCode.Z) {\n code -= CharCode.A - 10;\n } else if (code >= CharCode.a && code <= CharCode.z) {\n code -= CharCode.a - 10;\n } else {\n break;\n }\n if (code >= radix) {\n break;\n }\n num = (num * radix) + code;\n ptr += 2;\n }\n return sign * num;\n}\n\nexport function parseFloat(str: String): f64 {\n var len: i32 = str.length;\n if (!len) {\n return NaN;\n }\n var ptr = changetype(str) /* + HEAD -> offset */;\n var code = load(ptr, HEAD);\n\n // determine sign\n var sign: f64;\n if (code == CharCode.MINUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = 1;\n } else {\n sign = 1;\n }\n\n // calculate value\n var num: f64 = 0;\n while (len--) {\n code = load(ptr, HEAD);\n if (code == CharCode.DOT) {\n ptr += 2;\n var fac: f64 = 0.1; // precision :(\n while (len--) {\n code = load(ptr, HEAD);\n if (code == CharCode.E || code == CharCode.e) {\n assert(false); // TODO\n }\n code -= CharCode._0;\n if (code > 9) {\n break;\n }\n num += code * fac;\n fac *= 0.1;\n ptr += 2;\n }\n break;\n }\n code -= CharCode._0;\n if (code >= 10) {\n break;\n }\n num = (num * 10) + code;\n ptr += 2;\n }\n return sign * num;\n}\n'}:{},t.definitionFiles=t.isBundle?{assembly:'// Definitions for the "AssemblyScript" subset.\n\n// Types\n\n/** An 8-bit signed integer. */\ndeclare type i8 = number;\n/** A 16-bit signed integer. */\ndeclare type i16 = number;\n/** A 32-bit signed integer. */\ndeclare type i32 = number;\n/** A 64-bit signed integer. */\ndeclare type i64 = number;\n/** A 32-bit signed integer when targeting 32-bit WebAssembly or a 64-bit signed integer when targeting 64-bit WebAssembly. */\ndeclare type isize = number;\n/** An 8-bit unsigned integer. */\ndeclare type u8 = number;\n/** A 16-bit unsigned integer. */\ndeclare type u16 = number;\n/** A 32-bit unsigned integer. */\ndeclare type u32 = number;\n/** A 64-bit unsigned integer. */\ndeclare type u64 = number;\n/** A 32-bit unsigned integer when targeting 32-bit WebAssembly or a 64-bit unsigned integer when targeting 64-bit WebAssembly. */\ndeclare type usize = number;\n/** A 1-bit unsigned integer. */\ndeclare type bool = any; // sic\n/** A 32-bit float. */\ndeclare type f32 = number;\n/** A 64-bit float. */\ndeclare type f64 = number;\n\n/** Converts any other numeric value to an 8-bit signed integer. */\ndeclare function i8(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace i8 {\n export const MIN_VALUE: i8;\n export const MAX_VALUE: i8;\n}\n/** Converts any other numeric value to a 16-bit signed integer. */\ndeclare function i16(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace i16 {\n export const MIN_VALUE: i16;\n export const MAX_VALUE: i16;\n}\n/** Converts any other numeric value to a 32-bit signed integer. */\ndeclare function i32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i32;\ndeclare namespace i32 {\n export const MIN_VALUE: i32;\n export const MAX_VALUE: i32;\n}\n/** Converts any other numeric value to a 64-bit signed integer. */\ndeclare function i64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i64;\ndeclare namespace i64 {\n export const MIN_VALUE: i64;\n export const MAX_VALUE: i64;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare function isize(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): isize;\ndeclare namespace isize {\n export const MIN_VALUE: isize;\n export const MAX_VALUE: isize;\n}\n/** Converts any other numeric value to an 8-bit unsigned integer. */\ndeclare function u8(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace u8 {\n export const MIN_VALUE: u8;\n export const MAX_VALUE: u8;\n}\n/** Converts any other numeric value to a 16-bit unsigned integer. */\ndeclare function u16(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace u16 {\n export const MIN_VALUE: u16;\n export const MAX_VALUE: u16;\n}\n/** Converts any other numeric value to a 32-bit unsigned integer. */\ndeclare function u32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i32;\ndeclare namespace u32 {\n export const MIN_VALUE: u32;\n export const MAX_VALUE: u32;\n}\n/** Converts any other numeric value to a 64-bit unsigned integer. */\ndeclare function u64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i64;\ndeclare namespace u64 {\n export const MIN_VALUE: u64;\n export const MAX_VALUE: u64;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) unsigned integer. */\ndeclare function usize(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): isize;\ndeclare namespace usize {\n export const MIN_VALUE: usize;\n export const MAX_VALUE: usize;\n}\n/** Converts any other numeric value to a 1-bit unsigned integer. */\ndeclare function bool(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): bool;\ndeclare namespace bool {\n export const MIN_VALUE: bool;\n export const MAX_VALUE: bool;\n}\n/** Converts any other numeric value to a 32-bit float. */\ndeclare function f32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): f32;\ndeclare namespace f32 {\n export const MIN_VALUE: f32;\n export const MAX_VALUE: f32;\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f32;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f32;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f32;\n}\n/** Converts any other numeric value to a 64-bit float. */\ndeclare function f64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n export const MIN_VALUE: f64;\n export const MAX_VALUE: f64;\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f64;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f64;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f64;\n}\n\n// Built-ins\n\n/** Performs the sign-agnostic count leading zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered leading if the value is zero. */\ndeclare function clz(value: T): T;\n/** Performs the sign-agnostic count tailing zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered trailing if the value is zero. */\ndeclare function ctz(value: T): T;\n/** Performs the sign-agnostic count number of one bits operation on a 32-bit or 64-bit integer. */\ndeclare function popcnt(value: T): T;\n/** Performs the sign-agnostic rotate left operation on a 32-bit or 64-bit integer. */\ndeclare function rotl(value: T, shift: T): T;\n/** Performs the sign-agnostic rotate right operation on a 32-bit or 64-bit integer. */\ndeclare function rotr(value: T, shift: T): T;\n/** Computes the absolute value of an integer or float. */\ndeclare function abs(value: T): T;\n/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function max(left: T, right: T): T;\n/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function min(left: T, right: T): T;\n/** Performs the ceiling operation on a 32-bit or 64-bit float. */\ndeclare function ceil(value: T): T;\n/** Composes a 32-bit or 64-bit float from the magnitude of `x` and the sign of `y`. */\ndeclare function copysign(x: T, y: T): T;\n/** Performs the floor operation on a 32-bit or 64-bit float. */\ndeclare function floor(value: T): T;\n/** Rounds to the nearest integer tied to even of a 32-bit or 64-bit float. */\ndeclare function nearest(value: T): T;\n/** Reinterprets the bits of the specified value as type `T`. Valid reinterpretations are u32/i32 to/from f32 and u64/i64 to/from f64. */\ndeclare function reinterpret(value: number): T;\n/** Selects one of two pre-evaluated values depending on the condition. */\ndeclare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n/** Calculates the square root of a 32-bit or 64-bit float. */\ndeclare function sqrt(value: T): T;\n/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */\ndeclare function trunc(value: T): T;\n/** Loads a value of the specified type from memory. Equivalent to dereferncing a pointer in other languages. */\ndeclare function load(ptr: usize, constantOffset?: usize): T;\n/** Stores a value of the specified type to memory. Equivalent to dereferencing a pointer in other languages when assigning a value. */\ndeclare function store(ptr: usize, value: any, constantOffset?: usize): void;\n/** Returns the current memory size in units of pages. One page is 64kb. */\ndeclare function current_memory(): i32;\n/** Grows linear memory by a given unsigned delta of pages. One page is 64kb. Returns the previous memory size in units of pages or `-1` on failure. */\ndeclare function grow_memory(value: i32): i32;\n/** Copies n bytes from the specified source to the specified destination in memory. These regions may overlap. */\ndeclare function move_memory(destination: usize, source: usize, n: usize): void;\n/** Sets n bytes beginning at the specified destination in memory to the specified byte value. */\ndeclare function set_memory(destination: usize, value: u8, count: usize): void;\n/** Compares two chunks of memory. Returns `0` if equal, otherwise the difference of the first differing bytes. */\ndeclare function compare_memory(vl: usize, vr: usize, n: usize): i32;\n/** Allocates a chunk of memory of the specified size and returns a pointer to it. */\ndeclare function allocate_memory(size: usize): usize;\n/** Disposes a chunk of memory by its pointer. */\ndeclare function free_memory(ptr: usize): void;\n/** Emits an unreachable operation that results in a runtime error when executed. Both a statement and an expression of any type. */\ndeclare function unreachable(): any; // sic\n\n/** [Polyfill] Performs the sign-agnostic reverse bytes **/\ndeclare function bswap(value: T): T;\n/** [Polyfill] Performs the sign-agnostic reverse bytes only for last 16-bit **/\ndeclare function bswap16(value: T): T;\n\n/** NaN (not a number) as a 32-bit or 64-bit float depending on context. */\ndeclare const NaN: f32 | f64;\n/** Positive infinity as a 32-bit or 64-bit float depending on context. */\ndeclare const Infinity: f32 | f64;\n/** Heap base offset. */\ndeclare const HEAP_BASE: usize;\n/** Determines the byte size of the specified core or class type. Compiles to a constant. */\ndeclare function sizeof(): usize;\n/** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/\ndeclare function changetype(value: any): T;\n/** Tests if a 32-bit or 64-bit float is `NaN`. */\ndeclare function isNaN(value: T): bool;\n/** Tests if a 32-bit or 64-bit float is finite, that is not `NaN` or +/-`Infinity`. */\ndeclare function isFinite(value: T): bool;\n/** Traps if the specified value is not true-ish, otherwise returns the (non-nullable) value. */\ndeclare function assert(isTrueish: T, message?: string): T & object; // any better way to model `: T != null`?\n/** Parses an integer string to a 64-bit float. */\ndeclare function parseInt(str: string, radix?: i32): f64;\n/** Parses an integer string to a 32-bit integer. */\ndeclare function parseI32(str: string, radix?: i32): i32;\n/** Parses an integer string to a 64-bit integer. */\ndeclare function parseI64(str: string, radix?: i32): i64;\n/** Parses a string to a 64-bit float. */\ndeclare function parseFloat(str: string): f64;\n\n// Standard library (not yet implemented)\n\n/** Class representing a sequence of values of type `T`. */\ndeclare class Array {\n [key: number]: T;\n /** Current length of the array. */\n length: i32;\n /** Constructs a new array. */\n constructor(capacity?: i32);\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n shift(): T;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n}\n\n/** Class representing a C-like array of values of type `T` with limited capabilities. */\ndeclare class CArray {\n [key: number]: T;\n private constructor();\n}\n\n/** Class representing a sequence of characters. */\ndeclare class String {\n\n static fromCharCode(ls: i32, hs?: i32): string;\n static fromCharCodes(arr: u16[]): string;\n static fromCodePoint(cp: i32): string;\n static fromCodePoints(arr: i32[]): string;\n\n readonly length: u32;\n\n charAt(index: u32): string;\n charCodeAt(index: u32): u16;\n concat(other: string): string;\n endsWith(other: string): bool;\n indexOf(other: string): u32;\n includes(other: string): bool;\n startsWith(other: string): bool;\n substr(start: u32, length?: u32): string;\n substring(start: u32, end?: u32): string;\n trim(): string;\n trimLeft(): string;\n trimRight(): string;\n}\n\n/** Class for representing a runtime error. Base class of all errors. */\ndeclare class Error {\n\n /** Error name. */\n name: string;\n\n /** Message provided on construction. */\n message: string;\n\n /** Stack trace. */\n stack: string;\n\n /** Constructs a new error, optionally with a message. */\n constructor(message?: string);\n}\n\n/** Class for indicating an error when a value is not in the set or range of allowed values. */\ndeclare class RangeError extends Error { }\n\ninterface Boolean {}\ninterface Function {}\ninterface IArguments {}\ninterface Number {}\ninterface Object {}\ninterface RegExp {}\n\ndeclare class Set {\n readonly size: i32;\n has(value: T): bool;\n add(value: T): void;\n delete(value: T): bool;\n clear(): void;\n}\n\n// Internal decorators\n\n/** Annotates an element as a program global. */\ndeclare function global(target: Function, propertyKey: string, descriptor: any): void;\n\n/** Annotates a method as an operator overload. */\ndeclare function operator(token: string): (target: any, propertyKey: string, descriptor: any) => void;\n\n/** Annotates a class as being unmanaged with limited capabilities. */\ndeclare function unmanaged(target: Function): any;\n\n/** Annotates a class field with an explicit offset. */\ndeclare function offset(offset: usize): any;\n\n/** Annotates an element as begin built-in. */\ndeclare function builtin(target: Function): any;\n',portable:'// Definitions for the "portable AssemblyScript" subset.\n\n// Portable types\n\n// Note that semantic differences require additional explicit conversions for full compatibility.\n// For example, when casting an i32 to an u8, doing `(someI32 & 0xff)` will yield the same\n// result when compiling to WebAssembly or JS while `someI32` alone does nothing in JS.\n\n// Note that i64\'s are not portable (JS numbers are IEEE754 doubles with a maximum safe integer value\n// of 2^53-1) and instead require a compatibility layer to work in JS as well. See: src/util/i64.ts\n\ndeclare type i8 = number;\ndeclare type i16 = number;\ndeclare type i32 = number;\ndeclare type isize = number;\ndeclare type u8 = number;\ndeclare type u16 = number;\ndeclare type u32 = number;\ndeclare type bool = boolean;\ndeclare type usize = number;\ndeclare type f32 = number;\ndeclare type f64 = number;\n\n/** Converts any other numeric value to an 8-bit signed integer. */\ndeclare function i8(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace i8 {\n export const MIN_VALUE: i8;\n export const MAX_VALUE: i8;\n}\n/** Converts any other numeric value to a 16-bit signed integer. */\ndeclare function i16(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace i16 {\n export const MIN_VALUE: i16;\n export const MAX_VALUE: i16;\n}\n/** Converts any other numeric value to a 32-bit signed integer. */\ndeclare function i32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i32;\ndeclare namespace i32 {\n export const MIN_VALUE: i32;\n export const MAX_VALUE: i32;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare function isize(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): isize;\ndeclare namespace isize {\n export const MIN_VALUE: isize;\n export const MAX_VALUE: isize;\n}\n/** Converts any other numeric value to an 8-bit unsigned integer. */\ndeclare function u8(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace u8 {\n export const MIN_VALUE: u8;\n export const MAX_VALUE: u8;\n}\n/** Converts any other numeric value to a 16-bit unsigned integer. */\ndeclare function u16(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace u16 {\n export const MIN_VALUE: u16;\n export const MAX_VALUE: u16;\n}\n/** Converts any other numeric value to a 32-bit unsigned integer. */\ndeclare function u32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i32;\ndeclare namespace u32 {\n export const MIN_VALUE: u32;\n export const MAX_VALUE: u32;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) unsigned integer. */\ndeclare function usize(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): isize;\ndeclare namespace usize {\n export const MIN_VALUE: usize;\n export const MAX_VALUE: usize;\n}\n/** Converts any other numeric value to a 1-bit unsigned integer. */\ndeclare function bool(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): bool;\ndeclare namespace bool {\n export const MIN_VALUE: bool;\n export const MAX_VALUE: bool;\n}\n/** Converts any other numeric value to a 32-bit float. */\ndeclare function f32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f32;\ndeclare namespace f32 {\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f32;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f32;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f32;\n}\n/** Converts any other numeric value to a 64-bit float. */\ndeclare function f64(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f64;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f64;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f64;\n}\n\n// Portable built-ins\n\n/** Performs the sign-agnostic count leading zero bits operation on a 32-bit integer. All zero bits are considered leading if the value is zero. */\ndeclare function clz(value: T): T;\n/** Computes the absolute value of an integer or float. */\ndeclare function abs(value: T): T;\n/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function max(left: T, right: T): T;\n/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function min(left: T, right: T): T;\n/** Performs the ceiling operation on a 32-bit or 64-bit float. */\ndeclare function ceil(value: T): T;\n/** Performs the floor operation on a 32-bit or 64-bit float. */\ndeclare function floor(value: T): T;\n/** Selects one of two pre-evaluated values depending on the condition. */\ndeclare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n/** Calculates the square root of a 32-bit or 64-bit float. */\ndeclare function sqrt(value: T): T;\n/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */\ndeclare function trunc(value: T): T;\n/** Allocates a chunk of memory of the specified size and returns a pointer to it. */\ndeclare function allocate_memory(size: usize): usize;\n/** Disposes a chunk of memory by its pointer. */\ndeclare function free_memory(ptr: usize): void;\n/** Copies n bytes from the specified source to the specified destination in memory. These regions may overlap. */\ndeclare function move_memory(destination: usize, source: usize, n: usize): void;\n/** Loads a value of the specified type from memory. Type must be `u8`. */\ndeclare function load(ptr: usize, constantOffset?: usize): T;\n/** Stores a value of the specified type to memory. Type must be `u8`. */\ndeclare function store(ptr: usize, value: T, constantOffset?: usize): void;\n/** Emits an unreachable operation that results in a runtime error when executed. */\ndeclare function unreachable(): any; // sic\n\n/** [Polyfill] Performs the sign-agnostic reverse bytes **/\ndeclare function bswap(value: T): T;\n/** [Polyfill] Performs the sign-agnostic reverse bytes only for last 16-bit **/\ndeclare function bswap16(value: T): T;\n\n/** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/\ndeclare function changetype(value: any): T;\n/** Traps if the specified value is not true-ish, otherwise returns the value. */\ndeclare function assert(isTrueish: T, message?: string): T & object; // any better way to model `: T != null`?\n/** Parses an integer string to a 64-bit float. */\ndeclare function parseInt(str: string, radix?: i32): f64;\n/** Parses an integer string to a 32-bit integer. */\ndeclare function parseI32(str: string, radix?: i32): i32;\n/** Parses a floating point string to a 64-bit float. */\ndeclare function parseFloat(str: string): f64;\n\n// Portable standard library\n// Everything marked @deprecated is a temporary filler. Do not use.\n\ndeclare const NaN: f32 | f64;\ndeclare const Infinity: f32 | f64;\n\ndeclare class Array {\n [key: number]: T;\n length: i32;\n constructor(capacity?: i32);\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n shift(): T;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n\n join(delim: string): string;\n}\n\ndeclare class Uint8Array extends Array {}\ndeclare class Uint16Array extends Array {}\ndeclare class Uint32Array extends Array {}\ndeclare class Int8Array extends Array {}\ndeclare class Int16Array extends Array {}\ndeclare class Int32Array extends Array {}\ndeclare class Float32Array extends Array {}\ndeclare class Float64Array extends Array {}\n\ndeclare class String {\n static fromCharCode(ls: i32, hs?: i32): string;\n static fromCharCodes(arr: u16[]): string;\n static fromCodePoint(cp: i32): string;\n static fromCodePoints(arr: i32[]): string;\n readonly length: i32;\n private constructor();\n indexOf(subject: string, position?: i32): i32;\n includes(other: string): bool;\n lastIndexOf(subject: string, position?: i32): i32;\n charAt(index: i32): string;\n charCodeAt(index: i32): i32;\n substring(from: i32, to?: i32): string;\n startsWith(subject: string): bool;\n endsWith(subject: string): bool;\n replace(search: string, replacement: string): string;\n toString(): string;\n}\n\ninterface Boolean {}\n\ndeclare class Number {\n private constructor();\n toString(radix?: i32): string;\n}\n\ninterface Object {}\n\ninterface Function {}\n\ninterface RegExp {}\n\ninterface IArguments {}\n\ndeclare class Error {\n constructor(message: string);\n message: string;\n stack: string | null;\n}\n\ndeclare class Symbol {\n private constructor();\n static readonly iterator: symbol;\n}\n\ndeclare class Set {\n constructor(entries?: T[]);\n has(value: T): bool;\n add(value: T): void;\n delete(value: T): bool;\n clear(): void;\n [Symbol.iterator](): Iterator;\n}\n\ndeclare class Map {\n constructor(entries?: [K, V][]);\n readonly size: i32;\n set(key: K, value: V): void;\n has(key: K): bool;\n get(key: K): V | null;\n clear(): void;\n entries(): Iterable<[K, V]>;\n keys(): Iterable;\n values(): Iterable;\n [Symbol.iterator](): Iterator<[K,V]>;\n}\n\ninterface Iterable {\n [Symbol.iterator](): Iterator;\n}\n\ninterface Iterator {}\n\ndeclare namespace console {\n /** @deprecated */\n function log(message: string): void;\n}\n'}:{},t.main=function(r,h,m){function g(e){try{var t;return A.readCount++,A.readTime+=a(()=>{t=u.readFileSync(e,{encoding:'utf8'})}),t}catch(t){return null}}function b(e,t){try{return A.writeCount++,A.writeTime+=a(()=>{'string'==typeof t?u.writeFileSync(e,t,{encoding:'utf8'}):u.writeFileSync(e,t)}),!0}catch(t){return!1}}function y(e){var t;try{return A.readTime+=a(()=>{t=i(!function(){var t=new Error('Cannot find module "glob"');throw t.code='MODULE_NOT_FOUND',t}()).sync('*.ts',{cwd:e})}),t}catch(t){return[]}}function _(e){_.used||(A.writeCount++,_.used=!0),A.writeTime+=a(()=>{'string'==typeof e?v.write(e,{encoding:'utf8'}):v.write(e)})}'function'==typeof h?(m=h,h={}):!h&&(h={});const v=h.stdout||e.stdout,z=h.stderr||e.stderr,T=h.readFile||g,E=h.writeFile||b,x=h.listFiles||y,A=h.stats||n();if(!v)throw Error('\'options.stdout\' must be specified');if(!z)throw Error('\'options.stderr\' must be specified');if(!u.readFileSync){if(T===g)throw Error('\'options.readFile\' must be specified');if(E===b)throw Error('\'options.writeFile\' must be specified');if(x===y)throw Error('\'options.listFiles\' must be specified')}const S=s(r),k=24;if(m||(m=function(e){var t=0;return e&&(z.write(e.stack+f.EOL),t=1),t}),S.version)return v.write('Version '+t.version+(p?'-dev':'')+f.EOL),m(null);if(S.help||1>S._.length){const e=[];return Object.keys(t.options).forEach((i)=>{var r=t.options[i],s=' ';for(s+='--'+i,r.aliases&&1===r.aliases[0].length&&(s+=', -'+r.aliases[0]);s.length{for(let t=0;t hello.wasm','','Options:'].concat(e).join(f.EOL)+f.EOL),m(null)}const I=S.baseDir?c.resolve(S.baseDir):e.cwd(),L=c.join('.','..','std','assembly'),w=S.noLib?[]:[L];S.lib&&('string'==typeof S.lib&&(S.lib=S.lib.split(',')),Array.prototype.push.apply(w,S.lib.map(trim)));var F=null;for(let e=0,i=S._.length;e{F=d.parseFile(s,r,!0,F)});null!=(r=F.nextFile());){if(r.startsWith(t.libraryPrefix)){for(let e=0,i=w.length;e{d.parseFile(s,r,!1,F)})}if(o(F,z))return m(Error('Parse error'))}var M=!1;S.noLib||Object.keys(t.libraryFiles).forEach((e)=>{e.lastIndexOf('/')>=t.libraryPrefix.length||(A.parseCount++,A.parseTime+=a(()=>{F=d.parseFile(t.libraryFiles[e],e+'.ts',!1,F)}),M=!0)});for(let e=0,i=w.length;e{F=d.parseFile(o,t.libraryPrefix+s,!1,F)})}}const C=d.createOptions();d.setTarget(C,0),d.setNoTreeShaking(C,!!S.noTreeShaking),d.setNoAssert(C,!!S.noAssert),d.setNoMemory(C,!!S.noMemory),d.setImportMemory(C,!!S.importMemory),d.setMemoryBase(C,S.memoryBase>>>0),d.setSourceMap(C,null!=S.sourceMap);var B;A.compileCount++;try{A.compileTime+=a(()=>{B=d.compile(F,C)})}catch(t){return m(t)}if(o(F,z))return B&&B.dispose(),m(Error('Compile error'));if(S.validate&&(A.validateCount++,A.validateTime+=a(()=>{if(!B.validate())return B.dispose(),m(Error('Validate error'))})),'clamp'===S.trapMode)A.optimizeCount++,A.optimizeTime+=a(()=>{B.runPasses(['trap-mode-clamp'])});else if('js'===S.trapMode)A.optimizeCount++,A.optimizeTime+=a(()=>{B.runPasses(['trap-mode-js'])});else if('allow'!==S.trapMode)return B.dispose(),m(Error('Unsupported trap mode'));var N=-1,R=0,P=!S.noDebug;!1!==S.optimize&&('number'==typeof S.optimize?N=S.optimize:S[0]?N=0:S[1]?N=1:S[2]?N=2:S[3]?N=3:!0===S.optimize?(N=t.defaultOptimizeLevel,R=t.defaultShrinkLevel):N=0),S.s?R=1:S.z&&(R=2),'number'==typeof S.optimizeLevel&&(N=S.optimizeLevel),'number'==typeof S.shrinkLevel?R=S.shrinkLevel:'s'===S.shrinkLevel?R=1:'z'===S.shrinkLevel&&(R=2),B.setOptimizeLevel(0{0>O.indexOf(e)&&O.push(e)})),0<=N&&(A.optimizeCount++,A.optimizeTime+=a(()=>{B.optimize()})),O.length&&(A.optimizeCount++,A.optimizeTime+=a(()=>{B.runPasses(O.map((e)=>e.trim()))})),!S.noEmit){let e=!1;if(null!=S.outFile&&(/\.was?t$/.test(S.outFile)&&null==S.textFile?S.textFile=S.outFile:/\.js$/.test(S.outFile)&&null==S.asmjsFile?S.asmjsFile=S.outFile:null==S.binaryFile&&(S.binaryFile=S.outFile)),null!=S.binaryFile){let i,r=null==S.sourceMap?null:S.sourceMap.length?S.sourceMap:c.basename(S.binaryFile)+'.map';if(A.emitCount++,A.emitTime+=a(()=>{i=B.toBinary(r)}),S.binaryFile.length?E(c.join(I,S.binaryFile),i.output):(_(i.output),e=!0),null!=i.sourceMap)if(S.binaryFile.length){let e=JSON.parse(i.sourceMap);e.sourceRoot=t.sourceMapRoot,e.sources.forEach((r,i)=>{let s=null;if(r.startsWith(t.libraryPrefix))for(let e=0,i=w.length;e{t=B.toText()}),E(c.join(I,S.textFile),t)):!e&&(A.emitCount++,A.emitTime+=a(()=>{t=B.toText()}),_(t),e=!0)}if(null!=S.asmjsFile){let t;S.asmjsFile.length?(A.emitCount++,A.emitTime+=a(()=>{t=B.toAsmjs()}),E(c.join(I,S.asmjsFile),t)):!e&&(A.emitCount++,A.emitTime+=a(()=>{t=B.toAsmjs()}),_(t),e=!0)}}return B.dispose(),S.measure&&l(A,z),m(null)},t.parseArguments=s,t.checkDiagnostics=o,t.createStats=n,e.hrtime||(e.hrtime=i(15)),t.measure=a,t.printStats=l,t.createMemoryStream=function(e){var t=[];return t.write=function(t){'string'==typeof t?this.push(r.from(t,'utf8')):this.push(t),e&&e(t)},t.toBuffer=function(){return r.concat(this)},t.toString=function(){return this.toBuffer().toString('utf8')},t},t.tscOptions={alwaysStrict:!0,noImplicitAny:!0,noImplicitReturns:!0,noImplicitThis:!0,noEmitOnError:!0,strictNullChecks:!0,experimentalDecorators:!0,target:'esnext',module:'commonjs',noLib:!0,types:[],allowJs:!1}}).call(t,i(0),i(5).Buffer)},function(e,t,i){'use strict';(function(e){function n(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(n()e)throw new RangeError('"size" argument must not be negative')}function f(e,t,i,r){return c(t),0>=t?a(e,t):void 0===i?a(e,t):'string'==typeof r?a(e,t).fill(i,r):a(e,t).fill(i)}function d(e,t){if(c(t),e=a(e,0>t?0:0|b(t)),!l.TYPED_ARRAY_SUPPORT)for(var r=0;rt.length?0:0|b(t.length);e=a(e,r);for(var s=0;si||t.byteLength=n())throw new RangeError('Attempt to allocate Buffer larger than maximum size: 0x'+n().toString(16)+' bytes');return 0|e}function y(e,t){if(l.isBuffer(e))return e.length;if('undefined'!=typeof ArrayBuffer&&'function'==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;'string'!=typeof e&&(e=''+e);var i=e.length;if(0===i)return 0;for(var r=!1;;)switch(t){case'ascii':case'latin1':case'binary':return i;case'utf8':case'utf-8':case void 0:return Z(e).length;case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return 2*i;case'hex':return i>>>1;case'base64':return K(e).length;default:if(r)return Z(e).length;t=(''+t).toLowerCase(),r=!0;}}function _(e,t,i){var r=!1;if((void 0===t||0>t)&&(t=0),t>this.length)return'';if((void 0===i||i>this.length)&&(i=this.length),0>=i)return'';if(i>>>=0,t>>>=0,i<=t)return'';for(e||(e='utf8');;)switch(e){case'hex':return B(this,t,i);case'utf8':case'utf-8':return w(this,t,i);case'ascii':return M(this,t,i);case'latin1':case'binary':return C(this,t,i);case'base64':return L(this,t,i);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return N(this,t,i);default:if(r)throw new TypeError('Unknown encoding: '+e);e=(e+'').toLowerCase(),r=!0;}}function v(e,t,r){var s=e[t];e[t]=e[r],e[r]=s}function z(e,t,i,r,s){if(0===e.length)return-1;if('string'==typeof i?(r=i,i=0):2147483647i&&(i=-2147483648),i=+i,isNaN(i)&&(i=s?0:e.length-1),0>i&&(i=e.length+i),i>=e.length){if(s)return-1;i=e.length-1}else if(0>i)if(s)i=0;else return-1;if('string'==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:T(e,t,i,r,s);if('number'==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&'function'==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):T(e,[t],i,r,s);throw new TypeError('val must be string, number or Buffer')}function T(e,t,r,s,o){function n(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}var a=1,l=e.length,u=t.length;if(void 0!==s&&(s=(s+'').toLowerCase(),'ucs2'===s||'ucs-2'===s||'utf16le'===s||'utf-16le'===s)){if(2>e.length||2>t.length)return-1;a=2,l/=2,u/=2,r/=2}var c;if(o){var i=-1;for(c=r;cl&&(r=l-u),c=r;0<=c;c--){for(var f=!0,d=0;do&&(s=o)):s=o;var n=t.length;if(0!=n%2)throw new TypeError('Invalid hex string');s>n/2&&(s=n/2);for(var a,l=0;li&&(a=i):2==l?(u=e[n+1],128==(192&u)&&(d=(31&i)<<6|63&u,127d||57343d&&(a=d))):void 0}null===a?(a=65533,l=1):65535>>10),a=56320|1023&a),o.push(a),n+=l}return F(o)}function F(e){var t=e.length;if(t<=ie)return Q.apply(String,e);for(var r='',s=0;st)&&(t=0),(!r||0>r||r>s)&&(r=s);for(var o='',n=t;ne)throw new RangeError('offset is not uint');if(e+t>i)throw new RangeError('Trying to access beyond buffer length')}function P(e,t,i,r,s,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||te.length)throw new RangeError('Index out of range')}function O(e,t,r,o){0>t&&(t=65535+t+1);for(var n=0,i=s(e.length-r,2);n>>8*(o?n:1-n)}function U(e,t,r,o){0>t&&(t=4294967295+t+1);for(var n=0,i=s(e.length-r,4);n>>8*(o?n:3-n)}function D(e,t,i,r){if(i+r>e.length)throw new RangeError('Index out of range');if(0>i)throw new RangeError('Index out of range')}function V(e,t,i,r,s){return s||D(e,t,i,4,34028234663852886e22,-34028234663852886e22),ee.write(e,t,i,r,23,4),i+4}function j(e,t,i,r,s){return s||D(e,t,i,8,17976931348623157e292,-17976931348623157e292),ee.write(e,t,i,r,52,8),i+8}function H(e){if(e=X(e).replace(re,''),2>e.length)return'';for(;0!=e.length%4;)e+='=';return e}function X(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,'')}function Y(e){return 16>e?'0'+e.toString(16):e.toString(16)}function Z(e,t){t=t||Infinity;for(var r,s=e.length,o=null,n=[],a=0;ar){if(!o){if(56319r){-1<(t-=3)&&n.push(239,191,189),o=r;continue}r=(o-55296<<10|r-56320)+65536}else o&&-1<(t-=3)&&n.push(239,191,189);if(o=null,128>r){if(0>(t-=1))break;n.push(r)}else if(2048>r){if(0>(t-=2))break;n.push(192|r>>6,128|63&r)}else if(65536>r){if(0>(t-=3))break;n.push(224|r>>12,128|63&r>>6,128|63&r)}else if(1114112>r){if(0>(t-=4))break;n.push(240|r>>18,128|63&r>>12,128|63&r>>6,128|63&r)}else throw new Error('Invalid code point')}return n}function G(e){for(var t=[],r=0;r(t-=2));++a)r=e.charCodeAt(a),s=r>>8,o=r%256,n.push(o),n.push(s);return n}function K(e){return $.toByteArray(H(e))}function q(e,t,r,s){for(var o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function J(e){return e!==e}var Q=String.fromCharCode,$=i(6),ee=i(7),te=i(8);/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */t.Buffer=l,t.SlowBuffer=function(e){return+e!=e&&(e=0),l.alloc(+e)},t.INSPECT_MAX_BYTES=50,l.TYPED_ARRAY_SUPPORT=e.TYPED_ARRAY_SUPPORT===void 0?function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&'function'==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}():e.TYPED_ARRAY_SUPPORT,t.kMaxLength=n(),l.poolSize=8192,l._augment=function(e){return e.__proto__=l.prototype,e},l.from=function(e,t,i){return u(null,e,t,i)},l.TYPED_ARRAY_SUPPORT&&(l.prototype.__proto__=Uint8Array.prototype,l.__proto__=Uint8Array,'undefined'!=typeof Symbol&&Symbol.species&&l[Symbol.species]===l&&Object.defineProperty(l,Symbol.species,{value:null,configurable:!0})),l.alloc=function(e,t,i){return f(null,e,t,i)},l.allocUnsafe=function(e){return d(null,e)},l.allocUnsafeSlow=function(e){return d(null,e)},l.isBuffer=function(e){return!!(null!=e&&e._isBuffer)},l.compare=function(e,t){if(!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('Arguments must be Buffers');if(e===t)return 0;for(var r=e.length,o=t.length,n=0,i=s(r,o);ni&&(e+=' ... ')),''},l.prototype.compare=function(e,t,r,o,n){if(!l.isBuffer(e))throw new TypeError('Argument must be a Buffer');if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===o&&(o=0),void 0===n&&(n=this.length),0>t||r>e.length||0>o||n>this.length)throw new RangeError('out of range index');if(o>=n&&t>=r)return 0;if(o>=n)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,o>>>=0,n>>>=0,this===e)return 0;for(var a=n-o,u=r-t,c=s(a,u),f=this.slice(o,n),d=e.slice(t,r),p=0;ps)&&(i=s),0i||0>t)||t>this.length)throw new RangeError('Attempt to write outside buffer bounds');r||(r='utf8');for(var o=!1;;)switch(r){case'hex':return E(this,e,t,i);case'utf8':case'utf-8':return x(this,e,t,i);case'ascii':return A(this,e,t,i);case'latin1':case'binary':return S(this,e,t,i);case'base64':return k(this,e,t,i);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return I(this,e,t,i);default:if(o)throw new TypeError('Unknown encoding: '+r);r=(''+r).toLowerCase(),o=!0;}},l.prototype.toJSON=function(){return{type:'Buffer',data:Array.prototype.slice.call(this._arr||this,0)}};var ie=4096;l.prototype.slice=function(e,t){var r=this.length;e=~~e,t=t===void 0?r:~~t,0>e?(e+=r,0>e&&(e=0)):e>r&&(e=r),0>t?(t+=r,0>t&&(t=0)):t>r&&(t=r),t=n&&(s-=o(2,8*t)),s},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||R(e,t,this.length);for(var s=t,i=1,n=this[e+--s];0=i&&(n-=o(2,8*t)),n},l.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},l.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},l.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),ee.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),ee.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),ee.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),ee.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,s){if(e=+e,t|=0,r|=0,!s){var n=o(2,8*r)-1;P(this,e,t,r,n,0)}var a=1,l=0;for(this[t]=255&e;++l>>8):O(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||P(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):O(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||P(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):U(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||P(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):U(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,s){if(e=+e,t|=0,!s){var n=o(2,8*r-1);P(this,e,t,r,n-1,-n)}var a=0,i=1,l=0;for(this[t]=255&e;++ae&&0==l&&0!==this[t+a-1]&&(l=1),this[t+a]=255&(e/i>>0)-l;return t+r},l.prototype.writeIntBE=function(e,t,r,s){if(e=+e,t|=0,!s){var n=o(2,8*r-1);P(this,e,t,r,n-1,-n)}var a=r-1,i=1,l=0;for(this[t+a]=255&e;0<=--a&&(i*=256);)0>e&&0==l&&0!==this[t+a+1]&&(l=1),this[t+a]=255&(e/i>>0)-l;return t+r},l.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||P(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=r(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||P(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):O(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||P(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):O(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||P(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):U(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||P(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):U(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,i){return V(this,e,t,!0,i)},l.prototype.writeFloatBE=function(e,t,i){return V(this,e,t,!1,i)},l.prototype.writeDoubleLE=function(e,t,i){return j(this,e,t,!0,i)},l.prototype.writeDoubleBE=function(e,t,i){return j(this,e,t,!1,i)},l.prototype.copy=function(e,t,r,s){if(r||(r=0),s||0===s||(s=this.length),t>=e.length&&(t=e.length),t||(t=0),0t)throw new RangeError('targetStart out of bounds');if(0>r||r>=this.length)throw new RangeError('sourceStart out of bounds');if(0>s)throw new RangeError('sourceEnd out of bounds');s>this.length&&(s=this.length),e.length-ti||!l.TYPED_ARRAY_SUPPORT)for(o=0;oo&&(e=o)}if(void 0!==s&&'string'!=typeof s)throw new TypeError('encoding must be a string');if('string'==typeof s&&!l.isEncoding(s))throw new TypeError('Unknown encoding: '+s)}else'number'==typeof e&&(e&=255);if(0>t||this.length>>=0,r=r===void 0?this.length:r>>>0,e||(e=0);var n;if('number'==typeof e)for(n=t;n>16,n[l++]=255&s>>8,n[l++]=255&s;return 2===o?(s=u[e.charCodeAt(t)]<<2|u[e.charCodeAt(t+1)]>>4,n[l++]=255&s):1===o&&(s=u[e.charCodeAt(t)]<<10|u[e.charCodeAt(t+1)]<<4|u[e.charCodeAt(t+2)]>>2,n[l++]=255&s>>8,n[l++]=255&s),n}function o(e){return l[63&e>>18]+l[63&e>>12]+l[63&e>>6]+l[63&e]}function n(e,t,r){for(var s,n=[],a=t;ai?i:c+u));return 1==s?(t=e[r-1],o+=l[t>>2],o+=l[63&t<<4],o+='=='):2==s&&(t=(e[r-2]<<8)+e[r-1],o+=l[t>>10],o+=l[63&t>>4],o+=l[63&t<<2],o+='='),a.push(o),a.join('')}t.byteLength=function(e){return 3*e.length/4-r(e)},t.toByteArray=s,t.fromByteArray=a;for(var l=[],u=[],c='undefined'==typeof Uint8Array?Array:Uint8Array,f='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',d=0,i=f.length;d>1,h=-7,m=n?l-1:0,i=n?-1:1,d=t[r+m];for(m+=i,u=d&(1<<-h)-1,d>>=-h,h+=c;0>=-h,h+=a;0>1,y=23===u?5.960464477539063e-8-6.617444900424222e-24:0,_=l?0:f-1,i=l?1:-1,d=0>n||0===n&&0>1/n?1:0;for(n=Math.abs(n),isNaN(n)||n===Infinity?(h=isNaN(n)?1:0,p=g):(p=r(Math.log(n)/Math.LN2),1>n*(m=o(2,-p))&&(p--,m*=2),n+=1<=p+b?y/m:y*o(2,1-b),2<=n*m&&(p++,m/=2),p+b>=g?(h=0,p=g):1<=p+b?(h=(n*m-1)*o(2,u),p+=b):(h=n*o(2,b-1)*o(2,u),p=0));8<=u;t[a+_]=255&h,_+=i,h/=256,u-=8);for(p=p<n&&(i--,n+=1e9)),[i,n]};var s=i.performance||{},o=s.now||s.mozNow||s.msNow||s.oNow||s.webkitNow||function(){return new Date().getTime()}}).call(t,i(0),i(2))}])}); \ No newline at end of file +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("./assemblyscript"),function(){try{return require("assemblyscript")}catch(e){}}()):"function"==typeof define&&define.amd?define([,"assemblyscript"],n):"object"==typeof exports?exports.asc=n(require("./assemblyscript"),function(){try{return require("assemblyscript")}catch(e){}}()):e.asc=n(e[void 0],e._)}(window,function(e,n){return function(e){var n={};function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=15)}([function(e,n,t){var r,i;n.nextTick=function(e){setTimeout(e,0)},n.platform=n.arch=n.execPath=n.title="browser",n.pid=1,n.browser=!0,n.env={},n.argv=[],n.binding=function(e){throw new Error("No such module. (Possibly not yet loaded)")},i="/",n.cwd=function(){return i},n.chdir=function(e){r||(r=t(2)),i=r.resolve(e,i)},n.exit=n.kill=n.umask=n.dlopen=n.uptime=n.memoryUsage=n.uvCounters=function(){},n.features={}},function(e,n){var t;t=function(){return this}();try{t=t||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,n,t){(function(e){function t(e,n){for(var t=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),t++):t&&(e.splice(r,1),t--)}if(n)for(;t--;t)e.unshift("..");return e}var r=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,i=function(e){return r.exec(e).slice(1)};function o(e,n){if(e.filter)return e.filter(n);for(var t=[],r=0;r=-1&&!r;i--){var s=i>=0?arguments[i]:e.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(n=s+"/"+n,r="/"===s.charAt(0))}return n=t(o(n.split("/"),function(e){return!!e}),!r).join("/"),(r?"/":"")+n||"."},n.normalize=function(e){var r=n.isAbsolute(e),i="/"===s(e,-1);return(e=t(o(e.split("/"),function(e){return!!e}),!r).join("/"))||r||(e="."),e&&i&&(e+="/"),(r?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(o(e,function(e,n){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},n.relative=function(e,t){function r(e){for(var n=0;n=0&&""===e[t];t--);return n>t?[]:e.slice(n,t-n+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var i=r(e.split("/")),o=r(t.split("/")),s=Math.min(i.length,o.length),a=s,l=0;l>1,c=-7,f=t?i-1:0,h=t?-1:1,d=e[n+f];for(f+=h,o=d&(1<<-c)-1,d>>=-c,c+=a;c>0;o=256*o+e[n+f],f+=h,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=r;c>0;s=256*s+e[n+f],f+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=u}return(d?-1:1)*s*Math.pow(2,o-r)},n.write=function(e,n,t,r,i,o){var s,a,l,u=8*o-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,m=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(a=isNaN(n)?1:0,s=c):(s=Math.floor(Math.log(n)/Math.LN2),n*(l=Math.pow(2,-s))<1&&(s--,l*=2),(n+=s+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(s++,l/=2),s+f>=c?(a=0,s=c):s+f>=1?(a=(n*l-1)*Math.pow(2,i),s+=f):(a=n*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;e[t+d]=255&a,d+=p,a/=256,i-=8);for(s=s<0;e[t+d]=255&s,d+=p,s/=256,u-=8);e[t+d-p]|=128*m}},function(e,n,t){"use strict";n.byteLength=function(e){return 3*e.length/4-u(e)},n.toByteArray=function(e){var n,t,r,s,a,l=e.length;s=u(e),a=new o(3*l/4-s),t=s>0?l-4:l;var c=0;for(n=0;n>16&255,a[c++]=r>>8&255,a[c++]=255&r;2===s?(r=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,a[c++]=255&r):1===s&&(r=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,a[c++]=r>>8&255,a[c++]=255&r);return a},n.fromByteArray=function(e){for(var n,t=e.length,i=t%3,o="",s=[],a=0,l=t-i;al?l:a+16383));1===i?(n=e[t-1],o+=r[n>>2],o+=r[n<<4&63],o+="=="):2===i&&(n=(e[t-2]<<8)+e[t-1],o+=r[n>>10],o+=r[n>>4&63],o+=r[n<<2&63],o+="=");return s.push(o),s.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,l=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[n-2]?2:"="===e[n-1]?1:0}function c(e,n,t){for(var i,o,s=[],a=n;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(e,n,t){"use strict";(function(e){var r=t(12),i=t(11),o=t(10);function s(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,n){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function p(e,n){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var t=e.length;if(0===t)return 0;for(var r=!1;;)switch(n){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":case void 0:return D(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*t;case"hex":return t>>>1;case"base64":return V(e).length;default:if(r)return D(e).length;n=(""+n).toLowerCase(),r=!0}}function m(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function g(e,n,t,r,i){if(0===e.length)return-1;if("string"==typeof t?(r=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,isNaN(t)&&(t=i?0:e.length-1),t<0&&(t=e.length+t),t>=e.length){if(i)return-1;t=e.length-1}else if(t<0){if(!i)return-1;t=0}if("string"==typeof n&&(n=l.from(n,r)),l.isBuffer(n))return 0===n.length?-1:y(e,n,t,r,i);if("number"==typeof n)return n&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,n,t):Uint8Array.prototype.lastIndexOf.call(e,n,t):y(e,[n],t,r,i);throw new TypeError("val must be string, number or Buffer")}function y(e,n,t,r,i){var o,s=1,a=e.length,l=n.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||n.length<2)return-1;s=2,a/=2,l/=2,t/=2}function u(e,n){return 1===s?e[n]:e.readUInt16BE(n*s)}if(i){var c=-1;for(o=t;oa&&(t=a-l),o=t;o>=0;o--){for(var f=!0,h=0;hi&&(r=i):r=i;var o=n.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,i=t%256,o.push(i),o.push(r);return o}(n,e.length-t),e,t,r)}function A(e,n,t){return 0===n&&t===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(n,t))}function x(e,n,t){t=Math.min(e.length,t);for(var r=[],i=n;i239?4:u>223?3:u>191?2:1;if(i+f<=t)switch(f){case 1:u<128&&(c=u);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&u)<<6|63&o)>127&&(c=l);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(l=(15&u)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(c=l)}null===c?(c=65533,f=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),i+=f}return function(e){var n=e.length;if(n<=w)return String.fromCharCode.apply(String,e);var t="",r=0;for(;rthis.length)return"";if((void 0===t||t>this.length)&&(t=this.length),t<=0)return"";if((t>>>=0)<=(n>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return L(this,n,t);case"utf8":case"utf-8":return x(this,n,t);case"ascii":return S(this,n,t);case"latin1":case"binary":return I(this,n,t);case"base64":return A(this,n,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,n,t);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}.apply(this,arguments)},l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},l.prototype.compare=function(e,n,t,r,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===t&&(t=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),n<0||t>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&n>=t)return 0;if(r>=i)return-1;if(n>=t)return 1;if(n>>>=0,t>>>=0,r>>>=0,i>>>=0,this===e)return 0;for(var o=i-r,s=t-n,a=Math.min(o,s),u=this.slice(r,i),c=e.slice(n,t),f=0;fi)&&(t=i),e.length>0&&(t<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return b(this,e,n,t);case"utf8":case"utf-8":return v(this,e,n,t);case"ascii":return _(this,e,n,t);case"latin1":case"binary":return T(this,e,n,t);case"base64":return z(this,e,n,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,n,t);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var w=4096;function S(e,n,t){var r="";t=Math.min(e.length,t);for(var i=n;ir)&&(t=r);for(var i="",o=n;ot)throw new RangeError("Trying to access beyond buffer length")}function F(e,n,t,r,i,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>i||ne.length)throw new RangeError("Index out of range")}function C(e,n,t,r){n<0&&(n=65535+n+1);for(var i=0,o=Math.min(e.length-t,2);i>>8*(r?i:1-i)}function B(e,n,t,r){n<0&&(n=4294967295+n+1);for(var i=0,o=Math.min(e.length-t,4);i>>8*(r?i:3-i)&255}function N(e,n,t,r,i,o){if(t+r>e.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function R(e,n,t,r,o){return o||N(e,0,t,4),i.write(e,n,t,r,23,4),t+4}function O(e,n,t,r,o){return o||N(e,0,t,8),i.write(e,n,t,r,52,8),t+8}l.prototype.slice=function(e,n){var t,r=this.length;if(e=~~e,n=void 0===n?r:~~n,e<0?(e+=r)<0&&(e=0):e>r&&(e=r),n<0?(n+=r)<0&&(n=0):n>r&&(n=r),n0&&(i*=256);)r+=this[e+--n]*i;return r},l.prototype.readUInt8=function(e,n){return n||M(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,n){return n||M(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,n){return n||M(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,n){return n||M(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,n){return n||M(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,n,t){e|=0,n|=0,t||M(e,n,this.length);for(var r=this[e],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*n)),r},l.prototype.readIntBE=function(e,n,t){e|=0,n|=0,t||M(e,n,this.length);for(var r=n,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*n)),o},l.prototype.readInt8=function(e,n){return n||M(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,n){n||M(e,2,this.length);var t=this[e]|this[e+1]<<8;return 32768&t?4294901760|t:t},l.prototype.readInt16BE=function(e,n){n||M(e,2,this.length);var t=this[e+1]|this[e]<<8;return 32768&t?4294901760|t:t},l.prototype.readInt32LE=function(e,n){return n||M(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,n){return n||M(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,n){return n||M(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,n){return n||M(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,n){return n||M(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,n){return n||M(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,n,t,r){(e=+e,n|=0,t|=0,r)||F(this,e,n,t,Math.pow(2,8*t)-1,0);var i=1,o=0;for(this[n]=255&e;++o=0&&(o*=256);)this[n+i]=e/o&255;return n+t},l.prototype.writeUInt8=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[n]=255&e,n+1},l.prototype.writeUInt16LE=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):C(this,e,n,!0),n+2},l.prototype.writeUInt16BE=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):C(this,e,n,!1),n+2},l.prototype.writeUInt32LE=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[n+3]=e>>>24,this[n+2]=e>>>16,this[n+1]=e>>>8,this[n]=255&e):B(this,e,n,!0),n+4},l.prototype.writeUInt32BE=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):B(this,e,n,!1),n+4},l.prototype.writeIntLE=function(e,n,t,r){if(e=+e,n|=0,!r){var i=Math.pow(2,8*t-1);F(this,e,n,t,i-1,-i)}var o=0,s=1,a=0;for(this[n]=255&e;++o>0)-a&255;return n+t},l.prototype.writeIntBE=function(e,n,t,r){if(e=+e,n|=0,!r){var i=Math.pow(2,8*t-1);F(this,e,n,t,i-1,-i)}var o=t-1,s=1,a=0;for(this[n+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[n+o+1]&&(a=1),this[n+o]=(e/s>>0)-a&255;return n+t},l.prototype.writeInt8=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[n]=255&e,n+1},l.prototype.writeInt16LE=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):C(this,e,n,!0),n+2},l.prototype.writeInt16BE=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):C(this,e,n,!1),n+2},l.prototype.writeInt32LE=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8,this[n+2]=e>>>16,this[n+3]=e>>>24):B(this,e,n,!0),n+4},l.prototype.writeInt32BE=function(e,n,t){return e=+e,n|=0,t||F(this,e,n,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):B(this,e,n,!1),n+4},l.prototype.writeFloatLE=function(e,n,t){return R(this,e,n,!0,t)},l.prototype.writeFloatBE=function(e,n,t){return R(this,e,n,!1,t)},l.prototype.writeDoubleLE=function(e,n,t){return O(this,e,n,!0,t)},l.prototype.writeDoubleBE=function(e,n,t){return O(this,e,n,!1,t)},l.prototype.copy=function(e,n,t,r){if(t||(t=0),r||0===r||(r=this.length),n>=e.length&&(n=e.length),n||(n=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-n=0;--i)e[i+n]=this[i+t];else if(o<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,t=void 0===t?this.length:t>>>0,e||(e=0),"number"==typeof e)for(o=n;o55295&&t<57344){if(!i){if(t>56319){(n-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(n-=3)>-1&&o.push(239,191,189);continue}i=t;continue}if(t<56320){(n-=3)>-1&&o.push(239,191,189),i=t;continue}t=65536+(i-55296<<10|t-56320)}else i&&(n-=3)>-1&&o.push(239,191,189);if(i=null,t<128){if((n-=1)<0)break;o.push(t)}else if(t<2048){if((n-=2)<0)break;o.push(t>>6|192,63&t|128)}else if(t<65536){if((n-=3)<0)break;o.push(t>>12|224,t>>6&63|128,63&t|128)}else{if(!(t<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;o.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}}return o}function V(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(P,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function j(e,n,t,r){for(var i=0;i=n.length||i>=e.length);++i)n[i+t]=e[i];return i}}).call(this,t(1))},function(e,n,t){(function(e,r){const i=t(9),o=t(2),s=t(8);var a,l;try{a=t(7),l=!1;try{t(!function(){var e=new Error('Cannot find module "source-map-support"');throw e.code="MODULE_NOT_FOUND",e}()).install()}catch(e){}}catch(e){try{t(!function(){var e=new Error('Cannot find module "ts-node"');throw e.code="MODULE_NOT_FOUND",e}()).register({project:o.join(".","..","src","tsconfig.json")}),t(!function(){var e=new Error('Cannot find module "../src/glue/js"');throw e.code="MODULE_NOT_FOUND",e}()),a=t(!function(){var e=new Error('Cannot find module "../src"');throw e.code="MODULE_NOT_FOUND",e}()),l=!0}catch(e){a=t(6),l=!1}}function u(e){const r={};return Object.keys(n.options).forEach(e=>{const t=n.options[e];t.aliases&&((r.alias||(r.alias={}))[e]=t.aliases),void 0!==t.default&&((r.default||(r.default={}))[e]=t.default),"string"===t.type?(r.string||(r.string=[])).push(e):"boolean"===t.type&&(r.boolean||(r.boolean=[])).push(e)}),t(4)(e,r)}function c(e,n){for(var t,r=!1;null!=(t=a.nextDiagnostic(e));)n.write(a.formatDiagnostic(t,n.isTTY,!0)+s.EOL+s.EOL),a.isError(t)&&(r=!0);return r}function f(){return{readTime:0,readCount:0,writeTime:0,writeCount:0,parseTime:0,parseCount:0,compileTime:0,compileCount:0,emitTime:0,emitCount:0,validateTime:0,validateCount:0,optimizeTime:0,optimizeCount:0}}function h(n){const t=e.hrtime();n();const r=e.hrtime(t);return 1e9*r[0]+r[1]}function d(n,t){function r(e,n){return e?(e/1e6).toFixed(3)+" ms":"N/A"}(t||e.stdout).write(["I/O Read : "+r(n.readTime,n.readCount),"I/O Write : "+r(n.writeTime,n.writeCount),"Parse : "+r(n.parseTime,n.parseCount),"Compile : "+r(n.compileTime,n.compileCount),"Emit : "+r(n.emitTime,n.emitCount),"Validate : "+r(n.validateTime,n.validateCount),"Optimize : "+r(n.optimizeTime,n.optimizeCount)].join(s.EOL)+s.EOL)}n.isBundle=!0,n.isDev=l,n.version=n.isBundle?"0.5.0":t(!function(){var e=new Error('Cannot find module "../package.json"');throw e.code="MODULE_NOT_FOUND",e}()).version,n.options=t(5),n.sourceMapRoot="assemblyscript:///",n.libraryPrefix=a.LIBRARY_PREFIX,n.defaultOptimizeLevel=2,n.defaultShrinkLevel=1,n.libraryFiles=n.isBundle?Object({"(lib)/allocator/arena":"/////////////// A simple yet effective Arena Memory Allocator /////////////////\n\n// Provides a `reset_memory` function to reset the heap to its initial state. A\n// user has to make sure that there are no more references to cleared memory\n// afterwards. Always aligns to 8 bytes.\n\nconst ALIGN_LOG2: usize = 3;\nconst ALIGN_SIZE: usize = 1 << ALIGN_LOG2;\nconst ALIGN_MASK: usize = ALIGN_SIZE - 1;\n\nvar HEAP_OFFSET: usize = HEAP_BASE;\n\n@global\nexport function allocate_memory(size: usize): usize {\n if (!size) return 0;\n var ptr = HEAP_OFFSET;\n var off = (ptr + size + ALIGN_MASK) & ~ALIGN_MASK;\n var avail = current_memory() << 16;\n if (off > avail && grow_memory(\n max(\n (((off + 0xffff) & ~0xffff) - avail) >> 16, // minimum required pages\n avail >> 16 // at least double memory\n )\n ) < 0) unreachable(); // out of memory\n HEAP_OFFSET = off;\n return ptr;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n // nop\n}\n\n@global\nexport function reset_memory(): void {\n HEAP_OFFSET = HEAP_BASE;\n}\n","(lib)/allocator/emscripten":"///////////////////////// Emscripten Memory Allocator //////////////////////////\n\n// Uses Emscripten's exported _malloc and _free implementations, i.e., when\n// linking with Emscripten-compiled programs that already provide these.\n// Differs from 'system' in that their names are prefixed with an underscore.\n\ndeclare function _malloc(size: usize): usize;\ndeclare function _free(ptr: usize): void;\n\n@global\nexport function allocate_memory(size: usize): usize {\n return _malloc(size);\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n _free(ptr);\n}\n\n@global\nexport { reset_memory } from \"./none\";\n","(lib)/allocator/none":'export function allocate_memory(size: usize): usize {\n throw new Error("not supported");\n}\n\nexport function free_memory(ptr: usize): void {\n throw new Error("not supported");\n}\n\nexport function reset_memory(): void {\n throw new Error("not supported");\n}\n',"(lib)/allocator/system":'/////////////////////////// System Memory Allocator ////////////////////////////\n\n// Uses the environment\'s malloc and free implementations, i.e., when linking\n// with other C-like programs that already provide these.\n\ndeclare function malloc(size: usize): usize;\ndeclare function free(ptr: usize): void;\n\n@global\nexport function allocate_memory(size: usize): usize {\n return malloc(size);\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n free(ptr);\n}\n\n@global\nexport { reset_memory } from "./none";\n',"(lib)/allocator/tlsf":"////////////// TLSF (Two-Level Segregate Fit) Memory Allocator ////////////////\n\n// ╒══════════════ Block size interpretation (32-bit) ═════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─╫─┴─┴─┤\n// │ | FL │ SB = SL + AL │ ◄─ usize\n// └───────────────────────────────────────────────┴─────────╨─────┘\n// FL: first level, SL: second level, AL: alignment, SB: small block\n\nconst AL_BITS: u32 = sizeof() == sizeof() ? 2 : 3;\nconst AL_SIZE: usize = 1 << AL_BITS;\nconst AL_MASK: usize = AL_SIZE - 1;\n\nconst SL_BITS: u32 = 5;\nconst SL_SIZE: usize = 1 << SL_BITS;\n\nconst SB_BITS: usize = (SL_BITS + AL_BITS);\nconst SB_SIZE: usize = 1 << SB_BITS;\n\nconst FL_BITS: u32 = (sizeof() == sizeof()\n ? 30 // ^= up to 1GB per block\n : 32 // ^= up to 4GB per block\n) - SB_BITS;\n\n// ╒════════════════ Block structure layout (32-bit) ══════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┼─┤\n// │ size │L│F│ ◄─┐\n// ╞═══════════════════════════════════════════════════════════╧═╧═╡ │ ┐\n// │ if free: ◄ prev │ ◄─┤ usize\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ if free: next ► │ ◄─┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... unused free space >= 0 ... │ │ = 0\n// ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ │\n// │ if free: jump ▲ │ ◄─┘\n// └───────────────────────────────────────────────────────────────┘ MIN SIZE ┘\n// F: FREE, L: LEFT_FREE\n\n/** Tag indicating that this block is free. */\nconst FREE: usize = 1 << 0;\n/** Tag indicating that this block's left block is free. */\nconst LEFT_FREE: usize = 1 << 1;\n/** Mask to obtain all tags. */\nconst TAGS: usize = FREE | LEFT_FREE;\n\nassert(AL_BITS >= 2); // alignment must be large enough to store all tags\n\n/** Block structure. */\n@unmanaged\nclass Block {\n\n /** Info field holding this block's size and tags. */\n info: usize;\n\n /** End offset of the {@link Block#info} field. User data starts here. */\n static readonly INFO: usize = sizeof();\n\n /** Previous free block, if any. Only valid if free. */\n prev: Block | null;\n /** Next free block, if any. Only valid if free. */\n next: Block | null;\n\n /** Minimum size of a block, excluding {@link Block#info}. */\n static readonly MIN_SIZE: usize = 3 * sizeof(); // prev + next + jump\n\n /** Maximum size of a used block, excluding {@link Block#info}. */\n static readonly MAX_SIZE: usize = 1 << (FL_BITS + SB_BITS);\n\n /** Gets this block's left (free) block in memory. */\n get left(): Block {\n assert(this.info & LEFT_FREE); // must be free to contain a jump\n return assert(\n load(changetype(this) - sizeof())\n ); // can't be null\n }\n\n /** Gets this block's right block in memory. */\n get right(): Block {\n assert(this.info & ~TAGS); // can't skip beyond the tail block\n return assert(\n changetype(\n changetype(this) + Block.INFO + (this.info & ~TAGS)\n )\n ); // can't be null\n }\n}\n\n// ╒════════════════ Root structure layout (32-bit) ═══════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ┐\n// │ 0 | flMap S│ ◄────┐\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ slMap[0] S │ ◄─┐ │\n// ├───────────────────────────────────────────────────────────────┤ │ │\n// │ slMap[1] │ ◄─┤ │\n// ├───────────────────────────────────────────────────────────────┤ u32 │\n// │ ... │ ◄─┤ │\n// ├───────────────────────────────────────────────────────────────┤ │ │\n// │ slMap[22] P │ ◄─┘ │\n// ╞═══════════════════════════════════════════════════════════════╡ usize\n// │ head[0] │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ head[736] │ ◄────┤\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ tailRef │ ◄────┘\n// └───────────────────────────────────────────────────────────────┘ SIZE ┘\n// S: Small blocks map, P: Possibly padded if 64-bit\n\nassert((1 << SL_BITS) <= 32); // second level must fit into 32 bits\n\n/** Root structure. */\n@unmanaged\nclass Root {\n\n /** First level bitmap. */\n flMap: usize = 0;\n\n /** Start offset of second level maps. */\n private static readonly SL_START: usize = sizeof();\n\n // Using *one* SL map per *FL bit*\n\n /** Gets the second level map for the specified first level. */\n getSLMap(fl: usize): u32 {\n assert(fl < FL_BITS); // fl out of range\n return load(changetype(this) + fl * 4, Root.SL_START);\n }\n\n /** Sets the second level map for the specified first level. */\n setSLMap(fl: usize, value: u32): void {\n assert(fl < FL_BITS); // fl out of range\n store(changetype(this) + fl * 4, value, Root.SL_START);\n }\n\n /** End offset of second level maps. */\n private static readonly SL_END: usize = Root.SL_START + FL_BITS * 4;\n\n // Using *number bits per SL* heads per *FL bit*\n\n /** Start offset of FL/SL heads. */\n private static readonly HL_START: usize = (Root.SL_END + AL_MASK) & ~AL_MASK;\n\n /** Gets the head of the specified first and second level index. */\n getHead(fl: usize, sl: u32): Block | null {\n assert(fl < FL_BITS); // fl out of range\n assert(sl < SL_SIZE); // sl out of range\n return changetype(load(\n changetype(this) + (fl * SL_SIZE + sl) * sizeof()\n , Root.HL_START));\n }\n\n /** Sets the head of the specified first and second level index. */\n setHead(fl: usize, sl: u32, value: Block | null): void {\n assert(fl < FL_BITS); // fl out of range\n assert(sl < SL_SIZE); // sl out of range\n store(\n changetype(this) + (fl * SL_SIZE + sl) * sizeof()\n , changetype(value)\n , Root.HL_START);\n }\n\n /** End offset of FL/SL heads. */\n private static readonly HL_END: usize = (\n Root.HL_START + FL_BITS * SL_SIZE * sizeof()\n );\n\n get tailRef(): usize { return load(0, Root.HL_END); }\n set tailRef(value: usize) { store(0, value, Root.HL_END); }\n\n /** Total size of the {@link Root} structure. */\n static readonly SIZE: usize = Root.HL_END + sizeof();\n\n /** Inserts a previously used block back into the free list. */\n insert(block: Block): void {\n // check as much as possible here to prevent invalid free blocks\n assert(block); // cannot be null\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free\n var size: usize;\n assert(\n (size = block.info & ~TAGS) >= Block.MIN_SIZE && size < Block.MAX_SIZE\n ); // must be valid, not necessary to compute yet if noAssert=true\n\n var right: Block = assert(block.right); // can't be null\n var rightInfo = right.info;\n\n // merge with right block if also free\n if (rightInfo & FREE) {\n this.remove(right);\n block.info = (blockInfo += Block.INFO + (rightInfo & ~TAGS));\n right = block.right;\n rightInfo = right.info;\n // jump is set below\n }\n\n // merge with left block if also free\n if (blockInfo & LEFT_FREE) {\n var left: Block = assert(block.left); // can't be null\n var leftInfo = left.info;\n assert(leftInfo & FREE); // must be free according to tags\n this.remove(left);\n left.info = (leftInfo += Block.INFO + (blockInfo & ~TAGS));\n block = left;\n blockInfo = leftInfo;\n // jump is set below\n }\n\n right.info = rightInfo | LEFT_FREE;\n this.setJump(block, right);\n // right is no longer used now, hence rightInfo is not synced\n\n size = blockInfo & ~TAGS;\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n\n // mapping_insert\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n\n // perform insertion\n var head = this.getHead(fl, sl);\n block.prev = null;\n block.next = head;\n if (head) head.prev = block;\n this.setHead(fl, sl, block);\n\n // update first and second level maps\n this.flMap |= (1 << fl);\n this.setSLMap(fl, this.getSLMap(fl) | (1 << sl));\n }\n\n /**\n * Removes a free block from FL/SL maps. Does not alter left/jump because it\n * is likely that splitting is performed afterwards, invalidating any changes\n * again.\n */\n private remove(block: Block): void {\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free\n var size = blockInfo & ~TAGS;\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n\n // mapping_insert\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n\n // link previous and next free block\n var prev = block.prev;\n var next = block.next;\n if (prev) prev.next = next;\n if (next) next.prev = prev;\n\n // update head if we are removing it\n if (block == this.getHead(fl, sl)) {\n this.setHead(fl, sl, next);\n\n // clear second level map if head is empty now\n if (!next) {\n var slMap = this.getSLMap(fl);\n this.setSLMap(fl, slMap &= ~(1 << sl));\n\n // clear first level map if second level is empty now\n if (!slMap) this.flMap &= ~(1 << fl);\n }\n }\n }\n\n /** Searches for a free block of at least the specified size. */\n search(size: usize): Block | null {\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE);\n\n // mapping_search\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n // (*) size += (1 << (fls(size) - SL_BITS)) - 1;\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n // (*) instead of rounding up, use next second level list for better fit\n if (sl < SL_SIZE - 1) ++sl;\n else ++fl, sl = 0;\n }\n\n // search second level\n var slMap = this.getSLMap(fl) & (~0 << sl);\n var head: Block | null;\n if (!slMap) {\n // search next larger first level\n var flMap = this.flMap & (~0 << (fl + 1));\n if (!flMap) {\n head = null;\n } else {\n fl = ffs(flMap);\n slMap = assert(this.getSLMap(fl)); // can't be zero if fl points here\n head = this.getHead(fl, ffs(slMap));\n }\n } else {\n head = this.getHead(fl, ffs(slMap));\n }\n return head;\n }\n\n /** Links a free left with its right block in memory. */\n private setJump(left: Block, right: Block): void {\n assert(left.info & FREE); // must be free\n assert(left.right == right); // right block must match\n assert(right.info & LEFT_FREE); // right block must be tagged as LEFT_FREE\n store(\n changetype(right) - sizeof()\n , left); // last word in left block's (free) data region\n }\n\n /**\n * Uses the specified free block, removing it from internal maps and\n * splitting it if possible, and returns its data pointer.\n */\n use(block: Block, size: usize): usize {\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free so we can use it\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n assert(!(size & AL_MASK)); // size must be aligned so the new block is\n\n this.remove(block);\n\n // split if the block can hold another MIN_SIZE block\n var remaining = (blockInfo & ~TAGS) - size;\n if (remaining >= Block.INFO + Block.MIN_SIZE) {\n block.info = size | (blockInfo & LEFT_FREE); // also discards FREE\n\n var spare = changetype(\n changetype(block) + Block.INFO + size\n );\n spare.info = (remaining - Block.INFO) | FREE; // not LEFT_FREE\n this.insert(spare); // also sets jump\n\n // otherwise tag block as no longer FREE and right as no longer LEFT_FREE\n } else {\n block.info = blockInfo & ~FREE;\n var right: Block = assert(block.right); // can't be null (tail)\n right.info &= ~LEFT_FREE;\n }\n\n return changetype(block) + Block.INFO;\n }\n\n /** Adds more memory to the pool. */\n addMemory(start: usize, end: usize): bool {\n assert(start <= end);\n assert(!(start & AL_MASK)); // must be aligned\n assert(!(end & AL_MASK)); // must be aligned\n\n var tailRef = this.tailRef;\n var tailInfo: usize = 0;\n if (tailRef) {\n assert(start >= tailRef + sizeof()); // starts after tail\n\n // merge with current tail if adjacent\n if (start - Block.INFO == tailRef) {\n start -= Block.INFO;\n tailInfo = changetype(tailRef).info;\n }\n\n } else {\n assert(start >= changetype(this) + Root.SIZE); // starts after root\n }\n\n // check if size is large enough for a free block and the tail block\n var size = end - start;\n if (size < Block.INFO + Block.MIN_SIZE + Block.INFO) {\n return false;\n }\n\n // left size is total minus its own and the zero-length tail's header\n var leftSize = size - 2 * Block.INFO;\n var left = changetype(start);\n left.info = leftSize | FREE | (tailInfo & LEFT_FREE);\n left.prev = null;\n left.next = null;\n\n // tail is a zero-length used block\n var tail = changetype(start + size - Block.INFO);\n tail.info = 0 | LEFT_FREE;\n this.tailRef = changetype(tail);\n\n this.insert(left); // also merges with free left before tail / sets jump\n\n return true;\n }\n}\n\n/** Determines the first (LSB to MSB) set bit's index of a word. */\nfunction ffs(word: T): T {\n assert(word != 0); // word cannot be 0\n return ctz(word); // differs from ffs only for 0\n}\n\n/** Determines the last (LSB to MSB) set bit's index of a word. */\nfunction fls(word: T): T {\n assert(word != 0); // word cannot be 0\n const inv: T = (sizeof() << 3) - 1;\n return inv - clz(word);\n}\n\n/** Reference to the initialized {@link Root} structure, once initialized. */\nvar ROOT: Root = changetype(0);\n\n// External interface\n\n/** Allocates a chunk of memory. */\n@global\nexport function allocate_memory(size: usize): usize {\n\n // initialize if necessary\n var root = ROOT;\n if (!root) {\n var rootOffset = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n ROOT = root = changetype(rootOffset);\n root.tailRef = 0;\n root.flMap = 0;\n for (var fl: usize = 0; fl < FL_BITS; ++fl) {\n root.setSLMap(fl, 0);\n for (var sl: u32 = 0; sl < SL_SIZE; ++sl) {\n root.setHead(fl, sl, null);\n }\n }\n root.addMemory(rootOffset + Root.SIZE, current_memory() << 16);\n }\n\n // search for a suitable block\n var data: usize = 0;\n if (size && size < Block.MAX_SIZE) {\n size = max((size + AL_MASK) & ~AL_MASK, Block.MIN_SIZE);\n\n var block = root.search(size);\n if (!block) {\n\n // request more memory\n var pagesBefore = current_memory();\n var pagesNeeded = ((size + 0xffff) & ~0xffff) >>> 16;\n var pagesWanted = max(pagesBefore, pagesNeeded); // double memory\n if (grow_memory(pagesWanted) < 0) {\n if (grow_memory(pagesNeeded) < 0) {\n unreachable(); // out of memory\n }\n }\n var pagesAfter = current_memory();\n root.addMemory(pagesBefore << 16, pagesAfter << 16);\n block = assert(root.search(size)); // must be found now\n }\n\n assert((block.info & ~TAGS) >= size);\n data = root.use(block, size);\n }\n\n return data;\n}\n\n/** Frees the chunk of memory at the specified address. */\n@global\nexport function free_memory(data: usize): void {\n if (data) {\n var root = ROOT;\n if (root) {\n var block = changetype(data - Block.INFO);\n var blockInfo = block.info;\n assert(!(blockInfo & FREE)); // must be used\n block.info = blockInfo | FREE;\n root.insert(changetype(data - Block.INFO));\n }\n }\n}\n\nexport { reset_memory } from \"./none\";\n","(lib)/array":'export class Array {\n\n private __memory: usize;\n private __capacity: i32; // capped to [0, 0x7fffffff]\n private __length: i32; // capped to [0, __capacity]\n\n private __grow(newCapacity: i32): void {\n assert(newCapacity > this.__capacity);\n var newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\n free_memory(this.__memory);\n }\n this.__memory = newMemory;\n this.__capacity = newCapacity;\n }\n\n constructor(capacity: i32 = 0) {\n if (capacity < 0) {\n throw new RangeError("Invalid array length");\n }\n this.__memory = capacity\n ? allocate_memory(capacity * sizeof())\n : 0;\n this.__capacity = this.__length = capacity;\n }\n\n get length(): i32 {\n return this.__length;\n }\n\n set length(length: i32) {\n if (length < 0) {\n throw new RangeError("Invalid array length");\n }\n if (length > this.__capacity) {\n this.__grow(max(length, this.__capacity << 1));\n }\n this.__length = length;\n }\n\n @operator("[]")\n private __get(index: i32): T {\n if (index >= this.__capacity) {\n throw new Error("Index out of bounds"); // return changetype(0) ?\n }\n return load(this.__memory + index * sizeof());\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n if (index < 0) {\n throw new Error("Index out of bounds");\n }\n if (index >= this.__capacity) {\n this.__grow(max(index + 1, this.__capacity << 1));\n }\n store(this.__memory + index * sizeof(), value);\n }\n\n indexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n if (fromIndex < 0) {\n fromIndex = this.__length + fromIndex;\n }\n while (fromIndex < this.__length) {\n if (load(this.__memory + fromIndex * sizeof()) == searchElement) {\n return fromIndex;\n }\n ++fromIndex;\n }\n return -1;\n }\n\n lastIndexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n if (fromIndex < 0) {\n fromIndex = this.__length + fromIndex;\n } else if (fromIndex >= this.__length) {\n fromIndex = this.__length - 1;\n }\n while (fromIndex >= 0) {\n if (load(this.__memory + fromIndex * sizeof()) == searchElement) {\n return fromIndex;\n }\n --fromIndex;\n }\n return -1;\n }\n\n push(element: T): i32 {\n if (this.__length == this.__capacity) {\n this.__grow(this.__capacity ? this.__capacity << 1 : 1);\n }\n store(this.__memory + this.__length * sizeof(), element);\n return ++this.__length;\n }\n\n pop(): T {\n if (this.__length < 1) {\n throw new RangeError("Array is empty"); // return changetype(0) ?\n }\n return load(this.__memory + --this.__length * sizeof());\n }\n\n shift(): T {\n if (this.__length < 1) {\n throw new RangeError("Array is empty"); // return changetype(0) ?\n }\n var element = load(this.__memory);\n move_memory(\n this.__memory,\n this.__memory + sizeof(),\n (this.__capacity - 1) * sizeof()\n );\n set_memory(\n this.__memory + (this.__capacity - 1) * sizeof(),\n 0,\n sizeof()\n );\n --this.__length;\n return element;\n }\n\n unshift(element: T): i32 {\n var oldCapacity = this.__capacity;\n if (this.__length == oldCapacity) {\n // inlined __grow (avoids moving twice)\n var newCapacity: i32 = oldCapacity ? oldCapacity << 1 : 1;\n assert(newCapacity > this.__capacity);\n var newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(\n newMemory + sizeof(),\n this.__memory,\n oldCapacity * sizeof()\n );\n free_memory(this.__memory);\n }\n this.__memory = newMemory;\n this.__capacity = newCapacity;\n } else {\n move_memory(\n this.__memory + sizeof(),\n this.__memory,\n oldCapacity * sizeof()\n );\n }\n store(this.__memory, element);\n return ++this.__length;\n }\n\n slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Array {\n if (begin < 0) {\n begin = this.__length + begin;\n if (begin < 0) {\n begin = 0;\n }\n } else if (begin > this.__length) {\n begin = this.__length;\n }\n if (end < 0) {\n end = this.__length + end;\n } else if (end > this.__length) {\n end = this.__length;\n }\n if (end < begin) {\n end = begin;\n }\n var capacity = end - begin;\n assert(capacity >= 0);\n var sliced = new Array(capacity);\n if (capacity) {\n move_memory(\n sliced.__memory,\n this.__memory + begin * sizeof(),\n capacity * sizeof()\n );\n }\n return sliced;\n }\n\n splice(start: i32, deleteCount: i32 = i32.MAX_VALUE): void {\n if (deleteCount < 1) {\n return;\n }\n if (start < 0) {\n start = this.__length + start;\n if (start < 0) {\n start = 0;\n } else if (start >= this.__length) {\n return;\n }\n } else if (start >= this.__length) {\n return;\n }\n deleteCount = min(deleteCount, this.__length - start);\n move_memory(\n this.__memory + start * sizeof(),\n this.__memory + (start + deleteCount) * sizeof(),\n deleteCount * sizeof()\n );\n this.__length -= deleteCount;\n }\n\n reverse(): Array {\n for (var front: usize = 0, back: usize = this.__length - 1; front < back; ++front, --back) {\n var temp = load(this.__memory + front * sizeof());\n store(this.__memory + front * sizeof(), load(this.__memory + back * sizeof()));\n store(this.__memory + back * sizeof(), temp);\n }\n return this;\n }\n}\n\n@unmanaged\nexport class CArray {\n\n private constructor() {}\n\n @operator("[]")\n private __get(index: i32): T {\n if (index < 0) {\n throw new RangeError("Index out of range");\n }\n return load(changetype(this) + index * sizeof());\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n if (index < 0) {\n throw new RangeError("Index out of range");\n }\n store(changetype(this) + index * sizeof(), value);\n }\n}\n',"(lib)/builtins":"@builtin\nexport declare const NaN: f64; // | f32\n\n@builtin\nexport declare const Infinity: f64; // | f32\n\n@builtin\nexport declare function isNaN(value: T): bool;\n\n@builtin\nexport declare function isFinite(value: T): bool;\n\n@builtin\nexport declare function clz(value: T): T;\n\n@builtin\nexport declare function ctz(value: T): T;\n\n@builtin\nexport declare function popcnt(value: T): T;\n\n@builtin\nexport declare function rotl(value: T, shift: T): T;\n\n@builtin\nexport declare function rotr(value: T, shift: T): T;\n\n@builtin\nexport declare function abs(value: T): T;\n\n@builtin\nexport declare function max(left: T, right: T): T;\n\n@builtin\nexport declare function min(left: T, right: T): T;\n\n@builtin\nexport declare function ceil(value: T): T;\n\n@builtin\nexport declare function floor(value: T): T;\n\n@builtin\nexport declare function copysign(left: T, right: T): T;\n\n@builtin\nexport declare function nearest(left: T, right: T): T;\n\n@builtin\nexport declare function reinterpret(value: void): T;\n\n@builtin\nexport declare function sqrt(value: T): T;\n\n@builtin\nexport declare function trunc(value: T): T;\n\n@builtin\nexport declare function load(offset: usize, constantOffset?: usize): T;\n\n@builtin\nexport declare function store(offset: usize, value: void, constantOffset?: usize): T;\n\n@builtin\nexport declare function sizeof(): usize;\n\n@builtin\nexport declare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n\n@builtin\nexport declare function unreachable(): void;\n\n@builtin\nexport declare function current_memory(): i32;\n\n@builtin\nexport declare function grow_memory(pages: i32): i32;\n\n// @builtin\n// export declare function move_memory(dest: usize, src: usize: n: usize): void;\n\n// @builtin\n// export declare function set_memory(dest: usize, value: u32, n: usize): void;\n\n@builtin\nexport declare function changetype(value: void): T;\n\n@builtin\nexport declare function assert(isTrueish: T, message?: string): T;\n\n@builtin\nexport declare function abort(\n message?: string | null,\n fileName?: string | null,\n lineNumber?: u32,\n columnNumber?: u32\n): void;\n\n@builtin\ndeclare function i8(value: void): i8;\nnamespace i8 {\n export const MIN_VALUE: i8 = -128;\n export const MAX_VALUE: i8 = 127;\n}\nexport { i8 };\n\n@builtin\ndeclare function i16(value: void): i16;\nnamespace i16 {\n export const MIN_VALUE: i16 = -32768;\n export const MAX_VALUE: i16 = 32767;\n}\nexport { i16 };\n\n@builtin\ndeclare function i32(value: void): i32;\nnamespace i32 {\n export const MIN_VALUE: i32 = -2147483648;\n export const MAX_VALUE: i32 = 2147483647;\n}\nexport { i32 };\n\n@builtin\ndeclare function i64(value: void): i64;\nnamespace i64 {\n export const MIN_VALUE: i64 = -9223372036854775808;\n export const MAX_VALUE: i64 = 9223372036854775807;\n}\nexport { i64 };\n\n@builtin\ndeclare function isize(value: void): isize;\nnamespace isize {\n export const MIN_VALUE: isize = sizeof() == sizeof()\n ? -2147483648\n : -9223372036854775808;\n export const MAX_VALUE: isize = sizeof() == sizeof()\n ? 2147483647\n : 9223372036854775807;\n}\nexport { isize };\n\n@builtin\ndeclare function u8(value: void): u8;\nnamespace u8 {\n export const MIN_VALUE: u8 = 0;\n export const MAX_VALUE: u8 = 255;\n}\nexport { u8 };\n\n@builtin\ndeclare function u16(value: void): u16;\nnamespace u16 {\n export const MIN_VALUE: u16 = 0;\n export const MAX_VALUE: u16 = 65535;\n}\nexport { u16 };\n\n@builtin\ndeclare function u32(value: void): u32;\nnamespace u32 {\n export const MIN_VALUE: u32 = 0;\n export const MAX_VALUE: u32 = 4294967295;\n}\nexport { u32 };\n\n@builtin\ndeclare function u64(value: void): u64;\nnamespace u64 {\n export const MIN_VALUE: u64 = 0;\n export const MAX_VALUE: u64 = 18446744073709551615;\n}\nexport { u64 };\n\n@builtin\ndeclare function usize(value: void): usize;\nnamespace usize {\n export const MIN_VALUE: usize = 0;\n export const MAX_VALUE: usize = sizeof() == sizeof()\n ? 4294967295\n : 18446744073709551615;\n}\nexport { usize };\n\n@builtin\ndeclare function bool(value: void): bool;\nnamespace bool {\n export const MIN_VALUE: bool = false;\n export const MAX_VALUE: bool = true;\n}\nexport { bool };\n\n@builtin\ndeclare function f32(value: void): f32;\nnamespace f32 {\n export const MIN_VALUE: f32 = -3.40282347e+38;\n export const MAX_VALUE: f32 = 3.40282347e+38;\n export const MIN_SAFE_INTEGER: f32 = -16777215;\n export const MAX_SAFE_INTEGER: f32 = 16777215;\n export const EPSILON: f32 = 1.19209290e-07;\n}\nexport { f32 };\n\n@builtin\ndeclare function f64(value: void): f64;\nnamespace f64 {\n export const MIN_VALUE: f64 = -1.7976931348623157e+308;\n export const MAX_VALUE: f64 = 1.7976931348623157e+308;\n export const MIN_SAFE_INTEGER: f64 = -9007199254740991;\n export const MAX_SAFE_INTEGER: f64 = 9007199254740991;\n export const EPSILON: f64 = 2.2204460492503131e-16;\n}\nexport{ f64 };\n\n@builtin\nexport declare const HEAP_BASE: usize;\n\n@builtin\nexport declare function start(): void;\n","(lib)/error":'export class Error {\n\n name: string = "Error";\n message: string;\n stack: string = ""; // TODO\n\n constructor(message: string = "") {\n this.message = message;\n }\n}\n\nexport class RangeError extends Error {\n name: string = "RangeError";\n}\n\nexport class TypeError extends Error {\n name: string = "TypeError";\n}\n',"(lib)/iterator":"// export abstract class Iterator {\n// abstract get done(): bool;\n// abstract next(): T;\n// }\n","(lib)/map":"export class Map {\n\n private __keys: K[] = [];\n private __values: V[] = [];\n\n // FIXME: not a proper map implementation, just a filler\n\n get size(): i32 {\n return this.__keys.length;\n }\n\n get(key: K): V | null {\n var keys = this.__keys;\n for (var i = 0, k = keys.length; i < k; ++i) {\n if (keys[i] == key) {\n return this.__values[i];\n }\n }\n return null;\n }\n\n has(key: K): bool {\n var keys = this.__keys;\n for (var i = 0, k = keys.length; i < k; ++i) {\n if (keys[i] == key) {\n return true;\n }\n }\n return false;\n }\n\n set(key: K, value: V): void {\n this.__keys.push(key);\n this.__values.push(value);\n }\n\n clear(): void {\n this.__keys.length = 0;\n this.__values.length = 0;\n }\n}\n","(lib)/memory":"function copy_memory(dest: usize, src: usize, n: usize): void {\n // based on musl's implementation of memcpy\n // not a future instruction and sufficiently covered by the upcoming move_memory intrinsic\n\n var w: u32, x: u32;\n\n // copy 1 byte each until src is aligned to 4 bytes\n while (n && (src & 3)) {\n store(dest++, load(src++));\n n--;\n }\n\n // if dst is aligned to 4 bytes as well, copy 4 bytes each\n if ((dest & 3) == 0) {\n while (n >= 16) {\n store(dest , load(src ));\n store(dest + 4, load(src + 4));\n store(dest + 8, load(src + 8));\n store(dest + 12, load(src + 12));\n src += 16; dest += 16; n -= 16;\n }\n if (n & 8) {\n store(dest , load(src ));\n store(dest + 4, load(src + 4));\n dest += 8; src += 8;\n }\n if (n & 4) {\n store(dest, load(src));\n dest += 4; src += 4;\n }\n if (n & 2) { // drop to 2 bytes each\n store(dest, load(src));\n dest += 2; src += 2;\n }\n if (n & 1) { // drop to 1 byte\n store(dest++, load(src++));\n }\n return;\n }\n\n // if dst is not aligned to 4 bytes, use alternating shifts to copy 4 bytes each\n // doing shifts if faster when copying enough bytes (here: 32 or more)\n if (n >= 32) {\n switch (dest & 3) {\n // known to be != 0\n case 1:\n w = load(src);\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n n -= 3;\n while (n >= 17) {\n x = load(src + 1);\n store(dest, w >> 24 | x << 8);\n w = load(src + 5);\n store(dest + 4, x >> 24 | w << 8);\n x = load(src + 9);\n store(dest + 8, w >> 24 | x << 8);\n w = load(src + 13);\n store(dest + 12, x >> 24 | w << 8);\n src += 16; dest += 16; n -= 16;\n }\n break;\n case 2:\n w = load(src);\n store(dest++, load(src++));\n store(dest++, load(src++));\n n -= 2;\n while (n >= 18) {\n x = load(src + 2);\n store(dest, w >> 16 | x << 16);\n w = load(src + 6);\n store(dest + 4, x >> 16 | w << 16);\n x = load(src + 10);\n store(dest + 8, w >> 16 | x << 16);\n w = load(src + 14);\n store(dest + 12, x >> 16 | w << 16);\n src += 16; dest += 16; n -= 16;\n }\n break;\n case 3:\n w = load(src);\n store(dest++, load(src++));\n n -= 1;\n while (n >= 19) {\n x = load(src + 3);\n store(dest, w >> 8 | x << 24);\n w = load(src + 7);\n store(dest + 4, x >> 8 | w << 24);\n x = load(src + 11);\n store(dest + 8, w >> 8 | x << 24);\n w = load(src + 15);\n store(dest + 12, x >> 8 | w << 24);\n src += 16; dest += 16; n -= 16;\n }\n break;\n }\n }\n\n // copy remaining bytes one by one\n if (n & 16) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 8) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 4) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 2) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 1) {\n store(dest++, load(src++));\n }\n}\n\nexport function move_memory(dest: usize, src: usize, n: usize): void {\n // based on musl's implementation of memmove\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\n\n if (dest == src) return;\n if (src + n <= dest || dest + n <= src) {\n copy_memory(dest, src, n);\n return;\n }\n if (dest < src) {\n if ((src & 7) == (dest & 7)) {\n while (dest & 7) {\n if (!n) return;\n --n;\n store(dest++, load(src++));\n }\n while (n >= 8) {\n store(dest, load(src));\n n -= 8;\n dest += 8;\n src += 8;\n }\n }\n while (n) {\n store(dest++, load(src++));\n --n;\n }\n } else {\n if ((src & 7) == (dest & 7)) {\n while ((dest + n) & 7) {\n if (!n) return;\n store(dest + --n, load(src + n));\n }\n while (n >= 8) {\n n -= 8;\n store(dest + n, load(src + n));\n }\n }\n while (n) {\n store(dest + --n, load(src + n));\n }\n }\n}\n\nexport function set_memory(dest: usize, c: u8, n: usize): void {\n // based on musl's implementation of memset\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\n\n // fill head and tail with minimal branching\n if (!n) return;\n store(dest, c);\n store(dest + n - 1, c);\n if (n <= 2) return;\n\n store(dest + 1, c);\n store(dest + 2, c);\n store(dest + n - 2, c);\n store(dest + n - 3, c);\n if (n <= 6) return;\n store(dest + 3, c);\n store(dest + n - 4, c);\n if (n <= 8) return;\n\n // advance pointer to align it at 4-byte boundary\n var k: usize = -dest & 3;\n dest += k;\n n -= k;\n n &= -4;\n\n var c32: u32 = -1 / 255 * c;\n\n // fill head/tail up to 28 bytes each in preparation\n store(dest, c32);\n store(dest + n - 4, c32);\n if (n <= 8) return;\n store(dest + 4, c32);\n store(dest + 8, c32);\n store(dest + n - 12, c32);\n store(dest + n - 8, c32);\n if (n <= 24) return;\n store(dest + 12, c32);\n store(dest + 16, c32);\n store(dest + 20, c32);\n store(dest + 24, c32);\n store(dest + n - 28, c32);\n store(dest + n - 24, c32);\n store(dest + n - 20, c32);\n store(dest + n - 16, c32);\n\n // align to a multiple of 8\n k = 24 + (dest & 4);\n dest += k;\n n -= k;\n\n // copy 32 bytes each\n var c64: u64 = c32 | (c32 << 32);\n while (n >= 32) {\n store(dest, c64);\n store(dest + 8, c64);\n store(dest + 16, c64);\n store(dest + 24, c64);\n n -= 32;\n dest += 32;\n }\n}\n\nexport function compare_memory(vl: usize, vr: usize, n: usize): i32 {\n // based on musl's implementation of memcmp\n // provided because there's no proposed alternative\n if (vl == vr) return 0;\n while (n && load(vl) == load(vr)) {\n n--;\n vl++;\n vr++;\n }\n return n ? load(vl) - load(vr) : 0;\n}\n","(lib)/polyfills":"export function bswap(value: T): T {\n assert(sizeof() == 1 || sizeof() == 2 || sizeof() == 4 || sizeof() == 8);\n\n if (sizeof() == 2) {\n return bswap16(value);\n } else if (sizeof() == 4) {\n return (\n rotl(value & 0xFF00FF00, 8) |\n rotr(value & 0x00FF00FF, 8)\n );\n } else if (sizeof() == 8) {\n var a: u64 = (value >> 8) & 0x00FF00FF00FF00FF;\n var b: u64 = (value & 0x00FF00FF00FF00FF) << 8;\n var v: u64 = a | b;\n\n a = (v >> 16) & 0x0000FFFF0000FFFF;\n b = (v & 0x0000FFFF0000FFFF) << 16;\n\n return rotr(a | b, 32);\n }\n return value;\n}\n\nexport function bswap16(value: T): T {\n assert(sizeof() == 1 || sizeof() == 2 || sizeof() == 4);\n\n if (sizeof() == 2 || sizeof() == 4) {\n return (((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000));\n }\n return value;\n}\n","(lib)/regexp":'export class RegExp {\n\n // @binding(CALL_NEW, [ STRING, STRING], OBJECT_HANDLE)\n constructor(pattern: string, flags: string = "") { throw new Error("unreachable"); }\n\n // @binding(CALL_THIS, [ STRING ], PASS_THRU)\n test(search: string): bool { throw new Error("unreachable"); }\n\n // @binding(CALL_THIS, [], STRING)\n toString(): string { throw new Error("unreachable"); }\n\n}\n',"(lib)/set":'// const prime1: u32 = 73;\n// const prime2: u32 = 5009;\n\nexport class Set {\n\n private __memory: usize;\n private __capacity: u32;\n private __size: u32;\n\n constructor() {\n this.__memory = 0;\n this.__capacity = this.__size = 0;\n }\n\n get size(): i32 {\n return this.__size;\n }\n\n // FIXME: not a proper set implementation, just a filler\n\n has(value: T): bool {\n assert(this != null);\n\n for (var index: usize = 0, limit: usize = this.__size; index < limit; ++index) {\n if (load(this.__memory + index * sizeof()) == value) {\n return true;\n }\n }\n return false;\n }\n\n add(value: T): Set {\n assert(this != null);\n\n if (this.__size >= this.__capacity) {\n var newCapacity = max(this.__capacity << 1, 8);\n var newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\n free_memory(this.__memory);\n }\n this.__capacity = newCapacity;\n this.__memory = newMemory;\n }\n store(this.__memory + this.__size * sizeof(), value);\n ++this.__size;\n return this;\n }\n\n delete(value: T): bool {\n assert(this != null);\n\n for (var index: usize = 0, limit: usize = this.__size; index < limit; ++index) {\n if (load(this.__memory + index * sizeof()) == value) {\n if (index + 1 < limit) {\n move_memory(\n this.__memory + index * sizeof(),\n this.__memory + (index + 1) * sizeof(),\n limit - index - 1\n );\n }\n --this.__size;\n return true;\n }\n }\n return false;\n }\n\n clear(): void {\n assert(this != null);\n\n this.__size = 0;\n }\n\n // TODO: think about iterators\n}\n\n// class SetIterator extends Iterator {\n\n// get done(): bool {\n// throw new Error("not implemented");\n// }\n\n// next(): T {\n// throw new Error("not implemented");\n// }\n// }\n',"(lib)/string":'// singleton empty string\nconst EMPTY: String = changetype("");\n\n// number of bytes preceeding string data\nconst HEAD: usize = 4;\n\nfunction allocate(length: i32): String {\n assert(length > 0); // 0 -> EMPTY\n var ptr = allocate_memory(HEAD + (length << 1));\n store(ptr, length);\n return changetype(ptr);\n}\n\nexport class String {\n\n readonly length: i32; // capped to [0, 0x7fffffff]\n\n @operator("[]")\n charAt(pos: i32): String {\n assert(this != null);\n\n if (pos >= this.length) {\n return EMPTY;\n }\n\n var out = allocate(1);\n store(\n changetype(out),\n load(\n changetype(this) + (pos << 1),\n HEAD\n ),\n HEAD\n );\n return out;\n }\n\n charCodeAt(pos: i32): i32 {\n assert(this != null);\n if (pos >= this.length) {\n return -1; // (NaN)\n }\n return load(\n changetype(this) + (pos << 1),\n HEAD\n );\n }\n\n codePointAt(pos: i32): i32 {\n assert(this != null);\n if (pos >= this.length) {\n return -1; // (undefined)\n }\n var first = load(\n changetype(this) + (pos << 1),\n HEAD\n );\n if (first < 0xD800 || first > 0xDBFF || pos + 1 == this.length) {\n return first;\n }\n var second = load(\n changetype(this) + ((pos + 1) << 1),\n HEAD\n );\n if (second < 0xDC00 || second > 0xDFFF) {\n return first;\n }\n return ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n }\n\n @operator("+")\n private static __concat(left: String, right: String): String {\n if (left == null) {\n left = changetype("null");\n }\n return left.concat(right);\n }\n\n concat(other: String): String {\n assert(this != null);\n if (other == null) {\n other = changetype("null");\n }\n var thisLen: isize = this.length;\n var otherLen: isize = other.length;\n var outLen: usize = thisLen + otherLen;\n if (outLen == 0) {\n return EMPTY;\n }\n var out = allocate(outLen);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD,\n thisLen << 1\n );\n move_memory(\n changetype(out) + HEAD + (thisLen << 1),\n changetype(other) + HEAD,\n otherLen << 1\n );\n return out;\n }\n\n endsWith(searchString: String, endPosition: i32 = 0x7fffffff): bool {\n assert(this != null);\n if (searchString == null) {\n return false;\n }\n var end: isize = min(max(endPosition, 0), this.length);\n var searchLength: isize = searchString.length;\n var start: isize = end - searchLength;\n if (start < 0) {\n return false;\n }\n return !compare_memory(\n changetype(this) + HEAD + (start << 1),\n changetype(searchString) + HEAD,\n searchLength << 1\n );\n }\n\n @operator("==")\n private static __eq(left: String, right: String): bool {\n if (left == null) {\n return right == null;\n } else if (right == null) {\n return false;\n }\n var leftLength = left.length;\n if (leftLength != right.length) {\n return false;\n }\n return !compare_memory(\n changetype(left) + HEAD,\n changetype(right) + HEAD,\n (leftLength << 1)\n );\n }\n\n includes(searchString: String, position: i32 = 0): bool {\n return this.indexOf(searchString, position) != -1;\n }\n\n indexOf(searchString: String, position: i32 = 0): i32 {\n assert(this != null);\n if (searchString == null) {\n searchString = changetype("null");\n }\n var pos: isize = position;\n var len: isize = this.length;\n var start: isize = min(max(pos, 0), len);\n var searchLen: isize = searchString.length;\n\n // TODO: two-way, multiple char codes\n for (var k: usize = start; k + searchLen <= len; ++k) {\n if (!compare_memory(\n changetype(this) + HEAD + (k << 1),\n changetype(searchString) + HEAD,\n searchLen << 1)\n ) {\n return k;\n }\n }\n return -1;\n }\n\n startsWith(searchString: String, position: i32 = 0): bool {\n assert(this != null);\n if (searchString == null) {\n searchString = changetype("null");\n }\n var pos: isize = position;\n var len: isize = this.length;\n var start: isize = min(max(pos, 0), len);\n var searchLength: isize = searchString.length;\n if (searchLength + start > len) {\n return false;\n }\n return !compare_memory(\n changetype(this) + HEAD + (start << 1),\n changetype(searchString) + HEAD,\n searchLength << 1\n );\n }\n\n substr(start: i32, length: i32 = i32.MAX_VALUE): String {\n assert(this != null);\n var intStart: isize = start;\n var end: isize = length;\n var size: isize = this.length;\n if (intStart < 0) {\n intStart = max(size + intStart, 0);\n }\n var resultLength: isize = min(max(end, 0), size - intStart);\n if (resultLength <= 0) {\n return EMPTY;\n }\n var out = allocate(resultLength);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (intStart << 1),\n resultLength << 1\n );\n return out;\n }\n\n substring(start: i32, end: i32 = i32.MAX_VALUE): String {\n assert(this != null);\n var len = this.length;\n var finalStart = min(max(start, 0), len);\n var finalEnd = min(max(end, 0), len);\n var from = min(finalStart, finalEnd);\n var to = max(finalStart, finalEnd);\n len = to - from;\n if (!len) {\n return EMPTY;\n }\n if (!from && to == this.length) {\n return this;\n }\n var out = allocate(len);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (from << 1),\n len << 1\n );\n return out;\n }\n\n trim(): String {\n assert(this != null);\n var length: usize = this.length;\n while (\n length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (length << 1), HEAD)\n )\n ) {\n --length;\n }\n var start: usize = 0;\n while (\n start < length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEAD)\n )\n ) {\n ++start, --length;\n }\n if (!length) {\n return EMPTY;\n }\n if (!start && length == this.length) {\n return this;\n }\n var out = allocate(length);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (start << 1),\n length << 1\n );\n return out;\n }\n\n trimLeft(): String {\n assert(this != null);\n var start: isize = 0;\n var len: isize = this.length;\n while (\n start < len &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEAD)\n )\n ) {\n ++start;\n }\n if (!start) {\n return this;\n }\n var outLen = len - start;\n if (!outLen) {\n return EMPTY;\n }\n var out = allocate(outLen);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (start << 1),\n outLen << 1\n );\n return out;\n }\n\n trimRight(): String {\n assert(this != null);\n var len: isize = this.length;\n while (\n len > 0 &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (len << 1), HEAD)\n )\n ) {\n --len;\n }\n if (len <= 0) {\n return EMPTY;\n }\n if (len == this.length) {\n return this;\n }\n var out = allocate(len);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD,\n len << 1\n );\n return out;\n }\n}\n\nfunction isWhiteSpaceOrLineTerminator(c: u16): bool {\n switch (c) {\n case 10: // \n case 13: // \n case 8232: // \n case 8233: // \n case 9: // \n case 11: // \n case 12: // \n case 32: // \n case 160: // \n case 65279: // \n return true;\n default:\n return false;\n }\n}\n\nconst enum CharCode {\n PLUS = 0x2B,\n MINUS = 0x2D,\n DOT = 0x2E,\n _0 = 0x30,\n _1 = 0x31,\n _2 = 0x32,\n _3 = 0x33,\n _4 = 0x34,\n _5 = 0x35,\n _6 = 0x36,\n _7 = 0x37,\n _8 = 0x38,\n _9 = 0x39,\n A = 0x41,\n B = 0x42,\n E = 0x45,\n O = 0x4F,\n X = 0x58,\n Z = 0x5a,\n a = 0x61,\n b = 0x62,\n e = 0x65,\n o = 0x6F,\n x = 0x78,\n z = 0x7A\n}\n\nexport function parseInt(str: String, radix: i32 = 0): f64 {\n return parse(str, radix);\n}\n\nexport function parseI32(str: String, radix: i32 = 0): i32 {\n return parse(str, radix);\n}\n\nexport function parseI64(str: String, radix: i32 = 0): i64 {\n return parse(str, radix);\n}\n\nfunction parse(str: String, radix: i32 = 0): T {\n var len: i32 = str.length;\n if (!len) {\n return NaN;\n }\n var ptr = changetype(str) /* + HEAD -> offset */;\n var code = load(ptr, HEAD);\n\n // determine sign\n var sign: T;\n if (code == CharCode.MINUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = 1;\n } else {\n sign = 1;\n }\n\n // determine radix\n if (!radix) {\n if (code == CharCode._0 && len > 2) {\n switch (load(ptr + 2, HEAD)) {\n\n case CharCode.B:\n case CharCode.b:\n ptr += 4; len -= 2;\n radix = 2;\n break;\n\n case CharCode.O:\n case CharCode.o:\n ptr += 4; len -= 2;\n radix = 8;\n break;\n\n case CharCode.X:\n case CharCode.x:\n ptr += 4; len -= 2;\n radix = 16;\n break;\n\n default:\n radix = 10;\n }\n } else radix = 10;\n } else if (radix < 2 || radix > 36) {\n return NaN;\n }\n\n // calculate value\n var num: T = 0;\n while (len--) {\n code = load(ptr, HEAD);\n if (code >= CharCode._0 && code <= CharCode._9) {\n code -= CharCode._0;\n } else if (code >= CharCode.A && code <= CharCode.Z) {\n code -= CharCode.A - 10;\n } else if (code >= CharCode.a && code <= CharCode.z) {\n code -= CharCode.a - 10;\n } else {\n break;\n }\n if (code >= radix) {\n break;\n }\n num = (num * radix) + code;\n ptr += 2;\n }\n return sign * num;\n}\n\nexport function parseFloat(str: String): f64 {\n var len: i32 = str.length;\n if (!len) {\n return NaN;\n }\n var ptr = changetype(str) /* + HEAD -> offset */;\n var code = load(ptr, HEAD);\n\n // determine sign\n var sign: f64;\n if (code == CharCode.MINUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = 1;\n } else {\n sign = 1;\n }\n\n // calculate value\n var num: f64 = 0;\n while (len--) {\n code = load(ptr, HEAD);\n if (code == CharCode.DOT) {\n ptr += 2;\n var fac: f64 = 0.1; // precision :(\n while (len--) {\n code = load(ptr, HEAD);\n if (code == CharCode.E || code == CharCode.e) {\n assert(false); // TODO\n }\n code -= CharCode._0;\n if (code > 9) {\n break;\n }\n num += code * fac;\n fac *= 0.1;\n ptr += 2;\n }\n break;\n }\n code -= CharCode._0;\n if (code >= 10) {\n break;\n }\n num = (num * 10) + code;\n ptr += 2;\n }\n return sign * num;\n}\n'}):{},n.definitionFiles=n.isBundle?Object({assembly:'// Definitions for the "AssemblyScript" subset.\n\n// Types\n\n/** An 8-bit signed integer. */\ndeclare type i8 = number;\n/** A 16-bit signed integer. */\ndeclare type i16 = number;\n/** A 32-bit signed integer. */\ndeclare type i32 = number;\n/** A 64-bit signed integer. */\ndeclare type i64 = number;\n/** A 32-bit signed integer when targeting 32-bit WebAssembly or a 64-bit signed integer when targeting 64-bit WebAssembly. */\ndeclare type isize = number;\n/** An 8-bit unsigned integer. */\ndeclare type u8 = number;\n/** A 16-bit unsigned integer. */\ndeclare type u16 = number;\n/** A 32-bit unsigned integer. */\ndeclare type u32 = number;\n/** A 64-bit unsigned integer. */\ndeclare type u64 = number;\n/** A 32-bit unsigned integer when targeting 32-bit WebAssembly or a 64-bit unsigned integer when targeting 64-bit WebAssembly. */\ndeclare type usize = number;\n/** A 1-bit unsigned integer. */\ndeclare type bool = any; // sic\n/** A 32-bit float. */\ndeclare type f32 = number;\n/** A 64-bit float. */\ndeclare type f64 = number;\n\n/** Converts any other numeric value to an 8-bit signed integer. */\ndeclare function i8(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace i8 {\n export const MIN_VALUE: i8;\n export const MAX_VALUE: i8;\n}\n/** Converts any other numeric value to a 16-bit signed integer. */\ndeclare function i16(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace i16 {\n export const MIN_VALUE: i16;\n export const MAX_VALUE: i16;\n}\n/** Converts any other numeric value to a 32-bit signed integer. */\ndeclare function i32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i32;\ndeclare namespace i32 {\n export const MIN_VALUE: i32;\n export const MAX_VALUE: i32;\n}\n/** Converts any other numeric value to a 64-bit signed integer. */\ndeclare function i64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i64;\ndeclare namespace i64 {\n export const MIN_VALUE: i64;\n export const MAX_VALUE: i64;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare function isize(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): isize;\ndeclare namespace isize {\n export const MIN_VALUE: isize;\n export const MAX_VALUE: isize;\n}\n/** Converts any other numeric value to an 8-bit unsigned integer. */\ndeclare function u8(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace u8 {\n export const MIN_VALUE: u8;\n export const MAX_VALUE: u8;\n}\n/** Converts any other numeric value to a 16-bit unsigned integer. */\ndeclare function u16(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace u16 {\n export const MIN_VALUE: u16;\n export const MAX_VALUE: u16;\n}\n/** Converts any other numeric value to a 32-bit unsigned integer. */\ndeclare function u32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i32;\ndeclare namespace u32 {\n export const MIN_VALUE: u32;\n export const MAX_VALUE: u32;\n}\n/** Converts any other numeric value to a 64-bit unsigned integer. */\ndeclare function u64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i64;\ndeclare namespace u64 {\n export const MIN_VALUE: u64;\n export const MAX_VALUE: u64;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) unsigned integer. */\ndeclare function usize(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): isize;\ndeclare namespace usize {\n export const MIN_VALUE: usize;\n export const MAX_VALUE: usize;\n}\n/** Converts any other numeric value to a 1-bit unsigned integer. */\ndeclare function bool(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): bool;\ndeclare namespace bool {\n export const MIN_VALUE: bool;\n export const MAX_VALUE: bool;\n}\n/** Converts any other numeric value to a 32-bit float. */\ndeclare function f32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): f32;\ndeclare namespace f32 {\n export const MIN_VALUE: f32;\n export const MAX_VALUE: f32;\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f32;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f32;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f32;\n}\n/** Converts any other numeric value to a 64-bit float. */\ndeclare function f64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n export const MIN_VALUE: f64;\n export const MAX_VALUE: f64;\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f64;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f64;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f64;\n}\n\n// Built-ins\n\n/** Performs the sign-agnostic count leading zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered leading if the value is zero. */\ndeclare function clz(value: T): T;\n/** Performs the sign-agnostic count tailing zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered trailing if the value is zero. */\ndeclare function ctz(value: T): T;\n/** Performs the sign-agnostic count number of one bits operation on a 32-bit or 64-bit integer. */\ndeclare function popcnt(value: T): T;\n/** Performs the sign-agnostic rotate left operation on a 32-bit or 64-bit integer. */\ndeclare function rotl(value: T, shift: T): T;\n/** Performs the sign-agnostic rotate right operation on a 32-bit or 64-bit integer. */\ndeclare function rotr(value: T, shift: T): T;\n/** Computes the absolute value of an integer or float. */\ndeclare function abs(value: T): T;\n/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function max(left: T, right: T): T;\n/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function min(left: T, right: T): T;\n/** Performs the ceiling operation on a 32-bit or 64-bit float. */\ndeclare function ceil(value: T): T;\n/** Composes a 32-bit or 64-bit float from the magnitude of `x` and the sign of `y`. */\ndeclare function copysign(x: T, y: T): T;\n/** Performs the floor operation on a 32-bit or 64-bit float. */\ndeclare function floor(value: T): T;\n/** Rounds to the nearest integer tied to even of a 32-bit or 64-bit float. */\ndeclare function nearest(value: T): T;\n/** Reinterprets the bits of the specified value as type `T`. Valid reinterpretations are u32/i32 to/from f32 and u64/i64 to/from f64. */\ndeclare function reinterpret(value: number): T;\n/** Selects one of two pre-evaluated values depending on the condition. */\ndeclare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n/** Calculates the square root of a 32-bit or 64-bit float. */\ndeclare function sqrt(value: T): T;\n/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */\ndeclare function trunc(value: T): T;\n/** Loads a value of the specified type from memory. Equivalent to dereferncing a pointer in other languages. */\ndeclare function load(ptr: usize, constantOffset?: usize): T;\n/** Stores a value of the specified type to memory. Equivalent to dereferencing a pointer in other languages when assigning a value. */\ndeclare function store(ptr: usize, value: any, constantOffset?: usize): void;\n/** Returns the current memory size in units of pages. One page is 64kb. */\ndeclare function current_memory(): i32;\n/** Grows linear memory by a given unsigned delta of pages. One page is 64kb. Returns the previous memory size in units of pages or `-1` on failure. */\ndeclare function grow_memory(value: i32): i32;\n/** Copies n bytes from the specified source to the specified destination in memory. These regions may overlap. */\ndeclare function move_memory(destination: usize, source: usize, n: usize): void;\n/** Sets n bytes beginning at the specified destination in memory to the specified byte value. */\ndeclare function set_memory(destination: usize, value: u8, count: usize): void;\n/** Compares two chunks of memory. Returns `0` if equal, otherwise the difference of the first differing bytes. */\ndeclare function compare_memory(vl: usize, vr: usize, n: usize): i32;\n/** Allocates a chunk of memory of the specified size and returns a pointer to it. */\ndeclare function allocate_memory(size: usize): usize;\n/** Disposes a chunk of memory by its pointer. */\ndeclare function free_memory(ptr: usize): void;\n/** Emits an unreachable operation that results in a runtime error when executed. Both a statement and an expression of any type. */\ndeclare function unreachable(): any; // sic\n\n/** [Polyfill] Performs the sign-agnostic reverse bytes **/\ndeclare function bswap(value: T): T;\n/** [Polyfill] Performs the sign-agnostic reverse bytes only for last 16-bit **/\ndeclare function bswap16(value: T): T;\n\n/** NaN (not a number) as a 32-bit or 64-bit float depending on context. */\ndeclare const NaN: f32 | f64;\n/** Positive infinity as a 32-bit or 64-bit float depending on context. */\ndeclare const Infinity: f32 | f64;\n/** Heap base offset. */\ndeclare const HEAP_BASE: usize;\n/** Determines the byte size of the specified core or class type. Compiles to a constant. */\ndeclare function sizeof(): usize;\n/** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/\ndeclare function changetype(value: any): T;\n/** Tests if a 32-bit or 64-bit float is `NaN`. */\ndeclare function isNaN(value: T): bool;\n/** Tests if a 32-bit or 64-bit float is finite, that is not `NaN` or +/-`Infinity`. */\ndeclare function isFinite(value: T): bool;\n/** Traps if the specified value is not true-ish, otherwise returns the (non-nullable) value. */\ndeclare function assert(isTrueish: T, message?: string): T & object; // any better way to model `: T != null`?\n/** Parses an integer string to a 64-bit float. */\ndeclare function parseInt(str: string, radix?: i32): f64;\n/** Parses an integer string to a 32-bit integer. */\ndeclare function parseI32(str: string, radix?: i32): i32;\n/** Parses an integer string to a 64-bit integer. */\ndeclare function parseI64(str: string, radix?: i32): i64;\n/** Parses a string to a 64-bit float. */\ndeclare function parseFloat(str: string): f64;\n\n// Standard library (not yet implemented)\n\n/** Class representing a sequence of values of type `T`. */\ndeclare class Array {\n [key: number]: T;\n /** Current length of the array. */\n length: i32;\n /** Constructs a new array. */\n constructor(capacity?: i32);\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n shift(): T;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n}\n\n/** Class representing a C-like array of values of type `T` with limited capabilities. */\ndeclare class CArray {\n [key: number]: T;\n private constructor();\n}\n\n/** Class representing a sequence of characters. */\ndeclare class String {\n\n static fromCharCode(ls: i32, hs?: i32): string;\n static fromCharCodes(arr: u16[]): string;\n static fromCodePoint(cp: i32): string;\n static fromCodePoints(arr: i32[]): string;\n\n readonly length: u32;\n\n charAt(index: u32): string;\n charCodeAt(index: u32): u16;\n concat(other: string): string;\n endsWith(other: string): bool;\n indexOf(other: string): u32;\n includes(other: string): bool;\n startsWith(other: string): bool;\n substr(start: u32, length?: u32): string;\n substring(start: u32, end?: u32): string;\n trim(): string;\n trimLeft(): string;\n trimRight(): string;\n}\n\n/** Class for representing a runtime error. Base class of all errors. */\ndeclare class Error {\n\n /** Error name. */\n name: string;\n\n /** Message provided on construction. */\n message: string;\n\n /** Stack trace. */\n stack: string;\n\n /** Constructs a new error, optionally with a message. */\n constructor(message?: string);\n}\n\n/** Class for indicating an error when a value is not in the set or range of allowed values. */\ndeclare class RangeError extends Error { }\n\ninterface Boolean {}\ninterface Function {}\ninterface IArguments {}\ninterface Number {}\ninterface Object {}\ninterface RegExp {}\n\ndeclare class Set {\n readonly size: i32;\n has(value: T): bool;\n add(value: T): void;\n delete(value: T): bool;\n clear(): void;\n}\n\n// Internal decorators\n\n/** Annotates an element as a program global. */\ndeclare function global(target: Function, propertyKey: string, descriptor: any): void;\n\n/** Annotates a method as an operator overload. */\ndeclare function operator(token: string): (target: any, propertyKey: string, descriptor: any) => void;\n\n/** Annotates a class as being unmanaged with limited capabilities. */\ndeclare function unmanaged(target: Function): any;\n\n/** Annotates a class field with an explicit offset. */\ndeclare function offset(offset: usize): any;\n\n/** Annotates an element as begin built-in. */\ndeclare function builtin(target: Function): any;\n',portable:'// Definitions for the "portable AssemblyScript" subset.\n\n// Portable types\n\n// Note that semantic differences require additional explicit conversions for full compatibility.\n// For example, when casting an i32 to an u8, doing `(someI32 & 0xff)` will yield the same\n// result when compiling to WebAssembly or JS while `someI32` alone does nothing in JS.\n\n// Note that i64\'s are not portable (JS numbers are IEEE754 doubles with a maximum safe integer value\n// of 2^53-1) and instead require a compatibility layer to work in JS as well. See: src/util/i64.ts\n\ndeclare type i8 = number;\ndeclare type i16 = number;\ndeclare type i32 = number;\ndeclare type isize = number;\ndeclare type u8 = number;\ndeclare type u16 = number;\ndeclare type u32 = number;\ndeclare type bool = boolean;\ndeclare type usize = number;\ndeclare type f32 = number;\ndeclare type f64 = number;\n\n/** Converts any other numeric value to an 8-bit signed integer. */\ndeclare function i8(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace i8 {\n export const MIN_VALUE: i8;\n export const MAX_VALUE: i8;\n}\n/** Converts any other numeric value to a 16-bit signed integer. */\ndeclare function i16(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace i16 {\n export const MIN_VALUE: i16;\n export const MAX_VALUE: i16;\n}\n/** Converts any other numeric value to a 32-bit signed integer. */\ndeclare function i32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i32;\ndeclare namespace i32 {\n export const MIN_VALUE: i32;\n export const MAX_VALUE: i32;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare function isize(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): isize;\ndeclare namespace isize {\n export const MIN_VALUE: isize;\n export const MAX_VALUE: isize;\n}\n/** Converts any other numeric value to an 8-bit unsigned integer. */\ndeclare function u8(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace u8 {\n export const MIN_VALUE: u8;\n export const MAX_VALUE: u8;\n}\n/** Converts any other numeric value to a 16-bit unsigned integer. */\ndeclare function u16(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace u16 {\n export const MIN_VALUE: u16;\n export const MAX_VALUE: u16;\n}\n/** Converts any other numeric value to a 32-bit unsigned integer. */\ndeclare function u32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i32;\ndeclare namespace u32 {\n export const MIN_VALUE: u32;\n export const MAX_VALUE: u32;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) unsigned integer. */\ndeclare function usize(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): isize;\ndeclare namespace usize {\n export const MIN_VALUE: usize;\n export const MAX_VALUE: usize;\n}\n/** Converts any other numeric value to a 1-bit unsigned integer. */\ndeclare function bool(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): bool;\ndeclare namespace bool {\n export const MIN_VALUE: bool;\n export const MAX_VALUE: bool;\n}\n/** Converts any other numeric value to a 32-bit float. */\ndeclare function f32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f32;\ndeclare namespace f32 {\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f32;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f32;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f32;\n}\n/** Converts any other numeric value to a 64-bit float. */\ndeclare function f64(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f64;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f64;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f64;\n}\n\n// Portable built-ins\n\n/** Performs the sign-agnostic count leading zero bits operation on a 32-bit integer. All zero bits are considered leading if the value is zero. */\ndeclare function clz(value: T): T;\n/** Computes the absolute value of an integer or float. */\ndeclare function abs(value: T): T;\n/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function max(left: T, right: T): T;\n/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function min(left: T, right: T): T;\n/** Performs the ceiling operation on a 32-bit or 64-bit float. */\ndeclare function ceil(value: T): T;\n/** Performs the floor operation on a 32-bit or 64-bit float. */\ndeclare function floor(value: T): T;\n/** Selects one of two pre-evaluated values depending on the condition. */\ndeclare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n/** Calculates the square root of a 32-bit or 64-bit float. */\ndeclare function sqrt(value: T): T;\n/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */\ndeclare function trunc(value: T): T;\n/** Allocates a chunk of memory of the specified size and returns a pointer to it. */\ndeclare function allocate_memory(size: usize): usize;\n/** Disposes a chunk of memory by its pointer. */\ndeclare function free_memory(ptr: usize): void;\n/** Copies n bytes from the specified source to the specified destination in memory. These regions may overlap. */\ndeclare function move_memory(destination: usize, source: usize, n: usize): void;\n/** Loads a value of the specified type from memory. Type must be `u8`. */\ndeclare function load(ptr: usize, constantOffset?: usize): T;\n/** Stores a value of the specified type to memory. Type must be `u8`. */\ndeclare function store(ptr: usize, value: T, constantOffset?: usize): void;\n/** Emits an unreachable operation that results in a runtime error when executed. */\ndeclare function unreachable(): any; // sic\n\n/** [Polyfill] Performs the sign-agnostic reverse bytes **/\ndeclare function bswap(value: T): T;\n/** [Polyfill] Performs the sign-agnostic reverse bytes only for last 16-bit **/\ndeclare function bswap16(value: T): T;\n\n/** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/\ndeclare function changetype(value: any): T;\n/** Traps if the specified value is not true-ish, otherwise returns the value. */\ndeclare function assert(isTrueish: T, message?: string): T & object; // any better way to model `: T != null`?\n/** Parses an integer string to a 64-bit float. */\ndeclare function parseInt(str: string, radix?: i32): f64;\n/** Parses an integer string to a 32-bit integer. */\ndeclare function parseI32(str: string, radix?: i32): i32;\n/** Parses a floating point string to a 64-bit float. */\ndeclare function parseFloat(str: string): f64;\n\n// Portable standard library\n// Everything marked @deprecated is a temporary filler. Do not use.\n\ndeclare const NaN: f32 | f64;\ndeclare const Infinity: f32 | f64;\n\ndeclare class Array {\n [key: number]: T;\n length: i32;\n constructor(capacity?: i32);\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n shift(): T;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n\n join(delim: string): string;\n}\n\ndeclare class Uint8Array extends Array {}\ndeclare class Uint16Array extends Array {}\ndeclare class Uint32Array extends Array {}\ndeclare class Int8Array extends Array {}\ndeclare class Int16Array extends Array {}\ndeclare class Int32Array extends Array {}\ndeclare class Float32Array extends Array {}\ndeclare class Float64Array extends Array {}\n\ndeclare class String {\n static fromCharCode(ls: i32, hs?: i32): string;\n static fromCharCodes(arr: u16[]): string;\n static fromCodePoint(cp: i32): string;\n static fromCodePoints(arr: i32[]): string;\n readonly length: i32;\n private constructor();\n indexOf(subject: string, position?: i32): i32;\n includes(other: string): bool;\n lastIndexOf(subject: string, position?: i32): i32;\n charAt(index: i32): string;\n charCodeAt(index: i32): i32;\n substring(from: i32, to?: i32): string;\n startsWith(subject: string): bool;\n endsWith(subject: string): bool;\n replace(search: string, replacement: string): string;\n toString(): string;\n}\n\ninterface Boolean {}\n\ndeclare class Number {\n private constructor();\n toString(radix?: i32): string;\n}\n\ninterface Object {}\n\ninterface Function {}\n\ninterface RegExp {}\n\ninterface IArguments {}\n\ndeclare class Error {\n constructor(message: string);\n message: string;\n stack: string | null;\n}\n\ndeclare class Symbol {\n private constructor();\n static readonly iterator: symbol;\n}\n\ndeclare class Set {\n constructor(entries?: T[]);\n has(value: T): bool;\n add(value: T): void;\n delete(value: T): bool;\n clear(): void;\n [Symbol.iterator](): Iterator;\n}\n\ndeclare class Map {\n constructor(entries?: [K, V][]);\n readonly size: i32;\n set(key: K, value: V): void;\n has(key: K): bool;\n get(key: K): V | null;\n clear(): void;\n entries(): Iterable<[K, V]>;\n keys(): Iterable;\n values(): Iterable;\n [Symbol.iterator](): Iterator<[K,V]>;\n}\n\ninterface Iterable {\n [Symbol.iterator](): Iterator;\n}\n\ninterface Iterator {}\n\ndeclare namespace console {\n /** @deprecated */\n function log(message: string): void;\n}\n'}):{},n.main=function(r,f,p){"function"==typeof f?(p=f,f={}):f||(f={});const m=f.stdout||e.stdout,g=f.stderr||e.stderr,y=f.readFile||C,b=f.writeFile||B,v=f.listFiles||N,_=f.stats||{readTime:0,readCount:0,writeTime:0,writeCount:0,parseTime:0,parseCount:0,compileTime:0,compileCount:0,emitTime:0,emitCount:0,validateTime:0,validateCount:0,optimizeTime:0,optimizeCount:0};if(!m)throw Error("'options.stdout' must be specified");if(!g)throw Error("'options.stderr' must be specified");if(!i.readFileSync){if(y===C)throw Error("'options.readFile' must be specified");if(b===B)throw Error("'options.writeFile' must be specified");if(v===N)throw Error("'options.listFiles' must be specified")}const T=u(r);if(p||(p=function(e){var n=0;return e&&(g.write(e.stack+s.EOL),n=1),n}),T.version)return m.write("Version "+n.version+(l?"-dev":"")+s.EOL),p(null);if(T.help||T._.length<1){const e=[];return Object.keys(n.options).forEach(t=>{var r=n.options[t],i=" ";for(i+="--"+t,r.aliases&&1===r.aliases[0].length&&(i+=", -"+r.aliases[0]);i.length<24;)i+=" ";Array.isArray(r.desc)?e.push(i+r.desc[0]+r.desc.slice(1).map(e=>{for(let n=0;n<24;++n)e=" "+e;return s.EOL+e}).join("")):e.push(i+r.desc)}),(T.help?m:g).write(["Version "+n.version+(l?"-dev":""),"Syntax: asc [entryFile ...] [options]","","Examples: asc hello.ts"," asc hello.ts -b hello.wasm -t hello.wat"," asc hello1.ts hello2.ts -b -O > hello.wasm","","Options:"].concat(e).join(s.EOL)+s.EOL),p(null)}const z=T.baseDir?o.resolve(T.baseDir):e.cwd(),E=o.join(".","..","std","assembly"),A=T.noLib?[]:[E];T.lib&&("string"==typeof T.lib&&(T.lib=T.lib.split(",")),Array.prototype.push.apply(A,T.lib.map(trim)));var x=null;for(let e=0,t=T._.length;e{x=a.parseFile(r,t,!0,x)});null!=(t=x.nextFile());){if(t.startsWith(n.libraryPrefix)){for(let e=0,i=A.length;e{a.parseFile(r,t,!1,x)})}if(c(x,g))return p(Error("Parse error"))}var w=!1;T.noLib||Object.keys(n.libraryFiles).forEach(e=>{e.lastIndexOf("/")>=n.libraryPrefix.length||(_.parseCount++,_.parseTime+=h(()=>{x=a.parseFile(n.libraryFiles[e],e+".ts",!1,x)}),w=!0)});for(let e=0,t=A.length;e{x=a.parseFile(s,n.libraryPrefix+i,!1,x)})}}const S=a.createOptions();var I;a.setTarget(S,0),a.setNoTreeShaking(S,!!T.noTreeShaking),a.setNoAssert(S,!!T.noAssert),a.setNoMemory(S,!!T.noMemory),a.setImportMemory(S,!!T.importMemory),a.setMemoryBase(S,T.memoryBase>>>0),a.setSourceMap(S,null!=T.sourceMap),_.compileCount++;try{_.compileTime+=h(()=>{I=a.compile(x,S)})}catch(e){return p(e)}if(c(x,g))return I&&I.dispose(),p(Error("Compile error"));if(T.validate&&(_.validateCount++,_.validateTime+=h(()=>{if(!I.validate())return I.dispose(),p(Error("Validate error"))})),"clamp"===T.trapMode)_.optimizeCount++,_.optimizeTime+=h(()=>{I.runPasses(["trap-mode-clamp"])});else if("js"===T.trapMode)_.optimizeCount++,_.optimizeTime+=h(()=>{I.runPasses(["trap-mode-js"])});else if("allow"!==T.trapMode)return I.dispose(),p(Error("Unsupported trap mode"));var L=-1,k=0,M=!T.noDebug;!1!==T.optimize&&("number"==typeof T.optimize?L=T.optimize:T[0]?L=0:T[1]?L=1:T[2]?L=2:T[3]?L=3:!0===T.optimize?(L=n.defaultOptimizeLevel,k=n.defaultShrinkLevel):L=0),T.s?k=1:T.z&&(k=2),"number"==typeof T.optimizeLevel&&(L=T.optimizeLevel),"number"==typeof T.shrinkLevel?k=T.shrinkLevel:"s"===T.shrinkLevel?k=1:"z"===T.shrinkLevel&&(k=2),I.setOptimizeLevel(L>0?L:0),I.setShrinkLevel(k),I.setDebugInfo(M);var F=[];if(T.runPasses&&("string"==typeof T.runPasses&&(T.runPasses=T.runPasses.split(",")),T.runPasses.length&&T.runPasses.forEach(e=>{F.indexOf(e)<0&&F.push(e)})),L>=0&&(_.optimizeCount++,_.optimizeTime+=h(()=>{I.optimize()})),F.length&&(_.optimizeCount++,_.optimizeTime+=h(()=>{I.runPasses(F.map(e=>e.trim()))})),!T.noEmit){let e=!1;if(null!=T.outFile&&(/\.was?t$/.test(T.outFile)&&null==T.textFile?T.textFile=T.outFile:/\.js$/.test(T.outFile)&&null==T.asmjsFile?T.asmjsFile=T.outFile:null==T.binaryFile&&(T.binaryFile=T.outFile)),null!=T.binaryFile){let t,r=null!=T.sourceMap?T.sourceMap.length?T.sourceMap:o.basename(T.binaryFile)+".map":null;if(_.emitCount++,_.emitTime+=h(()=>{t=I.toBinary(r)}),T.binaryFile.length?b(o.join(z,T.binaryFile),t.output):(R(t.output),e=!0),null!=t.sourceMap)if(T.binaryFile.length){let e=JSON.parse(t.sourceMap);e.sourceRoot=n.sourceMapRoot,e.sources.forEach((t,r)=>{let i=null;if(t.startsWith(n.libraryPrefix))for(let e=0,r=A.length;e{n=I.toText()}),b(o.join(z,T.textFile),n)):e||(_.emitCount++,_.emitTime+=h(()=>{n=I.toText()}),R(n),e=!0)}if(null!=T.asmjsFile){let n;T.asmjsFile.length?(_.emitCount++,_.emitTime+=h(()=>{n=I.toAsmjs()}),b(o.join(z,T.asmjsFile),n)):e||(_.emitCount++,_.emitTime+=h(()=>{n=I.toAsmjs()}),R(n),e=!0)}}return I.dispose(),T.measure&&d(_,g),p(null);function C(e){try{var n;return _.readCount++,_.readTime+=h(()=>{n=i.readFileSync(e,{encoding:"utf8"})}),n}catch(e){return null}}function B(e,n){try{return _.writeCount++,_.writeTime+=h(()=>{"string"==typeof n?i.writeFileSync(e,n,{encoding:"utf8"}):i.writeFileSync(e,n)}),!0}catch(e){return!1}}function N(e){var n;try{return _.readTime+=h(()=>{n=t(!function(){var e=new Error('Cannot find module "glob"');throw e.code="MODULE_NOT_FOUND",e}()).sync("*.ts",{cwd:e})}),n}catch(e){return[]}}function R(e){R.used||(_.writeCount++,R.used=!0),_.writeTime+=h(()=>{"string"==typeof e?m.write(e,{encoding:"utf8"}):m.write(e)})}},n.parseArguments=u,n.checkDiagnostics=c,n.createStats=f,e.hrtime||(e.hrtime=t(3)),n.measure=h,n.printStats=d,n.createMemoryStream=function(e){var n=[];return n.write=function(n){"string"==typeof n?this.push(r.from(n,"utf8")):this.push(n),e&&e(n)},n.toBuffer=function(){return r.concat(this)},n.toString=function(){return this.toBuffer().toString("utf8")},n},n.tscOptions={alwaysStrict:!0,noImplicitAny:!0,noImplicitReturns:!0,noImplicitThis:!0,noEmitOnError:!0,strictNullChecks:!0,experimentalDecorators:!0,target:"esnext",module:"commonjs",noLib:!0,types:[],allowJs:!1}}).call(this,t(0),t(13).Buffer)},function(e,n,t){e.exports=t(14)}])}); +//# sourceMappingURL=asc.js.map \ No newline at end of file diff --git a/dist/asc.js.map b/dist/asc.js.map new file mode 100644 index 00000000..ab3b65da --- /dev/null +++ b/dist/asc.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://asc/webpack/universalModuleDefinition","webpack://asc/webpack/bootstrap","webpack://asc/../node_modules/node-libs-browser/mock/process.js","webpack://asc/../node_modules/webpack/buildin/global.js","webpack://asc/../node_modules/path-browserify/index.js","webpack://asc/../node_modules/browser-process-hrtime/index.js","webpack://asc/../node_modules/minimist/index.js","webpack://asc/external {\"commonjs\":\"./assemblyscript\",\"commonjs2\":\"./assemblyscript\"}","webpack://asc/external {\"commonjs\":\"assemblyscript\",\"commonjs2\":\"assemblyscript\",\"amd\":\"assemblyscript\",\"root\":\"_\"}","webpack://asc/../node_modules/os-browserify/browser.js","webpack://asc/../node_modules/isarray/index.js","webpack://asc/../node_modules/ieee754/index.js","webpack://asc/../node_modules/base64-js/index.js","webpack://asc/../node_modules/buffer/index.js","webpack://asc/./asc.js"],"names":["root","factory","exports","module","require","e","define","amd","undefined","window","__WEBPACK_EXTERNAL_MODULE__6__","__WEBPACK_EXTERNAL_MODULE__7__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","path","cwd","nextTick","fn","setTimeout","platform","arch","execPath","title","pid","browser","env","argv","binding","Error","chdir","dir","resolve","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","g","this","Function","eval","process","normalizeArray","parts","allowAboveRoot","up","length","last","splice","unshift","splitPathRe","splitPath","filename","exec","slice","filter","xs","f","res","push","resolvedPath","resolvedAbsolute","arguments","TypeError","charAt","split","join","normalize","isAbsolute","trailingSlash","substr","paths","Array","index","relative","from","to","trim","arr","start","end","fromParts","toParts","Math","min","samePartsLength","outputParts","concat","sep","delimiter","dirname","result","basename","ext","extname","str","len","global","hrtime","previousTimestamp","clocktime","performanceNow","performance","seconds","floor","nanoseconds","now","mozNow","msNow","oNow","webkitNow","Date","getTime","isNumber","x","test","args","opts","flags","bools","strings","unknownFn","allBools","Boolean","forEach","key","aliases","keys","alias","y","string","defaults","_","setArg","notFlags","val","arg","argDefined","Number","setKey","obj","isArray","aliasIsBoolean","some","indexOf","match","next","letters","broken","j","stopEarly","apply","code","endianness","hostname","location","loadavg","freemem","MAX_VALUE","totalmem","cpus","type","release","navigator","appVersion","networkInterfaces","getNetworkInterfaces","tmpdir","tmpDir","EOL","homedir","toString","read","buffer","offset","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","pow","write","rt","abs","isNaN","log","LN2","byteLength","b64","placeHoldersCount","toByteArray","tmp","placeHolders","Arr","L","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","output","len2","encodeChunk","lookup","Uint8Array","num","base64","ieee754","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","encodingOrOffset","allocUnsafe","ArrayBuffer","array","byteOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","fromString","isBuffer","checked","copy","data","fromObject","assertSize","size","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","swap","b","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","String","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","parseInt","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64Slice","utf8Slice","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","Symbol","species","fill","allocUnsafeSlow","_isBuffer","compare","a","list","pos","swap16","swap32","swap64","hexSlice","asciiSlice","latin1Slice","utf16leSlice","equals","inspect","max","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","toHex","bytes","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","INVALID_BASE64_RE","leadSurrogate","replace","stringtrim","base64clean","src","dst","fs","os","assemblyscript","isDev","install","register","project","parseArguments","options","opt","default","boolean","checkDiagnostics","emitter","stderr","diagnostic","hasErrors","nextDiagnostic","formatDiagnostic","isTTY","isError","createStats","readTime","readCount","writeTime","writeCount","parseTime","parseCount","compileTime","compileCount","emitTime","emitCount","validateTime","validateCount","optimizeTime","optimizeCount","measure","times","printStats","stats","format","time","count","toFixed","stdout","isBundle","version","sourceMapRoot","libraryPrefix","LIBRARY_PREFIX","defaultOptimizeLevel","defaultShrinkLevel","libraryFiles","(lib)/allocator/arena","(lib)/allocator/emscripten","(lib)/allocator/none","(lib)/allocator/system","(lib)/allocator/tlsf","(lib)/array","(lib)/builtins","(lib)/error","(lib)/iterator","(lib)/map","(lib)/memory","(lib)/polyfills","(lib)/regexp","(lib)/set","(lib)/string","definitionFiles","assembly","portable","main","callback","readFile","readFileNode","writeFile","writeFileNode","listFiles","listFilesNode","readFileSync","err","stack","help","option","text","desc","map","line","baseDir","stdLibDir","libDirs","noLib","lib","parser","k","sourcePath","sourceText","parseFile","nextFile","startsWith","substring","hasBundledLibrary","libPath","libDir","libFiles","libText","compilerOptions","createOptions","setTarget","setNoTreeShaking","noTreeShaking","setNoAssert","setNoMemory","noMemory","setImportMemory","importMemory","setMemoryBase","memoryBase","setSourceMap","sourceMap","compile","dispose","validate","trapMode","runPasses","optimizeLevel","shrinkLevel","debugInfo","noDebug","optimize","setOptimizeLevel","setShrinkLevel","setDebugInfo","pass","noEmit","hasStdout","outFile","textFile","asmjsFile","binaryFile","binary","sourceMapURL","toBinary","writeStdout","JSON","parse","sourceRoot","sources","sourceContents","stringify","toText","asm","toAsmjs","contents","writeFileSync","files","sync","used","createMemoryStream","stream","chunk","toBuffer","tscOptions","alwaysStrict","noImplicitAny","noImplicitReturns","noImplicitThis","noEmitOnError","strictNullChecks","experimentalDecorators","types","allowJs"],"mappings":"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","file":"asc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"./assemblyscript\"), (function webpackLoadOptionalExternalModule() { try { return require(\"assemblyscript\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([, \"assemblyscript\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"asc\"] = factory(require(\"./assemblyscript\"), (function webpackLoadOptionalExternalModule() { try { return require(\"assemblyscript\"); } catch(e) {} }()));\n\telse\n\t\troot[\"asc\"] = factory(root[undefined], root[\"_\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__6__, __WEBPACK_EXTERNAL_MODULE__7__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 15);\n","exports.nextTick = function nextTick(fn) {\n\tsetTimeout(fn, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","module.exports = process.hrtime || hrtime\n\n// polyfil for window.performance.now\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nfunction hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}","module.exports = function (args, opts) {\n if (!opts) opts = {};\n \n var flags = { bools : {}, strings : {}, unknownFn: null };\n\n if (typeof opts['unknown'] === 'function') {\n flags.unknownFn = opts['unknown'];\n }\n\n if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {\n flags.allBools = true;\n } else {\n [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {\n flags.bools[key] = true;\n });\n }\n \n var aliases = {};\n Object.keys(opts.alias || {}).forEach(function (key) {\n aliases[key] = [].concat(opts.alias[key]);\n aliases[key].forEach(function (x) {\n aliases[x] = [key].concat(aliases[key].filter(function (y) {\n return x !== y;\n }));\n });\n });\n\n [].concat(opts.string).filter(Boolean).forEach(function (key) {\n flags.strings[key] = true;\n if (aliases[key]) {\n flags.strings[aliases[key]] = true;\n }\n });\n\n var defaults = opts['default'] || {};\n \n var argv = { _ : [] };\n Object.keys(flags.bools).forEach(function (key) {\n setArg(key, defaults[key] === undefined ? false : defaults[key]);\n });\n \n var notFlags = [];\n\n if (args.indexOf('--') !== -1) {\n notFlags = args.slice(args.indexOf('--')+1);\n args = args.slice(0, args.indexOf('--'));\n }\n\n function argDefined(key, arg) {\n return (flags.allBools && /^--[^=]+$/.test(arg)) ||\n flags.strings[key] || flags.bools[key] || aliases[key];\n }\n\n function setArg (key, val, arg) {\n if (arg && flags.unknownFn && !argDefined(key, arg)) {\n if (flags.unknownFn(arg) === false) return;\n }\n\n var value = !flags.strings[key] && isNumber(val)\n ? Number(val) : val\n ;\n setKey(argv, key.split('.'), value);\n \n (aliases[key] || []).forEach(function (x) {\n setKey(argv, x.split('.'), value);\n });\n }\n\n function setKey (obj, keys, value) {\n var o = obj;\n keys.slice(0,-1).forEach(function (key) {\n if (o[key] === undefined) o[key] = {};\n o = o[key];\n });\n\n var key = keys[keys.length - 1];\n if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {\n o[key] = value;\n }\n else if (Array.isArray(o[key])) {\n o[key].push(value);\n }\n else {\n o[key] = [ o[key], value ];\n }\n }\n \n function aliasIsBoolean(key) {\n return aliases[key].some(function (x) {\n return flags.bools[x];\n });\n }\n\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n \n if (/^--.+=/.test(arg)) {\n // Using [\\s\\S] instead of . because js doesn't support the\n // 'dotall' regex modifier. See:\n // http://stackoverflow.com/a/1068308/13216\n var m = arg.match(/^--([^=]+)=([\\s\\S]*)$/);\n var key = m[1];\n var value = m[2];\n if (flags.bools[key]) {\n value = value !== 'false';\n }\n setArg(key, value, arg);\n }\n else if (/^--no-.+/.test(arg)) {\n var key = arg.match(/^--no-(.+)/)[1];\n setArg(key, false, arg);\n }\n else if (/^--.+/.test(arg)) {\n var key = arg.match(/^--(.+)/)[1];\n var next = args[i + 1];\n if (next !== undefined && !/^-/.test(next)\n && !flags.bools[key]\n && !flags.allBools\n && (aliases[key] ? !aliasIsBoolean(key) : true)) {\n setArg(key, next, arg);\n i++;\n }\n else if (/^(true|false)$/.test(next)) {\n setArg(key, next === 'true', arg);\n i++;\n }\n else {\n setArg(key, flags.strings[key] ? '' : true, arg);\n }\n }\n else if (/^-[^-]+/.test(arg)) {\n var letters = arg.slice(1,-1).split('');\n \n var broken = false;\n for (var j = 0; j < letters.length; j++) {\n var next = arg.slice(j+2);\n \n if (next === '-') {\n setArg(letters[j], next, arg)\n continue;\n }\n \n if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {\n setArg(letters[j], next.split('=')[1], arg);\n broken = true;\n break;\n }\n \n if (/[A-Za-z]/.test(letters[j])\n && /-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next)) {\n setArg(letters[j], next, arg);\n broken = true;\n break;\n }\n \n if (letters[j+1] && letters[j+1].match(/\\W/)) {\n setArg(letters[j], arg.slice(j+2), arg);\n broken = true;\n break;\n }\n else {\n setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);\n }\n }\n \n var key = arg.slice(-1)[0];\n if (!broken && key !== '-') {\n if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])\n && !flags.bools[key]\n && (aliases[key] ? !aliasIsBoolean(key) : true)) {\n setArg(key, args[i+1], arg);\n i++;\n }\n else if (args[i+1] && /true|false/.test(args[i+1])) {\n setArg(key, args[i+1] === 'true', arg);\n i++;\n }\n else {\n setArg(key, flags.strings[key] ? '' : true, arg);\n }\n }\n }\n else {\n if (!flags.unknownFn || flags.unknownFn(arg) !== false) {\n argv._.push(\n flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)\n );\n }\n if (opts.stopEarly) {\n argv._.push.apply(argv._, args.slice(i + 1));\n break;\n }\n }\n }\n \n Object.keys(defaults).forEach(function (key) {\n if (!hasKey(argv, key.split('.'))) {\n setKey(argv, key.split('.'), defaults[key]);\n \n (aliases[key] || []).forEach(function (x) {\n setKey(argv, x.split('.'), defaults[key]);\n });\n }\n });\n \n if (opts['--']) {\n argv['--'] = new Array();\n notFlags.forEach(function(key) {\n argv['--'].push(key);\n });\n }\n else {\n notFlags.forEach(function(key) {\n argv._.push(key);\n });\n }\n\n return argv;\n};\n\nfunction hasKey (obj, keys) {\n var o = obj;\n keys.slice(0,-1).forEach(function (key) {\n o = (o[key] || {});\n });\n\n var key = keys[keys.length - 1];\n return key in o;\n}\n\nfunction isNumber (x) {\n if (typeof x === 'number') return true;\n if (/^0x[0-9a-f]+$/i.test(x)) return true;\n return /^[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(x);\n}\n\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6__;","if(typeof __WEBPACK_EXTERNAL_MODULE__7__ === 'undefined') {var e = new Error(\"Cannot find module \\\"undefined\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__7__;","exports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n if (typeof location !== 'undefined') {\n return location.hostname\n }\n else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n if (typeof navigator !== 'undefined') {\n return navigator.appVersion;\n }\n return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr((len * 3 / 4) - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0; i < l; i += 4) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","//////////////////////// Compiler frontend for node.js /////////////////////////\r\n\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst os = require(\"os\");\r\n\r\n// Use distribution files if present, otherwise run the sources directly\r\nvar assemblyscript, isDev;\r\ntry {\r\n assemblyscript = require(\"../dist/assemblyscript.js\");\r\n isDev = false;\r\n try { require(\"source-map-support\").install(); } catch (e) {} // optional\r\n} catch (e) {\r\n try {\r\n require(\"ts-node\").register({\r\n project: path.join(__dirname, \"..\", \"src\", \"tsconfig.json\")\r\n });\r\n require(\"../src/glue/js\");\r\n assemblyscript = require(\"../src\");\r\n isDev = true;\r\n } catch (e) {\r\n // last resort: browser bundle under node (relative to 'dist/')\r\n assemblyscript = require(\"./assemblyscript\");\r\n isDev = false;\r\n }\r\n}\r\n\r\n/** Whether this is a webpack bundle or not. */\r\nexports.isBundle = typeof BUNDLE_VERSION === \"string\";\r\n\r\n/** Whether asc runs the sources directly or not. */\r\nexports.isDev = isDev;\r\n\r\n/** AssemblyScript veresion. */\r\nexports.version = exports.isBundle ? BUNDLE_VERSION\r\n : require(\"../package.json\").version;\r\n\r\n/** Available options. */\r\nexports.options = require(\"./asc.json\");\r\n\r\n/** Common root used in source maps. */\r\nexports.sourceMapRoot = \"assemblyscript:///\";\r\n\r\n/** Prefix used for library files. */\r\nexports.libraryPrefix = assemblyscript.LIBRARY_PREFIX;\r\n\r\n/** Default Binaryen optimization level. */\r\nexports.defaultOptimizeLevel = 2;\r\n\r\n/** Default Binaryen shrink level. */\r\nexports.defaultShrinkLevel = 1;\r\n\r\n/** Bundled library files, if any. */\r\nexports.libraryFiles = exports.isBundle ? BUNDLE_LIBRARY : {};\r\n\r\n/** Bundled definition files, if any. */\r\nexports.definitionFiles = exports.isBundle ? BUNDLE_DEFINITIONS : {};\r\n\r\n/** Runs the command line utility using the specified arguments array. */\r\nexports.main = function main(argv, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n const stdout = options.stdout || process.stdout;\r\n const stderr = options.stderr || process.stderr;\r\n const readFile = options.readFile || readFileNode;\r\n const writeFile = options.writeFile || writeFileNode;\r\n const listFiles = options.listFiles || listFilesNode;\r\n const stats = options.stats || createStats();\r\n\r\n // All of the above must be specified in browser environments\r\n if (!stdout)\r\n throw Error(\"'options.stdout' must be specified\");\r\n if (!stderr)\r\n throw Error(\"'options.stderr' must be specified\");\r\n if (!fs.readFileSync) {\r\n if (readFile === readFileNode)\r\n throw Error(\"'options.readFile' must be specified\");\r\n if (writeFile === writeFileNode)\r\n throw Error(\"'options.writeFile' must be specified\");\r\n if (listFiles === listFilesNode)\r\n throw Error(\"'options.listFiles' must be specified\");\r\n }\r\n\r\n const args = parseArguments(argv);\r\n const indent = 24;\r\n\r\n // Use default callback if none is provided\r\n if (!callback) callback = function defaultCallback(err) {\r\n var code = 0;\r\n if (err) {\r\n stderr.write(err.stack + os.EOL);\r\n code = 1;\r\n }\r\n return code;\r\n };\r\n\r\n // Just print the version if requested\r\n if (args.version) {\r\n stdout.write(\"Version \" + exports.version + (isDev ? \"-dev\" : \"\") + os.EOL);\r\n return callback(null);\r\n }\r\n // Print the help message if requested or no source files are provided\r\n if (args.help || args._.length < 1) {\r\n const opts = [];\r\n Object.keys(exports.options).forEach(name => {\r\n var option = exports.options[name];\r\n var text = \" \";\r\n text += \"--\" + name;\r\n if (option.aliases && option.aliases[0].length === 1)\r\n text += \", -\" + option.aliases[0];\r\n while (text.length < indent)\r\n text += \" \";\r\n if (Array.isArray(option.desc)) {\r\n opts.push(text + option.desc[0] + option.desc.slice(1).map(line => {\r\n for (let i = 0; i < indent; ++i)\r\n line = \" \" + line;\r\n return os.EOL + line;\r\n }).join(\"\"));\r\n } else\r\n opts.push(text + option.desc);\r\n });\r\n\r\n (args.help ? stdout : stderr).write([\r\n \"Version \" + exports.version + (isDev ? \"-dev\" : \"\"),\r\n \"Syntax: asc [entryFile ...] [options]\",\r\n \"\",\r\n \"Examples: asc hello.ts\",\r\n \" asc hello.ts -b hello.wasm -t hello.wat\",\r\n \" asc hello1.ts hello2.ts -b -O > hello.wasm\",\r\n \"\",\r\n \"Options:\"\r\n ].concat(opts).join(os.EOL) + os.EOL);\r\n return callback(null);\r\n }\r\n\r\n // Set up base directory\r\n const baseDir = args.baseDir ? path.resolve(args.baseDir) : process.cwd();\r\n\r\n // Include standard library if --noLib isn't set\r\n const stdLibDir = path.join(__dirname, \"..\", \"std\", \"assembly\");\r\n const libDirs = args.noLib ? [] : [ stdLibDir ];\r\n\r\n // Include custom library components (with or without stdlib)\r\n if (args.lib) {\r\n if (typeof args.lib === \"string\")\r\n args.lib = args.lib.split(\",\");\r\n Array.prototype.push.apply(libDirs, args.lib.map(trim));\r\n }\r\n\r\n // Begin parsing\r\n var parser = null;\r\n\r\n // Include entry files\r\n for (let i = 0, k = args._.length; i < k; ++i) {\r\n const filename = args._[i];\r\n\r\n let sourcePath = filename.replace(/\\\\/g, \"/\").replace(/(\\.ts|\\/)$/, \"\");\r\n\r\n // Try entryPath.ts, then entryPath/index.ts\r\n let sourceText = readFile(path.join(baseDir, sourcePath) + \".ts\");\r\n if (sourceText === null) {\r\n sourceText = readFile(path.join(baseDir, sourcePath, \"index.ts\"));\r\n if (sourceText === null)\r\n return callback(Error(\"Entry file '\" + sourcePath + \".ts' not found.\"));\r\n else\r\n sourcePath += \"/index.ts\";\r\n } else\r\n sourcePath += \".ts\";\r\n\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(sourceText, sourcePath, true, parser);\r\n });\r\n\r\n while ((sourcePath = parser.nextFile()) != null) {\r\n let found = false;\r\n\r\n // Load library file if explicitly requested\r\n if (sourcePath.startsWith(exports.libraryPrefix)) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n if (exports.libraryFiles.hasOwnProperty(sourcePath))\r\n sourceText = exports.libraryFiles[sourcePath];\r\n else {\r\n sourceText = readFile(path.join(\r\n libDirs[i],\r\n sourcePath.substring(exports.libraryPrefix.length) + \".ts\")\r\n );\r\n if (sourceText !== null) {\r\n sourcePath += \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Otherwise try nextFile.ts, nextFile/index.ts, (lib)/nextFile.ts\r\n } else {\r\n sourceText = readFile(path.join(baseDir, sourcePath + \".ts\"));\r\n if (sourceText === null) {\r\n sourceText = readFile(path.join(baseDir, sourcePath, \"index.ts\"));\r\n if (sourceText === null) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n const dir = libDirs[i];\r\n const key = exports.libraryPrefix + sourcePath;\r\n if (exports.libraryFiles.hasOwnProperty(key))\r\n sourceText = exports.libraryFiles[key];\r\n else {\r\n sourceText = readFile(path.join(dir, sourcePath + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + sourcePath + \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n if (sourceText === null)\r\n return callback(\r\n Error(\"Import file '\" + sourcePath + \".ts' not found.\")\r\n );\r\n } else\r\n sourcePath += \"/index.ts\";\r\n } else\r\n sourcePath += \".ts\";\r\n }\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n assemblyscript.parseFile(sourceText, sourcePath, false, parser);\r\n });\r\n }\r\n if (checkDiagnostics(parser, stderr))\r\n return callback(Error(\"Parse error\"));\r\n }\r\n\r\n // Include (other) library components\r\n var hasBundledLibrary = false;\r\n if (!args.noLib)\r\n Object.keys(exports.libraryFiles).forEach(libPath => {\r\n if (libPath.lastIndexOf(\"/\") >= exports.libraryPrefix.length)\r\n return;\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n exports.libraryFiles[libPath],\r\n libPath + \".ts\",\r\n false,\r\n parser\r\n );\r\n });\r\n hasBundledLibrary = true;\r\n });\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n if (i === 0 && hasBundledLibrary) continue;\r\n let libDir = libDirs[i];\r\n let libFiles = listFiles(libDir);\r\n for (let j = 0, l = libFiles.length; j < l; ++j) {\r\n let libPath = libFiles[j];\r\n let libText = readFile(path.join(libDir, libPath));\r\n if (libText === null)\r\n return callback(Error(\"Library file '\" + libPath + \"' not found.\"));\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n libText,\r\n exports.libraryPrefix + libPath,\r\n false,\r\n parser\r\n );\r\n });\r\n }\r\n }\r\n\r\n // Begin compilation\r\n const compilerOptions = assemblyscript.createOptions();\r\n assemblyscript.setTarget(compilerOptions, 0);\r\n assemblyscript.setNoTreeShaking(compilerOptions, !!args.noTreeShaking);\r\n assemblyscript.setNoAssert(compilerOptions, !!args.noAssert);\r\n assemblyscript.setNoMemory(compilerOptions, !!args.noMemory);\r\n assemblyscript.setImportMemory(compilerOptions, !!args.importMemory);\r\n assemblyscript.setMemoryBase(compilerOptions, args.memoryBase >>> 0);\r\n assemblyscript.setSourceMap(compilerOptions, args.sourceMap != null);\r\n\r\n var module;\r\n stats.compileCount++;\r\n try {\r\n stats.compileTime += measure(() => {\r\n module = assemblyscript.compile(parser, compilerOptions);\r\n });\r\n } catch (e) {\r\n return callback(e);\r\n }\r\n if (checkDiagnostics(parser, stderr)) {\r\n if (module) module.dispose();\r\n return callback(Error(\"Compile error\"));\r\n }\r\n\r\n // Validate the module if requested\r\n if (args.validate) {\r\n stats.validateCount++;\r\n stats.validateTime += measure(() => {\r\n if (!module.validate()) {\r\n module.dispose();\r\n return callback(Error(\"Validate error\"));\r\n }\r\n });\r\n }\r\n\r\n // Set Binaryen-specific options\r\n if (args.trapMode === \"clamp\") {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses([ \"trap-mode-clamp\" ]);\r\n });\r\n } else if (args.trapMode === \"js\") {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses([ \"trap-mode-js\" ]);\r\n });\r\n } else if (args.trapMode !== \"allow\") {\r\n module.dispose();\r\n return callback(Error(\"Unsupported trap mode\"));\r\n }\r\n\r\n var optimizeLevel = -1;\r\n var shrinkLevel = 0;\r\n var debugInfo = !args.noDebug;\r\n\r\n if (args.optimize !== false) {\r\n if (typeof args.optimize === \"number\")\r\n optimizeLevel = args.optimize;\r\n else if (args[\"0\"])\r\n optimizeLevel = 0;\r\n else if (args[\"1\"])\r\n optimizeLevel = 1;\r\n else if (args[\"2\"])\r\n optimizeLevel = 2;\r\n else if (args[\"3\"])\r\n optimizeLevel = 3;\r\n else if (args.optimize === true) {\r\n optimizeLevel = exports.defaultOptimizeLevel;\r\n shrinkLevel = exports.defaultShrinkLevel;\r\n } else\r\n optimizeLevel = 0;\r\n }\r\n if (args[\"s\"])\r\n shrinkLevel = 1;\r\n else if (args[\"z\"])\r\n shrinkLevel = 2;\r\n\r\n if (typeof args.optimizeLevel === \"number\")\r\n optimizeLevel = args.optimizeLevel;\r\n if (typeof args.shrinkLevel === \"number\")\r\n shrinkLevel = args.shrinkLevel;\r\n else if (args.shrinkLevel === \"s\")\r\n shrinkLevel = 1;\r\n else if (args.shrinkLevel === \"z\")\r\n shrinkLevel = 2;\r\n\r\n module.setOptimizeLevel(optimizeLevel > 0 ? optimizeLevel : 0);\r\n module.setShrinkLevel(shrinkLevel);\r\n module.setDebugInfo(debugInfo);\r\n\r\n var runPasses = [];\r\n if (args.runPasses) {\r\n if (typeof args.runPasses === \"string\")\r\n args.runPasses = args.runPasses.split(\",\");\r\n if (args.runPasses.length)\r\n args.runPasses.forEach(pass => {\r\n if (runPasses.indexOf(pass) < 0)\r\n runPasses.push(pass);\r\n });\r\n }\r\n\r\n // Optimize the module if requested\r\n if (optimizeLevel >= 0) {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.optimize();\r\n });\r\n }\r\n\r\n // Run additional passes if requested\r\n if (runPasses.length) {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses(runPasses.map(pass => pass.trim()));\r\n });\r\n }\r\n\r\n // Prepare output\r\n if (!args.noEmit) {\r\n let hasStdout = false;\r\n\r\n if (args.outFile != null) {\r\n if (/\\.was?t$/.test(args.outFile) && args.textFile == null)\r\n args.textFile = args.outFile;\r\n else if (/\\.js$/.test(args.outFile) && args.asmjsFile == null)\r\n args.asmjsFile = args.outFile;\r\n else if (args.binaryFile == null)\r\n args.binaryFile = args.outFile;\r\n }\r\n\r\n // Write binary\r\n if (args.binaryFile != null) {\r\n let sourceMapURL = args.sourceMap != null\r\n ? args.sourceMap.length\r\n ? args.sourceMap\r\n : path.basename(args.binaryFile) + \".map\"\r\n : null;\r\n\r\n let binary;\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n binary = module.toBinary(sourceMapURL)\r\n });\r\n\r\n if (args.binaryFile.length) {\r\n writeFile(path.join(baseDir, args.binaryFile), binary.output);\r\n } else {\r\n writeStdout(binary.output);\r\n hasStdout = true;\r\n }\r\n\r\n // Post-process source map\r\n if (binary.sourceMap != null) {\r\n if (args.binaryFile.length) {\r\n let sourceMap = JSON.parse(binary.sourceMap);\r\n sourceMap.sourceRoot = exports.sourceMapRoot;\r\n sourceMap.sources.forEach((name, index) => {\r\n let text = null;\r\n if (name.startsWith(exports.libraryPrefix)) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n text = readFile(path.join(\r\n libDirs[i],\r\n name.substring(exports.libraryPrefix.length))\r\n );\r\n if (text !== null) break;\r\n }\r\n } else\r\n text = readFile(path.join(baseDir, name));\r\n if (text === null)\r\n return callback(Error(\"Source file '\" + name + \"' not found.\"));\r\n if (!sourceMap.sourceContents)\r\n sourceMap.sourceContents = [];\r\n sourceMap.sourceContents[index] = text;\r\n });\r\n writeFile(path.join(\r\n baseDir,\r\n path.dirname(args.binaryFile),\r\n path.basename(sourceMapURL)\r\n ), JSON.stringify(sourceMap));\r\n } else {\r\n stderr.write(\"Skipped source map (stdout already occupied)\" + os.EOL);\r\n }\r\n }\r\n }\r\n\r\n // Write text\r\n if (\r\n args.textFile != null || (\r\n args.binaryFile == null &&\r\n args.asmjsFile == null\r\n )\r\n ) {\r\n let text;\r\n if (args.textFile && args.textFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n text = module.toText();\r\n });\r\n writeFile(path.join(baseDir, args.textFile), text);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n text = module.toText()\r\n });\r\n writeStdout(text);\r\n hasStdout = true;\r\n }\r\n }\r\n\r\n // Write asm.js\r\n if (args.asmjsFile != null) {\r\n let asm;\r\n if (args.asmjsFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n asm = module.toAsmjs();\r\n });\r\n writeFile(path.join(baseDir, args.asmjsFile), asm);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n asm = module.toAsmjs();\r\n });\r\n writeStdout(asm);\r\n hasStdout = true;\r\n }\r\n }\r\n }\r\n\r\n module.dispose();\r\n if (args.measure)\r\n printStats(stats, stderr);\r\n return callback(null);\r\n\r\n function readFileNode(filename) {\r\n try {\r\n var text;\r\n stats.readCount++;\r\n stats.readTime += measure(() => {\r\n text = fs.readFileSync(filename, { encoding: \"utf8\" });\r\n });\r\n return text;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n function writeFileNode(filename, contents) {\r\n try {\r\n stats.writeCount++;\r\n stats.writeTime += measure(() => {\r\n if (typeof contents === \"string\")\r\n fs.writeFileSync(filename, contents, { encoding: \"utf8\" } );\r\n else\r\n fs.writeFileSync(filename, contents);\r\n });\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n function listFilesNode(dirname) {\r\n var files;\r\n try {\r\n stats.readTime += measure(() => {\r\n files = require(\"glob\").sync(\"*.ts\", { cwd: dirname });\r\n });\r\n return files;\r\n } catch (e) {\r\n return [];\r\n }\r\n }\r\n\r\n function writeStdout(contents) {\r\n if (!writeStdout.used) {\r\n stats.writeCount++;\r\n writeStdout.used = true;\r\n }\r\n stats.writeTime += measure(() => {\r\n if (typeof contents === \"string\")\r\n stdout.write(contents, { encoding: \"utf8\" });\r\n else\r\n stdout.write(contents);\r\n });\r\n }\r\n}\r\n\r\n/** Parses the specified command line arguments. */\r\nfunction parseArguments(argv) {\r\n const opts = {};\r\n Object.keys(exports.options).forEach(key => {\r\n const opt = exports.options[key];\r\n if (opt.aliases)\r\n (opts.alias || (opts.alias = {}))[key] = opt.aliases;\r\n if (opt.default !== undefined)\r\n (opts.default || (opts.default = {}))[key] = opt.default;\r\n if (opt.type === \"string\")\r\n (opts.string || (opts.string = [])).push(key);\r\n else if (opt.type === \"boolean\")\r\n (opts.boolean || (opts.boolean = [])).push(key);\r\n });\r\n return require(\"minimist\")(argv, opts);\r\n}\r\n\r\nexports.parseArguments = parseArguments;\r\n\r\n/** Checks diagnostics emitted so far for errors. */\r\nfunction checkDiagnostics(emitter, stderr) {\r\n var diagnostic;\r\n var hasErrors = false;\r\n while ((diagnostic = assemblyscript.nextDiagnostic(emitter)) != null) {\r\n stderr.write(\r\n assemblyscript.formatDiagnostic(diagnostic, stderr.isTTY, true) +\r\n os.EOL + os.EOL\r\n );\r\n if (assemblyscript.isError(diagnostic))\r\n hasErrors = true;\r\n }\r\n return hasErrors;\r\n}\r\n\r\nexports.checkDiagnostics = checkDiagnostics;\r\n\r\n/** Creates an empty set of stats. */\r\nfunction createStats() {\r\n return {\r\n readTime: 0,\r\n readCount: 0,\r\n writeTime: 0,\r\n writeCount: 0,\r\n parseTime: 0,\r\n parseCount: 0,\r\n compileTime: 0,\r\n compileCount: 0,\r\n emitTime: 0,\r\n emitCount: 0,\r\n validateTime: 0,\r\n validateCount: 0,\r\n optimizeTime: 0,\r\n optimizeCount: 0\r\n };\r\n}\r\n\r\nexports.createStats = createStats;\r\n\r\nif (!process.hrtime)\r\n process.hrtime = require(\"browser-process-hrtime\");\r\n\r\n/** Measures the execution time of the specified function. */\r\nfunction measure(fn) {\r\n const start = process.hrtime();\r\n fn();\r\n const times = process.hrtime(start);\r\n return times[0] * 1e9 + times[1];\r\n}\r\n\r\nexports.measure = measure;\r\n\r\n/** Formats and prints out the contents of a set of stats. */\r\nfunction printStats(stats, output) {\r\n function format(time, count) {\r\n return time ? (time / 1e6).toFixed(3) + \" ms\" : \"N/A\";\r\n }\r\n (output || process.stdout).write([\r\n \"I/O Read : \" + format(stats.readTime, stats.readCount),\r\n \"I/O Write : \" + format(stats.writeTime, stats.writeCount),\r\n \"Parse : \" + format(stats.parseTime, stats.parseCount),\r\n \"Compile : \" + format(stats.compileTime, stats.compileCount),\r\n \"Emit : \" + format(stats.emitTime, stats.emitCount),\r\n \"Validate : \" + format(stats.validateTime, stats.validateCount),\r\n \"Optimize : \" + format(stats.optimizeTime, stats.optimizeCount)\r\n ].join(os.EOL) + os.EOL);\r\n}\r\n\r\nexports.printStats = printStats;\r\n\r\n/** Creates a memory stream that can be used in place of stdout/stderr. */\r\nfunction createMemoryStream(fn) {\r\n var stream = [];\r\n stream.write = function(chunk) {\r\n if (typeof chunk === \"string\") {\r\n this.push(Buffer.from(chunk, \"utf8\"));\r\n } else {\r\n this.push(chunk);\r\n }\r\n if (fn) fn(chunk);\r\n };\r\n stream.toBuffer = function() {\r\n return Buffer.concat(this);\r\n };\r\n stream.toString = function() {\r\n return this.toBuffer().toString(\"utf8\");\r\n };\r\n return stream;\r\n}\r\n\r\nexports.createMemoryStream = createMemoryStream;\r\n\r\n/** Compatible TypeScript compiler options. */\r\nexports.tscOptions = {\r\n alwaysStrict: true,\r\n noImplicitAny: true,\r\n noImplicitReturns: true,\r\n noImplicitThis: true,\r\n noEmitOnError: true,\r\n strictNullChecks: true,\r\n experimentalDecorators: true,\r\n target: \"esnext\",\r\n module: \"commonjs\",\r\n noLib: true,\r\n types: [],\r\n allowJs: false\r\n};\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 31c7a8b1..ca8c5e0e 100644 --- a/dist/assemblyscript.js +++ b/dist/assemblyscript.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=11)}([function(e,t,r){"use strict";function n(e){if(!e)return 0;for(var t=allocate_memory(e.length),r=t,n=0,i=e.length;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function a(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&o<=57343&&n+1>>6),store(r++,128|63&o)):o<=65535?(store(r++,224|o>>>12),store(r++,128|o>>>6&63),store(r++,128|63&o)):o<=2097151?(store(r++,240|o>>>18),store(r++,128|o>>>12&63),store(r++,128|o>>>6&63),store(r++,128|63&o)):o<=67108863?(store(r++,248|o>>>24),store(r++,128|o>>>18&63),store(r++,128|o>>>12&63),store(r++,128|o>>>6&63),store(r++,128|63&o)):(store(r++,252|o>>>30),store(r++,128|o>>>24&63),store(r++,128|o>>>18&63),store(r++,128|o>>>12&63),store(r++,128|o>>>6&63),store(r++,128|63&o))}return store(r,0),t}function s(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function c(e,t){for(var r=new Uint8Array(t),n=0;n=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=o(e),a=i(t);try{return _BinaryenCall(this.ref,n,a,t&&t.length||0,r)}finally{free_memory(a),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=o(e),a=i(t);try{return _BinaryenCallImport(this.ref,n,a,t&&t.length||0,r)}finally{free_memory(a),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=o(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var a=o(e),s=i(r);try{return _BinaryenAddFunction(this.ref,a,t,s,r.length,n)}finally{free_memory(s),free_memory(a)}},e.prototype.removeFunction=function(e){var t=o(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionExport=function(e,t){var r=o(e),n=o(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=o(e),n=o(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=o(e),n=o(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=o(e),n=o(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=o(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=o(e),a=o(t),s=o(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=o(e),i=o(t),a=o(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=o(e),i=o(t),a=o(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=o(e),a=o(t),s=o(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=o(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,a,s){void 0===s&&(s=null);for(var c=o(s),p=r.length,u=new Array(p),h=new Array(p),d=new Array(p),_=0;_=0;--_)free_memory(u[_]);free_memory(c)}},e.prototype.setFunctionTable=function(e){var t=i(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),a=0;a=0;--a)free_memory(n[a])}},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.out,r=o(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=s(t);var a=s(t+4);i=s(t+8);var u=new m;return u.output=c(n,a),u.sourceMap=p(i),u}finally{r&&free_memory(r),n&&free_memory(n),i&&free_memory(i)}},e.prototype.toText=function(){throw new Error("not implemented")},e.prototype.toAsmjs=function(){throw new Error("not implemented")},e.prototype.dispose=function(){this.ref&&(_BinaryenModuleDispose(this.ref),free_memory(this.out))},e.prototype.createRelooper=function(){return y.create(this)},e.prototype.cloneExpression=function(e,t,r){if(void 0===t&&(t=!1),void 0===r&&(r=i32.MAX_VALUE),r<0)return 0;r-=1;var n,i;switch(_BinaryenExpressionGetId(e)){case h.Const:switch(_BinaryenExpressionGetType(e)){case u.I32:return this.createI32(_BinaryenConstGetValueI32(e));case u.I64:return this.createI64(_BinaryenConstGetValueI64Low(e),_BinaryenConstGetValueI64High(e));case u.F32:return this.createF32(_BinaryenConstGetValueF32(e));case u.F64:return this.createF64(_BinaryenConstGetValueF64(e));default:throw new Error("concrete type expected")}case h.GetLocal:return _BinaryenGetLocal(this.ref,_BinaryenGetLocalGetIndex(e),_BinaryenExpressionGetType(e));case h.GetGlobal:var a=_BinaryenGetGlobalGetName(e);if(!a)break;return _BinaryenGetGlobal(this.ref,a,_BinaryenExpressionGetType(e));case h.Load:if(!(n=this.cloneExpression(_BinaryenLoadGetPtr(e),t,r)))break;return _BinaryenLoadIsAtomic(e)?_BinaryenAtomicLoad(this.ref,_BinaryenLoadGetBytes(e),_BinaryenLoadGetOffset(e),_BinaryenExpressionGetType(e),n):_BinaryenLoad(this.ref,_BinaryenLoadGetBytes(e),_BinaryenLoadIsSigned(e)?1:0,_BinaryenLoadGetOffset(e),_BinaryenLoadGetAlign(e),_BinaryenExpressionGetType(e),n);case h.Unary:if(!(n=this.cloneExpression(_BinaryenUnaryGetValue(e),t,r)))break;return _BinaryenUnary(this.ref,_BinaryenUnaryGetOp(e),n);case h.Binary:if(!(n=this.cloneExpression(_BinaryenBinaryGetLeft(e),t,r)))break;if(!(i=this.cloneExpression(_BinaryenBinaryGetRight(e),t,r)))break;return _BinaryenBinary(this.ref,_BinaryenBinaryGetOp(e),n,i)}return 0},e.prototype.addDebugInfoFile=function(e){var t=o(e);try{return _BinaryenModuleAddDebugInfoFileName(this.ref,t)}finally{free_memory(t)}},e.prototype.getDebugInfoFile=function(e){return p(_BinaryenModuleGetDebugInfoFileName(this.ref,e))},e.prototype.setDebugLocation=function(e,t,r,n,i){_BinaryenFunctionSetDebugLocation(e,t,r,n,i)},e.MAX_MEMORY_WASM32=65535,e}();t.Module=_;var y=function(){function e(){}return e.create=function(t){var r=new e;return r.module=t,r.ref=_RelooperCreate(),r},e.createStub=function(t){var r=new e;return r.module=t,r.ref=0,r},e.prototype.addBlock=function(e){return _RelooperAddBlock(this.ref,e)},e.prototype.addBranch=function(e,t,r,n){void 0===r&&(r=0),void 0===n&&(n=0),_RelooperAddBranch(e,t,r,n)},e.prototype.addBlockWithSwitch=function(e,t){return _RelooperAddBlockWithSwitch(this.ref,e,t)},e.prototype.addBranchForSwitch=function(e,t,r,n){void 0===n&&(n=0);var a=i(r);try{_RelooperAddBranchForSwitch(e,t,a,r.length,n)}finally{free_memory(a)}},e.prototype.renderAndDispose=function(e,t){return _RelooperRenderAndDispose(this.ref,e,t,this.module.ref)},e}();t.Relooper=y,t.readInt=s,t.readBuffer=c,t.readString=p;var m=function(){function e(){}return e}()},function(e,t,r){"use strict";function n(e){switch(e){case u.INFO:return"INFO";case u.WARNING:return"WARNING";case u.ERROR:return"ERROR";default:return""}}function i(e){switch(e){case u.INFO:return l;case u.WARNING:return h;case u.ERROR:return d;default:return""}}function a(e,t,r){void 0===t&&(t=!1),void 0===r&&(r=!1);var a="";e.range&&r&&(a=o(e.range,t));var s=[];if(t&&s.push(i(e.category)),s.push(n(e.category)),t&&s.push(_),s.push(e.code<1e3?" AS":" TS"),s.push(e.code.toString(10)),s.push(": "),s.push(e.message),e.range){var c=e.range;r&&(s.push("\n"),s.push(a)),s.push("\n"),s.push(" in "),s.push(c.source.normalizedPath),s.push("("),s.push(c.line.toString(10)),s.push(","),s.push(c.column.toString(10)),s.push(")")}return s.join("")}function o(e,t){void 0===t&&(t=!1);for(var r=e.source.text,n=r.length,i=e.start,a=e.end;i>0&&!c.isLineBreak(r.charCodeAt(i-1));)i--;for(;a=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o};Object.defineProperty(t,"__esModule",{value:!0});var o=r(1),s=r(5),c=r(6),p=r(0);t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.LIBRARY_SUBST="(lib)",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER;var u=function(){function e(){}return e}(),l=function(){function e(){}return e}(),h=new Map,d=function(e){function r(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elements=new Map,r.types=h,r.typeAliases=new Map,r.exports=new Map,r.sources=[],r}return n(r,e),r.prototype.initialize=function(e){this.options=e,this.types=new Map([["i8",s.Type.i8],["i16",s.Type.i16],["i32",s.Type.i32],["i64",s.Type.i64],["isize",e.isizeType],["u8",s.Type.u8],["u16",s.Type.u16],["u32",s.Type.u32],["u64",s.Type.u64],["usize",e.usizeType],["bool",s.Type.bool],["f32",s.Type.f32],["f64",s.Type.f64],["void",s.Type.void],["number",s.Type.f64],["boolean",s.Type.bool]]);for(var t=new Map,r=new Array,n=new Array,p=0,u=this.sources.length;p",a+="<"+_+">")}else if(r){var y=r.get(a);if(y)return y}var E;if((E=this.types.get(c))||(E=this.types.get(a)))return E;var f=this.typeAliases.get(a);return f&&(E=this.resolveType(f,null,n))?E:(n&&this.error(o.DiagnosticCode.Cannot_find_name_0,e.name.range,a),null)},r.prototype.resolveTypeArguments=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=e.length,a=t?t.length:0;if(i!=a)return a?this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,c.Range.join(t[0].range,t[a-1].range),i.toString(10),a.toString(10)):n&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var s=new Array(i),p=0;p");var b=null;if(this.classPrototype&&!(b=this.classPrototype.resolve(this.classTypeArguments,t)))return null;var k;if(this.is(E.SETTER)||this.is(E.CONSTRUCTOR))k=s.Type.void;else{g=assert(o.returnType);var x=this.program.resolveType(g,t,!0);if(!x)return null;k=x}return n=new O(this,C,e,A,k,b),n.contextualTypeArguments=t,this.instances.set(r,n),n;var L,R},t.prototype.resolveInclTypeArguments=function(e,t,r){var n=null;return!this.is(E.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},t.prototype.resolvePartial=function(e){if(!this.classPrototype)throw new Error("partially resolved instance method must reference its class prototype");if(e&&e.length){var r=new t(this.program,this.simpleName,this.internalName,this.declaration,this.classPrototype);return r.flags=this.flags,r.classTypeArguments=e,r}return this},t.prototype.toString=function(){return this.simpleName},t}(f);t.FunctionPrototype=C;var O=function(e){function t(t,r,n,o,s,c){void 0===c&&(c=null);var p=e.call(this,t.program,t.simpleName,r)||this;if(p.kind=m.FUNCTION,p.locals=new Map,p.additionalLocals=[],p.breakContext=null,p.debugLocations=null,p.ref=0,p.functionTableIndex=-1,p.nextBreakId=0,p.breakStack=null,p.tempI32s=null,p.tempI64s=null,p.tempF32s=null,p.tempF64s=null,p.prototype=t,p.typeArguments=n,p.parameters=o||[],p.returnType=s,p.instanceMethodOf=c,p.flags=t.flags,!t.is(E.BUILTIN)&&!t.is(E.DECLARED)){var u=0;if(c){if(assert(p.is(E.INSTANCE)),p.locals.set("this",new S(t.program,"this",u++,c.type)),c.contextualTypeArguments){p.contextualTypeArguments||(p.contextualTypeArguments=new Map);try{for(var l=i(c.contextualTypeArguments),h=l.next();!h.done;h=l.next()){var d=a(h.value,2),_=d[0],y=d[1];p.contextualTypeArguments.set(_,y)}}catch(e){I={error:e}}finally{try{h&&!h.done&&(v=l.return)&&v.call(l)}finally{if(I)throw I.error}}}}else assert(!p.is(E.INSTANCE));for(var f=0,T=p.parameters.length;f0)return t[t.length-1];var r=this.addLocal(e);return t.push(r),r},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap){var r=this.debugLocations;if(r)for(var n=0,i=r.length;n"),n=new R(this,A,e,E),n.contextualTypeArguments=t,this.instances.set(r,n);var I=0;if(E&&(I=E.currentMemoryOffset,E.members)){n.members||(n.members=new Map);try{for(var v=i(E.members.values()),N=v.next();!N.done;N=v.next()){var S=N.value;n.members.set(S.simpleName,S)}}catch(e){G={error:e}}finally{try{N&&!N.done&&(K=v.return)&&K.call(v)}finally{if(G)throw G.error}}}if(this.constructorPrototype){var C=this.constructorPrototype.resolvePartial(e);C&&(n.constructorInstance=C.resolve())}if(this.instanceMembers)try{for(var O=i(this.instanceMembers.values()),b=O.next();!b.done;b=O.next()){var L=b.value;switch(L.kind){case m.FIELD_PROTOTYPE:n.members||(n.members=new Map);var B=L.declaration;if(!B.type)throw new Error("type expected");var U=this.program.resolveType(B.type,n.contextualTypeArguments);if(U){var F=new k(L,L.internalName,U);switch(U.byteSize){case 1:break;case 2:1&I&&++I;break;case 4:3&I&&(I=1+(3|I));break;case 8:7&I&&(I=1+(7|I));break;default:assert(!1)}F.memoryOffset=I,I+=U.byteSize,n.members.set(L.simpleName,F)}break;case m.FUNCTION_PROTOTYPE:n.members||(n.members=new Map);var D=L.resolvePartial(e);D&&n.members.set(L.simpleName,D);break;case m.PROPERTY:n.members||(n.members=new Map),assert(L.getterPrototype);var w=new x(this.program,L.simpleName,L.internalName,this);w.getterPrototype=L.getterPrototype.resolvePartial(e),L.setterPrototype&&(w.setterPrototype=L.setterPrototype.resolvePartial(e)),n.members.set(L.simpleName,w);break;default:throw new Error("instance member expected")}}}catch(e){z={error:e}}finally{try{b&&!b.done&&(H=O.return)&&H.call(O)}finally{if(z)throw z.error}}return n.currentMemoryOffset=I,n;var P,M,G,K,z,H},t.prototype.resolveInclTypeArguments=function(e,t,r){var n=null;if(this.is(E.GENERIC)){if(assert(null!=e&&0!=e.length),!(n=this.program.resolveTypeArguments(this.declaration.typeParameters,e,t,r)))return null}else assert(null==e||!e.length);return this.resolve(n,t)},t.prototype.toString=function(){return this.simpleName},t}(f);t.ClassPrototype=L;var R=function(e){function t(t,r,n,o){void 0===n&&(n=null),void 0===o&&(o=null);var s=e.call(this,t.program,t.simpleName,r)||this;if(s.kind=m.CLASS,s.contextualTypeArguments=null,s.currentMemoryOffset=0,s.constructorInstance=null,s.prototype=t,s.flags=t.flags,s.typeArguments=n,s.type=t.program.options.usizeType.asClass(s),s.base=o,o&&o.contextualTypeArguments){s.contextualTypeArguments||(s.contextualTypeArguments=new Map);try{for(var c=i(o.contextualTypeArguments),p=c.next();!p.done;p=c.next()){var u=a(p.value,2),l=u[0],h=u[1];s.contextualTypeArguments.set(l,h)}}catch(e){f={error:e}}finally{try{p&&!p.done&&(T=c.return)&&T.call(c)}finally{if(f)throw f.error}}}var d,_,y=s.prototype.declaration;if(y){var E=y.typeParameters;if(n){if((_=n.length)!=E.length)throw new Error("type argument count mismatch");if(_)for(s.contextualTypeArguments||(s.contextualTypeArguments=new Map),d=0;d<_;++d)s.contextualTypeArguments.set(E[d].name.text,n[d])}else if(E.length)throw new Error("type argument count mismatch")}return s;var f,T}return n(t,e),t.prototype.isAssignableTo=function(e){var t=this;do{if(t==e)return!0}while(t=t.base);return!1},t.prototype.toString=function(){return this.prototype.simpleName},t}(f);t.Class=R;var B=function(e){function t(t,r,n,i){var a=e.call(this,t,r,n,i)||this;return a.kind=m.INTERFACE_PROTOTYPE,a}return n(t,e),t}(L);t.InterfacePrototype=B;var U=function(e){function t(t,r,n,i){void 0===n&&(n=[]),void 0===i&&(i=null);var a=e.call(this,t,r,n,i)||this;return a.kind=m.INTERFACE,a}return n(t,e),t}(R);t.Interface=U;!function(e){e[e.NONE=0]="NONE",e[e.RETURNS=1]="RETURNS",e[e.POSSIBLY_THROWS=2]="POSSIBLY_THROWS",e[e.POSSIBLY_BREAKS=4]="POSSIBLY_BREAKS",e[e.POSSIBLY_CONTINUES=8]="POSSIBLY_CONTINUES"}(t.FlowFlags||(t.FlowFlags={}));var F=function(){function e(){this.scopedLocals=null}return e.create=function(t){var r=new e;return r.parent=null,r.flags=0,r.currentFunction=t,r.continueLabel=null,r.breakLabel=null,r},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.set=function(e){this.flags|=e},e.prototype.enterBranchOrScope=function(){var t=new e;return t.parent=this,t.flags=this.flags,t.currentFunction=this.currentFunction,t.continueLabel=this.continueLabel,t.breakLabel=this.breakLabel,t},e.prototype.leaveBranchOrScope=function(){var e=assert(this.parent);if(this.scopedLocals){try{for(var t=i(this.scopedLocals.values()),r=t.next();!r.done;r=t.next()){var n=r.value;this.currentFunction.freeTempLocal(n)}}catch(e){a={error:e}}finally{try{r&&!r.done&&(o=t.return)&&o.call(t)}finally{if(a)throw a.error}}this.scopedLocals=null}return this.is(2)&&e.set(2),this.is(4)&&e.breakLabel==this.breakLabel&&e.set(4),this.is(8)&&e.continueLabel==this.continueLabel&&e.set(8),e;var a,o},e.prototype.addScopedLocal=function(e,t,r){var n=this.currentFunction.getTempLocal(t);if(this.scopedLocals){if(this.scopedLocals.has(e))return void this.currentFunction.program.error(o.DiagnosticCode.Duplicate_identifier_0,r.range)}else this.scopedLocals=new Map;this.scopedLocals.set(e,n)},e.prototype.getScopedLocal=function(e){var t,r=this;do{if(r.scopedLocals&&(t=r.scopedLocals.get(e)))return t}while(r=r.parent);return this.currentFunction.locals.get(e)},e.prototype.finalize=function(){return assert(null==this.parent,"must be the topmost parent flow"),this.continueLabel=null,this.breakLabel=null,this.is(1)},e}();t.Flow=F},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";function n(e,t,r){switch(t.kind){case 0:e=r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24));break;case 1:e=r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16));break;case 5:e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(255));break;case 6:e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(65535));break;case 10:e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(1));break;case 13:throw new Error("concrete type expected")}return e}function i(e,t,r){switch(t.kind){default:e=r.createUnary(l.UnaryOp.EqzI32,e);break;case 3:case 8:e=r.createUnary(l.UnaryOp.EqzI64,e);break;case 9:case 4:e=r.createUnary(64==t.size?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,e);break;case 11:e=r.createBinary(l.BinaryOp.EqF32,e,r.createF32(0));break;case 12:e=r.createBinary(l.BinaryOp.EqF64,e,r.createF64(0));break;case 13:throw new Error("concrete type expected")}return e}function a(e,t,r){switch(t.kind){case 3:case 8:e=r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0));break;case 9:case 4:64==t.size&&(e=r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0)));break;case 11:e=r.createBinary(l.BinaryOp.NeF32,e,r.createF32(0));break;case 12:e=r.createBinary(l.BinaryOp.NeF64,e,r.createF64(0));break;case 13:throw new Error("concrete type expected")}return e}var o=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),s=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var c,p=r(16),u=r(1),l=r(0),h=r(2),d=r(7),_=r(6),y=r(5);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(c=t.Target||(t.Target={}));var m=function(){function e(){this.target=c.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.noMemory=!1,this.importMemory=!1,this.memoryBase=0,this.allocateImpl="allocate_memory",this.freeImpl="free_memory",this.sourceMap=!1}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==c.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==c.WASM64?y.Type.usize64:y.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==c.WASM64?y.Type.isize64:y.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==c.WASM64?l.NativeType.I64:l.NativeType.I32},enumerable:!0,configurable:!0}),e}();t.Options=m;!function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={}));var E=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.startFunctionBody=new Array,n.currentEnum=null,n.currentType=y.Type.void,n.memorySegments=new Array,n.stringSegments=new Map,n.functionTable=new Array,n.files=new Set,n.program=t,n.options=r||new m,n.memoryOffset=i64_new(max(n.options.memoryBase,n.options.usizeType.byteSize)),n.module=l.Module.create(),n}return o(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){this.program.initialize(this.options);var e=assert(this.program.elements.get("start"));assert(e.kind==h.ElementKind.FUNCTION_PROTOTYPE);var t=new h.Function(e,e.internalName,null,null,y.Type.void);t.set(h.ElementFlags.START),this.currentFunction=this.startFunction=t;for(var r=this.program.sources,n=0,i=r.length;n"),!1;e.type=this.currentType}var i=e.type.toNativeType();if(e.is(h.ElementFlags.DECLARED))return e.is(h.ElementFlags.CONSTANT)?(this.module.addGlobalImport(e.internalName,e.namespace?e.namespace.simpleName:"env",e.simpleName,i),e.set(h.ElementFlags.COMPILED),!0):(this.error(u.DiagnosticCode.Operation_not_supported,t.range),!1);var a=!1;e.is(h.ElementFlags.INLINED)?r=this.compileInlineConstant(e,e.type):t.initializer?(r||(r=this.compileExpression(t.initializer,e.type)),_BinaryenExpressionGetId(r)!=l.ExpressionId.Const&&(e.is(h.ElementFlags.CONSTANT)?(r=this.precomputeExpressionRef(r),_BinaryenExpressionGetId(r)!=l.ExpressionId.Const&&(this.warning(u.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,t.range),a=!0)):a=!0)):r=e.type.toNativeZero(this.module);var o=e.internalName;if(a){this.module.addGlobal(o,i,!0,e.type.toNativeZero(this.module));var s=this.module.createSetGlobal(o,r);this.startFunctionBody.push(s)}else if(e.is(h.ElementFlags.CONSTANT)){var c=_BinaryenExpressionGetType(r);switch(c){case l.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI32(r),0);break;case l.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI64Low(r),_BinaryenConstGetValueI64High(r));break;case l.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF32(r);break;case l.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF64(r);break;default:throw new Error("concrete type expected")}e.set(h.ElementFlags.INLINED),t.isTopLevel&&this.module.addGlobal(o,i,!e.is(h.ElementFlags.CONSTANT),r),t.range.source.isEntry&&t.isTopLevelExport&&this.module.addGlobalExport(e.internalName,t.programLevelInternalName)}else this.module.addGlobal(o,i,!e.is(h.ElementFlags.CONSTANT),r);return e.set(h.ElementFlags.COMPILED),!0},t.prototype.compileEnumDeclaration=function(e){var t=this.program.elements.get(e.fileLevelInternalName);if(!t||t.kind!=h.ElementKind.ENUM)throw new Error("enum expected");return this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(h.ElementFlags.COMPILED))return!0;e.set(h.ElementFlags.COMPILED),this.currentEnum=e;var t=null;if(e.members)try{for(var r=s(e.members.values()),n=r.next();!n.done;n=r.next()){var i=n.value;if(i.kind==h.ElementKind.ENUMVALUE){var a=!1,o=i,c=o.declaration;if(o.set(h.ElementFlags.COMPILED),o.is(h.ElementFlags.INLINED))e.declaration.isTopLevelExport&&this.module.addGlobal(o.internalName,l.NativeType.I32,!1,this.module.createI32(o.constantValue));else{var p;if(c.value?(p=this.compileExpression(c.value,y.Type.i32),_BinaryenExpressionGetId(p)!=l.ExpressionId.Const&&(p=this.precomputeExpressionRef(p),_BinaryenExpressionGetId(p)!=l.ExpressionId.Const&&(e.is(h.ElementFlags.CONSTANT)&&this.warning(u.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,c.range),a=!0))):null==t?p=this.module.createI32(0):t.is(h.ElementFlags.INLINED)?p=this.module.createI32(t.constantValue+1):(p=this.module.createBinary(l.BinaryOp.AddI32,this.module.createGetGlobal(t.internalName,l.NativeType.I32),this.module.createI32(1)),e.is(h.ElementFlags.CONSTANT)&&this.warning(u.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,c.range),a=!0),a){this.module.addGlobal(o.internalName,l.NativeType.I32,!0,this.module.createI32(0));var d=this.module.createSetGlobal(o.internalName,p);this.startFunctionBody.push(d)}else{if(this.module.addGlobal(o.internalName,l.NativeType.I32,!1,p),_BinaryenExpressionGetType(p)!=l.NativeType.I32)throw new Error("i32 expected");o.constantValue=_BinaryenConstGetValueI32(p),o.set(h.ElementFlags.INLINED)}}t=o,e.declaration.range.source.isEntry&&e.declaration.isTopLevelExport&&(i.is(h.ElementFlags.INLINED)?this.module.addGlobalExport(i.internalName,i.internalName):c&&this.warning(u.DiagnosticCode.Cannot_export_a_mutable_global,c.range))}}}catch(e){_={error:e}}finally{try{n&&!n.done&&(m=r.return)&&m.call(r)}finally{if(_)throw _.error}}return this.currentEnum=null,!0;var _,m},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=this.program.elements.get(e.fileLevelInternalName);if(!n||n.kind!=h.ElementKind.FUNCTION_PROTOTYPE)throw new Error("function expected");return this.compileFunctionUsingTypeArguments(n,t,r,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n){var i=e.resolveInclTypeArguments(t,r,n);return i&&this.compileFunction(i)?i:null},t.prototype.compileFunction=function(e){if(e.is(h.ElementFlags.COMPILED))return!0;assert(!e.is(h.ElementFlags.BUILTIN)||"abort"==e.simpleName);var t=e.prototype.declaration;if(e.is(h.ElementFlags.DECLARED)){if(t.body)return this.error(u.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,t.name.range),!1}else if(!t.body)return this.error(u.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,t.name.range),!1;e.set(h.ElementFlags.COMPILED);var r=0;if(!e.is(h.ElementFlags.DECLARED)){var n=this.currentFunction;this.currentFunction=e;var i=assert(t.body,"implementation expected");r=this.compileStatement(i);var a=this.currentFunction.flow.finalize();e.returnType==y.Type.void||a||this.error(u.DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,assert(t.returnType,"return type expected").range),this.currentFunction=n}var o=e.parameters?e.parameters.length:0,s=e.instanceMethodOf?o+1:o,c=0,p=e.returnType.toNativeType(),d=new Array(s),_=new Array(s+1);if(e.instanceMethodOf&&(d[c]=this.options.isWasm64?l.NativeType.I64:l.NativeType.I32,_[c++]=e.instanceMethodOf.type.toSignatureString()),e.parameters)for(var m=0;m=0)return e.functionTableIndex;var t=this.functionTable.length;return this.functionTable.push(e),e.functionTableIndex=t,t},t.prototype.compileStatement=function(e){var t;switch(e.kind){case _.NodeKind.BLOCK:t=this.compileBlockStatement(e);break;case _.NodeKind.BREAK:t=this.compileBreakStatement(e);break;case _.NodeKind.CONTINUE:t=this.compileContinueStatement(e);break;case _.NodeKind.DO:t=this.compileDoStatement(e);break;case _.NodeKind.EMPTY:t=this.compileEmptyStatement(e);break;case _.NodeKind.EXPRESSION:t=this.compileExpressionStatement(e);break;case _.NodeKind.FOR:t=this.compileForStatement(e);break;case _.NodeKind.IF:t=this.compileIfStatement(e);break;case _.NodeKind.RETURN:t=this.compileReturnStatement(e);break;case _.NodeKind.SWITCH:t=this.compileSwitchStatement(e);break;case _.NodeKind.THROW:t=this.compileThrowStatement(e);break;case _.NodeKind.TRY:t=this.compileTryStatement(e);break;case _.NodeKind.VARIABLE:var r=this.compileVariableStatement(e);t=r||this.module.createNop();break;case _.NodeKind.WHILE:t=this.compileWhileStatement(e);break;case _.NodeKind.TYPEDECLARATION:if(this.currentFunction==this.startFunction)return this.module.createNop();default:throw new Error("statement expected")}return this.addDebugLocation(t,e.range),t},t.prototype.compileStatements=function(e){for(var t=e.length,r=new Array(t),n=0;n=0?"case"+o.toString(10):"break")+"|"+t);var p=this.module.createBlock("case0|"+t,i,l.NativeType.None),u=!0;for(s=0;s=0&&u&&this.currentFunction.flow.set(1),p},t.prototype.compileThrowStatement=function(e){return this.currentFunction.flow.set(2),this.currentFunction.flow.set(1),this.module.createUnreachable()},t.prototype.compileTryStatement=function(e){throw new Error("not implemented")},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=e.declarations;if(t||this.currentFunction==this.startFunction&&e.parent&&e.parent.kind==_.NodeKind.SOURCE){for(var n=0,i=r.length;n");continue}c=this.currentType}if(_.hasModifier(_.ModifierKind.CONST,o.modifiers))if(p){if(p=this.precomputeExpressionRef(p),_BinaryenExpressionGetId(p)==l.ExpressionId.Const){var d=new h.Local(this.program,s,-1,c);switch(_BinaryenExpressionGetType(p)){case l.NativeType.I32:d=d.withConstantIntegerValue(_BinaryenConstGetValueI32(p),0);break;case l.NativeType.I64:d=d.withConstantIntegerValue(_BinaryenConstGetValueI64Low(p),_BinaryenConstGetValueI64High(p));break;case l.NativeType.F32:d=d.withConstantFloatValue(_BinaryenConstGetValueF32(p));break;case l.NativeType.F64:d=d.withConstantFloatValue(_BinaryenConstGetValueF64(p));break;default:throw new Error("concrete type expected")}var m=this.currentFunction.flow.scopedLocals;if(m){if(m.has(s))return this.error(u.DiagnosticCode.Duplicate_identifier_0,o.name.range,s),0}else m=this.currentFunction.flow.scopedLocals=new Map;return m.set(s,d),0}this.warning(u.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,o.range)}else this.error(u.DiagnosticCode._const_declarations_must_be_initialized,o.range);_.hasModifier(_.ModifierKind.LET,o.modifiers)?this.currentFunction.flow.addScopedLocal(s,c,o.name):this.currentFunction.addLocal(c,s),p&&a.push(this.compileAssignmentWithValue(o.name,p))}return a.length?1==a.length?a[0]:this.module.createBlock(null,a,l.NativeType.None):0},t.prototype.compileWhileStatement=function(e){var t=a(this.compileExpression(e.condition,y.Type.i32,0),this.currentType,this.module),r=this.currentFunction.enterBreakContext();this.currentFunction.flow=this.currentFunction.flow.enterBranchOrScope();var n=this.currentFunction.flow.breakLabel="break|"+r,i=this.currentFunction.flow.continueLabel="continue|"+r,o=this.compileStatement(e.statement);this.currentFunction.flow=this.currentFunction.flow.leaveBranchOrScope(),this.currentFunction.leaveBreakContext();var s=this.module.createBlock(n,[this.module.createLoop(i,this.module.createIf(t,this.module.createBlock(null,[o,this.module.createBreak(i)],l.NativeType.None)))],l.NativeType.None);return s},t.prototype.compileInlineConstant=function(e,t){switch(assert(e.is(h.ElementFlags.INLINED)),e.type.is(4)&&t.is(4)&&e.type.size>r:0);case 5:case 6:case 10:var n=e.type.computeSmallIntegerMask(y.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&n:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 11:return this.module.createF32(e.constantFloatValue);case 12:return this.module.createF64(e.constantFloatValue);default:throw new Error("concrete type expected")}},t.prototype.compileExpression=function(e,t,r,n){void 0===r&&(r=1),void 0===n&&(n=!0),this.currentType=t;var i;switch(e.kind){case _.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case _.NodeKind.BINARY:i=this.compileBinaryExpression(e,t,n);break;case _.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case _.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case _.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case _.NodeKind.FUNCTION:case _.NodeKind.FUNCTIONARROW:i=this.compileFunctionExpression(e,t);break;case _.NodeKind.IDENTIFIER:case _.NodeKind.FALSE:case _.NodeKind.NULL:case _.NodeKind.THIS:case _.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t);break;case _.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case _.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case _.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case _.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t);break;case _.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case _.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case _.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t,n);break;default:throw new Error("expression expected")}return 0!=r&&this.currentType!=t&&(i=this.convertExpression(i,this.currentType,t,r,e),this.currentType=t),this.addDebugLocation(i,e.range),i},t.prototype.precomputeExpression=function(e,t,r){return void 0===r&&(r=1),this.precomputeExpressionRef(this.compileExpression(e,t,r))},t.prototype.precomputeExpressionRef=function(e){var t=this.currentType.toNativeType(),r=this.module.getFunctionTypeBySignature(t,[]);r||(r=this.module.addFunctionType(this.currentType.toSignatureString(),t,[]));var n=this.module.addFunction("__precompute",r,[],e);this.module.runPasses(["precompute"],n);var i=_BinaryenFunctionGetBody(n);return this.module.removeFunction("__precompute"),i},t.prototype.convertExpression=function(e,t,r,i,a){if(0==i)return assert(!1,"concrete type expected"),e;if(13==t.kind)return this.error(u.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),this.module.createUnreachable();if(13==r.kind)return this.module.createDrop(e);1!=i||t.isAssignableTo(r)||this.error(u.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString());var o=this.module;return t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=o.createUnary(l.UnaryOp.PromoteF32,e)):11==r.kind&&(!0,e=o.createUnary(l.UnaryOp.DemoteF64,e)):r.is(4)?(!0,11==t.kind?r.is(1)?r.is(64)?e=o.createUnary(l.UnaryOp.TruncF32ToI64,e):(e=o.createUnary(l.UnaryOp.TruncF32ToI32,e),r.is(32)&&(e=n(e,r,this.module))):r.is(64)?e=o.createUnary(l.UnaryOp.TruncF32ToU64,e):(e=o.createUnary(l.UnaryOp.TruncF32ToU32,e),r.is(32)&&(e=n(e,r,this.module))):r.is(1)?r.is(64)?e=o.createUnary(l.UnaryOp.TruncF64ToI64,e):(e=o.createUnary(l.UnaryOp.TruncF64ToI32,e),r.is(32)&&(e=n(e,r,this.module))):r.is(64)?e=o.createUnary(l.UnaryOp.TruncF64ToU64,e):(e=o.createUnary(l.UnaryOp.TruncF64ToU32,e),r.is(32)&&(e=n(e,r,this.module)))):(assert(0==r.flags,"void type expected"),e=this.module.createDrop(e)):t.is(4)&&r.is(8)?11==r.kind?t.is(64)?(!0,e=o.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF32:l.UnaryOp.ConvertU64ToF32,e)):(!t.is(32),e=o.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF32:l.UnaryOp.ConvertU32ToF32,e)):t.is(64)?(!0,e=o.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF64:l.UnaryOp.ConvertU64ToF64,e)):e=o.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF64:l.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(!0,e=o.createUnary(l.UnaryOp.WrapI64,e),r.is(32)&&(e=n(e,r,this.module))):r.is(64)?e=o.createUnary(r.is(1)?l.UnaryOp.ExtendI32:l.UnaryOp.ExtendU32,e):r.is(32)&&(t.size>r.size||t.size==r.size&&t.is(1)!=r.is(1))&&(!0,e=n(e,r,this.module)),e},t.prototype.computeCommonType=function(e,t){return e.isAssignableTo(t)?t:t.isAssignableTo(e)?e:null},t.prototype.compileAssertionExpression=function(e,t){var r=this.program.resolveType(e.toType,this.currentFunction.contextualTypeArguments);return r?this.compileExpression(e.expression,r,2):this.module.createUnreachable()},t.prototype.compileBinaryExpression=function(e,t,r){void 0===r&&(r=!0);var i,o,s,c,p=!1,h=!1,_=null;switch(e.operator){case d.Token.LESSTHAN:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0),o=this.compileExpression(e.right,this.currentType),this.currentType.kind){case 0:case 1:case 2:c=this.module.createBinary(l.BinaryOp.LtI32,i,o);break;case 3:c=this.module.createBinary(l.BinaryOp.LtI64,i,o);break;case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.LtI64:l.BinaryOp.LtI32,i,o);break;case 5:case 6:case 7:case 10:c=this.module.createBinary(l.BinaryOp.LtU32,i,o);break;case 9:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.LtU64:l.BinaryOp.LtU32,i,o);break;case 8:c=this.module.createBinary(l.BinaryOp.LtU64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.LtF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.LtF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=y.Type.bool;break;case d.Token.GREATERTHAN:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0),o=this.compileExpression(e.right,this.currentType),this.currentType.kind){case 0:case 1:case 2:c=this.module.createBinary(l.BinaryOp.GtI32,i,o);break;case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,i,o);break;case 3:c=this.module.createBinary(l.BinaryOp.GtI64,i,o);break;case 5:case 6:case 7:case 10:c=this.module.createBinary(l.BinaryOp.GtU32,i,o);break;case 9:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,i,o);break;case 8:c=this.module.createBinary(l.BinaryOp.GtU64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.GtF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.GtF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=y.Type.bool;break;case d.Token.LESSTHAN_EQUALS:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0),o=this.compileExpression(e.right,this.currentType),this.currentType.kind){case 0:case 1:case 2:c=this.module.createBinary(l.BinaryOp.LeI32,i,o);break;case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.LeI64:l.BinaryOp.LeI32,i,o);break;case 3:c=this.module.createBinary(l.BinaryOp.LeI64,i,o);break;case 5:case 6:case 7:case 10:c=this.module.createBinary(l.BinaryOp.LeU32,i,o);break;case 9:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.LeU64:l.BinaryOp.LeU32,i,o);break;case 8:c=this.module.createBinary(l.BinaryOp.LeU64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.LeF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.LeF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=y.Type.bool;break;case d.Token.GREATERTHAN_EQUALS:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0),o=this.compileExpression(e.right,this.currentType),this.currentType.kind){case 0:case 1:case 2:c=this.module.createBinary(l.BinaryOp.GeI32,i,o);break;case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.GeI64:l.BinaryOp.GeI32,i,o);break;case 3:c=this.module.createBinary(l.BinaryOp.GeI64,i,o);break;case 5:case 6:case 7:case 10:c=this.module.createBinary(l.BinaryOp.GeU32,i,o);break;case 9:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.GeU64:l.BinaryOp.GeU32,i,o);break;case 8:c=this.module.createBinary(l.BinaryOp.GeU64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.GeF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.GeF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=y.Type.bool;break;case d.Token.EQUALS_EQUALS_EQUALS:case d.Token.EQUALS_EQUALS:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0),o=this.compileExpression(e.right,this.currentType),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:c=this.module.createBinary(l.BinaryOp.EqI32,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.EqI64:l.BinaryOp.EqI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.EqI64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.EqF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.EqF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=y.Type.bool;break;case d.Token.EXCLAMATION_EQUALS_EQUALS:case d.Token.EXCLAMATION_EQUALS:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0),o=this.compileExpression(e.right,this.currentType),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:c=this.module.createBinary(l.BinaryOp.NeI32,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.NeI64:l.BinaryOp.NeI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.NeI64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.NeF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.NeF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=y.Type.bool;break;case d.Token.EQUALS:return this.compileAssignment(e.left,e.right,t);case d.Token.PLUS_EQUALS:p=!0;case d.Token.PLUS:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0,!1),o=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:h=!0;case 2:case 7:c=this.module.createBinary(l.BinaryOp.AddI32,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.AddI64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.AddF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.AddF64,i,o);break;default:throw new Error("concrete type expected")}break;case d.Token.MINUS_EQUALS:p=!0;case d.Token.MINUS:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0,!1),o=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:h=!0;case 2:case 7:c=this.module.createBinary(l.BinaryOp.SubI32,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.SubI64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.SubF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.SubF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.ASTERISK_EQUALS:p=!0;case d.Token.ASTERISK:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0,!1),o=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:h=!0;case 2:case 7:c=this.module.createBinary(l.BinaryOp.MulI32,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.MulI64:l.BinaryOp.MulI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.MulI64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.MulF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.MulF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.SLASH_EQUALS:p=!0;case d.Token.SLASH:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0,!0),o=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){case 0:case 1:h=!0;case 2:c=this.module.createBinary(l.BinaryOp.DivI32,i,o);break;case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.DivI64:l.BinaryOp.DivI32,i,o);break;case 3:c=this.module.createBinary(l.BinaryOp.DivI64,i,o);break;case 5:case 6:case 10:h=!0;case 7:c=this.module.createBinary(l.BinaryOp.DivU32,i,o);break;case 9:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.DivU64:l.BinaryOp.DivU32,i,o);break;case 8:c=this.module.createBinary(l.BinaryOp.DivU64,i,o);break;case 11:c=this.module.createBinary(l.BinaryOp.DivF32,i,o);break;case 12:c=this.module.createBinary(l.BinaryOp.DivF64,i,o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.PERCENT_EQUALS:p=!0;case d.Token.PERCENT:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0,!0),o=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){case 0:case 1:case 2:c=this.module.createBinary(l.BinaryOp.RemI32,i,o);break;case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.RemI64:l.BinaryOp.RemI32,i,o);break;case 3:c=this.module.createBinary(l.BinaryOp.RemI64,i,o);break;case 5:case 6:case 7:case 10:c=this.module.createBinary(l.BinaryOp.RemU32,i,o);break;case 9:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.RemU64:l.BinaryOp.RemU32,i,o);break;case 8:c=this.module.createBinary(l.BinaryOp.RemU64,i,o);break;case 11:case 12:this.error(u.DiagnosticCode.Operation_not_supported,e.range),c=this.module.createUnreachable();break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.LESSTHAN_LESSTHAN_EQUALS:p=!0;case d.Token.LESSTHAN_LESSTHAN:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t.is(8)?y.Type.i64:t,0,!1),o=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:h=!0;default:c=this.module.createBinary(l.BinaryOp.ShlI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.ShlI64,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.ShlI64:l.BinaryOp.ShlI32,i,o);break;case 13:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.GREATERTHAN_GREATERTHAN_EQUALS:p=!0;case d.Token.GREATERTHAN_GREATERTHAN:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t.is(8)?y.Type.i64:t,0,!0),o=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){default:c=this.module.createBinary(l.BinaryOp.ShrI32,i,o);break;case 3:c=this.module.createBinary(l.BinaryOp.ShrI64,i,o);break;case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.ShrI64:l.BinaryOp.ShrI32,i,o);break;case 5:case 6:case 10:case 7:c=this.module.createBinary(l.BinaryOp.ShrU32,i,o);break;case 8:c=this.module.createBinary(l.BinaryOp.ShrU64,i,o);break;case 9:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,i,o);break;case 13:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:p=!0;case d.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t==y.Type.void?y.Type.u64:t,0,!0),o=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){case 0:case 1:h=!0;default:c=this.module.createBinary(l.BinaryOp.ShrU32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.ShrU64,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,i,o);break;case 13:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.AMPERSAND_EQUALS:p=!0;case d.Token.AMPERSAND:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t.is(8)?y.Type.i64:t,0,!1),o=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:h=!0;default:c=this.module.createBinary(l.BinaryOp.AndI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.AndI64,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.AndI64:l.BinaryOp.AndI32,i,o);break;case 13:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.BAR_EQUALS:p=!0;case d.Token.BAR:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t.is(8)?y.Type.i64:t,0,!1),o=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:h=!0;default:c=this.module.createBinary(l.BinaryOp.OrI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.OrI64,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.OrI64:l.BinaryOp.OrI32,i,o);break;case 13:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.CARET_EQUALS:p=!0;case d.Token.CARET:switch(i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t.is(8)?y.Type.i64:t,0,!1),o=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:h=!0;default:c=this.module.createBinary(l.BinaryOp.XorI32,i,o);break;case 3:case 8:c=this.module.createBinary(l.BinaryOp.XorI64,i,o);break;case 9:case 4:c=this.module.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,i,o);break;case 13:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.AMPERSAND_AMPERSAND:i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0),o=this.compileExpression(e.right,this.currentType,1,!1),c=this.module.cloneExpression(i,!0,0),c||(_=this.currentFunction.getAndFreeTempLocal(this.currentType),i=this.module.createTeeLocal(_.index,i)),h=this.currentType.is(36),s=a(i,this.currentType,this.module),c=c?this.module.createIf(s,o,c):this.module.createIf(s,o,this.module.createGetLocal(assert(_,"tempLocal must be set").index,this.currentType.toNativeType()));break;case d.Token.BAR_BAR:i=this.compileExpression(e.left,t==y.Type.void?y.Type.i32:t,0),o=this.compileExpression(e.right,this.currentType,1,!1),c=this.module.cloneExpression(i,!0,0),c||(_=this.currentFunction.getAndFreeTempLocal(this.currentType),i=this.module.createTeeLocal(_.index,i)),h=this.currentType.is(36),s=a(i,this.currentType,this.module),c=c?this.module.createIf(s,c,o):this.module.createIf(s,this.module.createGetLocal(assert(_,"tempLocal must be set").index,this.currentType.toNativeType()),o);break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("not implemented")}return h&&r&&(assert(this.currentType.is(36),"small integer type expected"),c=n(c,this.currentType,this.module)),p?this.compileAssignmentWithValue(e.left,c,t!=y.Type.void):c},t.prototype.compileAssignment=function(e,t,r){var n=this.program.resolveExpression(e,this.currentFunction);if(!n)return this.module.createUnreachable();var i,a=n.element;switch(a.kind){case h.ElementKind.GLOBAL:if(!this.compileGlobal(a))return this.module.createUnreachable();assert(a.type!=y.Type.void,"concrete type expected");case h.ElementKind.LOCAL:case h.ElementKind.FIELD:i=a.type;break;case h.ElementKind.PROPERTY:var o=a.setterPrototype;if(o){var s=o.resolve();if(!s)return this.module.createUnreachable();assert(s.parameters&&1==s.parameters.length),i=s.parameters[0].type;break}return this.error(u.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),this.module.createUnreachable();case h.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==_.NodeKind.ELEMENTACCESS){assert(n.target&&n.target.kind==h.ElementKind.CLASS&&a.simpleName==n.target.prototype.fnIndexedGet);var c=a.resolve(null);if(c){i=c.returnType;break}}default:return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}return this.currentType=i,this.compileAssignmentWithValue(e,this.compileExpression(t,i),r!=y.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.program.resolveExpression(e,this.currentFunction);if(!n)return this.module.createUnreachable();var i,a,o=n.element;switch(o.kind){case h.ElementKind.LOCAL:return this.currentType=r?o.type:y.Type.void,o.is(h.ElementFlags.CONSTANT)?(this.error(u.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName),this.module.createUnreachable()):r?this.module.createTeeLocal(o.index,t):this.module.createSetLocal(o.index,t);case h.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();if(assert(o.type!=y.Type.void,"concrete type expected"),this.currentType=r?o.type:y.Type.void,o.is(h.ElementFlags.CONSTANT))return this.error(u.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName),this.module.createUnreachable();if(!r)return this.module.createSetGlobal(o.internalName,t);var s=o.type.toNativeType();return this.module.createBlock(null,[this.module.createSetGlobal(o.internalName,t),this.module.createGetGlobal(o.internalName,s)],s);case h.ElementKind.FIELD:if(o.prototype.isReadonly)return this.error(u.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName),this.module.createUnreachable();assert(null!=n.targetExpression,"target expression expected"),a=this.compileExpression(n.targetExpression,this.options.isWasm64?y.Type.usize64:y.Type.usize32,0),assert(this.currentType.classType,"class type expected"),this.currentType=r?o.type:y.Type.void;var c=o.type.toNativeType();return r?(i=this.currentFunction.getAndFreeTempLocal(o.type),this.module.createBlock(null,[this.module.createSetLocal(i.index,t),this.module.createStore(o.type.size>>3,a,this.module.createGetLocal(i.index,c),c,o.memoryOffset),this.module.createGetLocal(i.index,c)],c)):this.module.createStore(o.type.size>>3,a,t,c,o.memoryOffset);case h.ElementKind.PROPERTY:var p=o.setterPrototype;if(p){var l=p.resolve();if(l){if(assert(l.parameters&&1==l.parameters.length),!r)return l.is(h.ElementFlags.INSTANCE)?(assert(null!=n.targetExpression),a=this.compileExpression(n.targetExpression,this.options.isWasm64?y.Type.usize64:y.Type.usize32,0),assert(this.currentType.classType),this.currentType=y.Type.void,this.makeCall(l,[a,t])):(this.currentType=y.Type.void,this.makeCall(l,[t]));var d=o.getterPrototype;assert(null!=d);var m=d.resolve();if(m)return assert(!m.parameters||!m.parameters.length),l.is(h.ElementFlags.INSTANCE)?(assert(null!=n.targetExpression),a=this.compileExpression(n.targetExpression,this.options.isWasm64?y.Type.usize64:y.Type.usize32,0),assert(this.currentType.classType),i=this.currentFunction.getAndFreeTempLocal(m.returnType),this.module.createBlock(null,[this.makeCall(l,[this.module.createTeeLocal(i.index,a),t]),this.makeCall(m,[this.module.createGetLocal(i.index,i.type.toNativeType())])],(this.currentType=m.returnType).toNativeType())):this.module.createBlock(null,[this.makeCall(l,[t]),this.makeCall(m)],(this.currentType=m.returnType).toNativeType())}}else this.error(u.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName);return this.module.createUnreachable();case h.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==_.NodeKind.ELEMENTACCESS){assert(n.target&&n.target.kind==h.ElementKind.CLASS);var E=o.resolve();if(!E)return this.module.createUnreachable();var f,T=n.target.prototype.fnIndexedSet;if(null!=T&&n.target.members&&(f=n.target.members.get(T))&&f.kind==h.ElementKind.FUNCTION_PROTOTYPE){var g=f.resolve();if(!g)return this.module.createUnreachable();a=this.compileExpression(n.targetExpression,this.options.isWasm64?y.Type.usize64:y.Type.usize32,0),assert(this.currentType.classType);var A=this.compileExpression(e.elementExpression,y.Type.i32);return r?(this.currentType=E.returnType,i=this.currentFunction.getAndFreeTempLocal(this.currentType),this.module.createBlock(null,[this.makeCall(g,[a,A,this.module.createTeeLocal(i.index,t)]),this.module.createGetLocal(i.index,i.type.toNativeType())],this.currentType.toNativeType())):(this.currentType=g.returnType,this.makeCall(g,[a,A,t]))}return this.error(u.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,n.target.internalName),this.module.createUnreachable()}}return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r=this.program.resolveExpression(e.expression,this.currentFunction);if(!r)return this.module.createUnreachable();var n=r.element;if(n.kind!=h.ElementKind.FUNCTION_PROTOTYPE)return this.error(u.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,n.internalName),this.module.createUnreachable();var i=n,a=null;if(i.is(h.ElementFlags.BUILTIN)){var o=null;if(e.typeArguments){var s=e.typeArguments.length;o=new Array(s);for(var c=0;co)return this.error(u.DiagnosticCode.Expected_0_arguments_but_got_1,r.range,a.toString(10),c.toString(10)),this.module.createUnreachable();var p=new Array(o),l=0,h=0;if(e.instanceMethodOf&&(p[l++]=n||this.compileExpression(t[h++],e.instanceMethodOf.type)),i)for(;ll)p[l]=this.compileExpression(t[h++],i[l+a-o].type);else{var d=i[l+a-o].initializer;if(!d)return this.error(u.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,r.range,(l+a-o).toString(10),c.toString(10)),this.module.createUnreachable();p[l]=this.compileExpression(d,i[l+a-o].type)}return this.currentType=e.returnType,this.makeCall(e,p)},t.prototype.makeCall=function(e,t){return void 0===t&&(t=null),e.is(h.ElementFlags.COMPILED)||this.compileFunction(e)?e.is(h.ElementFlags.DECLARED)?this.module.createCallImport(e.internalName,t,e.returnType.toNativeType()):this.module.createCall(e.internalName,t,e.returnType.toNativeType()):this.module.createUnreachable()},t.prototype.compileCommaExpression=function(e,t){for(var r=e.expressions,n=r.length,i=new Array(n--),a=0;a=0),this.currentType=n.type,this.module.createGetLocal(n.index,this.currentType.toNativeType()));case h.ElementKind.GLOBAL:return n.is(h.ElementFlags.BUILTIN)?p.compileGetConstant(this,n,e):this.compileGlobal(n)?(assert(n.type!=y.Type.void),n.is(h.ElementFlags.INLINED)?this.compileInlineConstant(n,t):(this.currentType=n.type,this.module.createGetGlobal(n.internalName,this.currentType.toNativeType()))):this.module.createUnreachable();case h.ElementKind.ENUMVALUE:return n.is(h.ElementFlags.COMPILED)?(this.currentType=y.Type.i32,n.is(h.ElementFlags.INLINED)?this.module.createI32(n.constantValue):this.module.createGetGlobal(n.internalName,l.NativeType.I32)):(this.error(u.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=y.Type.i32,this.module.createUnreachable())}return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){switch(void 0===r&&(r=!1),e.literalKind){case 4:assert(!r);var n=t.classType;return n&&n==this.program.elements.get("Array")&&n.typeArguments&&1==n.typeArguments.length?this.compileStaticArray(n.typeArguments[0],e.elementExpressions):(this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable());case 0:var i=e.value;return r&&(i=-i),t==y.Type.f32?this.module.createF32(i):(this.currentType=y.Type.f64,this.module.createF64(i));case 1:var a=e.value;switch(r&&(a=i64_sub(i64_new(0),a)),t.kind){case 0:if(i64_is_i8(a))return this.module.createI32(i64_low(a));break;case 1:if(i64_is_i16(a))return this.module.createI32(i64_low(a));break;case 2:if(i64_is_i32(a))return this.module.createI32(i64_low(a));break;case 5:if(i64_is_u8(a))return this.module.createI32(i64_low(a));break;case 6:if(i64_is_u16(a))return this.module.createI32(i64_low(a));break;case 7:if(i64_is_u32(a))return this.module.createI32(i64_low(a));break;case 10:if(i64_is_bool(a))return this.module.createI32(i64_low(a));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_u32(a))return this.module.createI32(i64_low(a));break}return this.module.createI64(i64_low(a),i64_high(a));case 3:case 8:return this.module.createI64(i64_low(a),i64_high(a));case 11:if(i64_is_f32(a))return this.module.createF32(i64_to_f32(a));break;case 12:if(i64_is_f64(a))return this.module.createF64(i64_to_f64(a));break;case 13:break;default:assert(!1)}return i64_is_i32(a)?(this.currentType=y.Type.i32,this.module.createI32(i64_low(a))):(this.currentType=y.Type.i64,this.module.createI64(i64_low(a),i64_high(a)));case 2:return assert(!r),this.compileStaticString(e.value)}throw new Error("not implemented")},t.prototype.compileStaticString=function(e){var t=this.stringSegments.get(e);if(!t){var r=e.length,n=new Uint8Array(4+2*r);n[0]=255&r,n[1]=r>>>8&255,n[2]=r>>>16&255,n[3]=r>>>24&255;for(var i=0;i>>8&255;t=this.addMemorySegment(n,this.options.usizeType.byteSize),this.stringSegments.set(e,t)}var a=t.offset,o=this.program.types.get("string");return this.currentType=o||this.options.usizeType,this.options.isWasm64?this.module.createI64(i64_low(a),i64_high(a)):(assert(i64_is_i32(a)),this.module.createI32(i64_low(a)))},t.prototype.compileStaticArray=function(e,t){var r,n=!0,i=t.length,a=e.toNativeType();switch(a){case l.NativeType.I32:r=changetype(new Int32Array(i));break;case l.NativeType.I64:r=changetype(new Array(i));break;case l.NativeType.F32:r=changetype(new Float32Array(i));break;case l.NativeType.F64:r=changetype(new Float64Array(i));break;default:throw new Error("concrete type expected")}for(var o,s=new Array(i),c=0;c=0),n=this.compileExpression(r.targetExpression,this.options.usizeType,0),this.currentType=i.type,this.module.createLoad(i.type.size>>3,i.type.is(5),n,i.type.toNativeType(),i.memoryOffset);case h.ElementKind.PROPERTY:var a=i.getterPrototype;assert(null!=a);var o=a.resolve(null);return o?(assert(!o.parameters||!o.parameters.length),this.currentType=o.returnType,o.is(h.ElementFlags.INSTANCE)?(n=this.compileExpression(r.targetExpression,this.options.usizeType,0),this.currentType=o.returnType,this.makeCall(o,[n])):this.makeCall(o)):this.module.createUnreachable()}return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=a(this.compileExpression(e.condition,y.Type.u32,0),this.currentType,this.module),n=this.compileExpression(e.ifThen,t),i=this.compileExpression(e.ifElse,t);return this.module.createIf(r,n,i)},t.prototype.compileUnaryPostfixExpression=function(e,t){var r,i,a,o=this.compileExpression(e.operand,t==y.Type.void?y.Type.i32:t,0,!1),s=!1;switch(e.operator){case d.Token.PLUS_PLUS:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:s=!0;default:r=l.BinaryOp.AddI32,i=l.NativeType.I32,a=this.module.createI32(1);break;case 9:case 4:r=this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,i=this.options.isWasm64?l.NativeType.I64:l.NativeType.I32,a=this.currentType.toNativeOne(this.module);break;case 3:case 8:r=l.BinaryOp.AddI64,i=l.NativeType.I64,a=this.module.createI64(1);break;case 11:r=l.BinaryOp.AddF32,i=l.NativeType.F32,a=this.module.createF32(1);break;case 12:r=l.BinaryOp.AddF64,i=l.NativeType.F64,a=this.module.createF64(1);break;case 13:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case d.Token.MINUS_MINUS:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:s=!0;default:r=l.BinaryOp.SubI32,i=l.NativeType.I32,a=this.module.createI32(1);break;case 9:case 4:r=this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,i=this.options.isWasm64?l.NativeType.I64:l.NativeType.I32,a=this.currentType.toNativeOne(this.module);break;case 3:case 8:r=l.BinaryOp.SubI64,i=l.NativeType.I64,a=this.module.createI64(1);break;case 11:r=l.BinaryOp.SubF32,i=l.NativeType.F32,a=this.module.createF32(1);break;case 12:r=l.BinaryOp.SubF64,i=l.NativeType.F64,a=this.module.createF64(1);break;case 13:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("unary postfix operator expected")}var c,p=null;return t==y.Type.void?c=this.module.createBinary(r,o,a):(p=this.currentFunction.getTempLocal(this.currentType),c=this.module.createBinary(r,this.module.createGetLocal(p.index,i),a)),s&&(assert(this.currentType.is(36)),c=n(c,this.currentType,this.module)),c=this.compileAssignmentWithValue(e.operand,c,!1),t==y.Type.void?(assert(!p),c):(this.currentType=assert(p).type,this.currentFunction.freeTempLocal(p),this.module.createBlock(null,[this.module.createSetLocal(p.index,o),c,this.module.createGetLocal(p.index,i)],i))},t.prototype.compileUnaryPrefixExpression=function(e,t,r){void 0===r&&(r=!0);var a,o=!1,s=!1;switch(e.operator){case d.Token.PLUS:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();a=this.compileExpression(e.operand,t==y.Type.void?y.Type.i32:t,0,!1),o=this.currentType.is(36);break;case d.Token.MINUS:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();if(e.operand.kind!=_.NodeKind.LITERAL||1!=e.operand.literalKind&&0!=e.operand.literalKind)switch(a=this.compileExpression(e.operand,t==y.Type.void?y.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:a=this.module.createBinary(l.BinaryOp.SubI32,this.module.createI32(0),a);break;case 9:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:a=this.module.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,this.currentType.toNativeZero(this.module),a);break;case 3:case 8:a=this.module.createBinary(l.BinaryOp.SubI64,this.module.createI64(0),a);break;case 11:a=this.module.createUnary(l.UnaryOp.NegF32,a);break;case 12:a=this.module.createUnary(l.UnaryOp.NegF64,a)}else a=this.compileLiteralExpression(e.operand,t,!0),this.addDebugLocation(a,e.range);break;case d.Token.PLUS_PLUS:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(s=!0,a=this.compileExpression(e.operand,t==y.Type.void?y.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:a=this.module.createBinary(l.BinaryOp.AddI32,a,this.module.createI32(1));break;case 9:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:a=this.module.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,a,this.currentType.toNativeOne(this.module));break;case 3:case 8:a=this.module.createBinary(l.BinaryOp.AddI64,a,this.module.createI64(1));break;case 11:a=this.module.createBinary(l.BinaryOp.AddF32,a,this.module.createF32(1));break;case 12:a=this.module.createBinary(l.BinaryOp.AddF64,a,this.module.createF64(1))}break;case d.Token.MINUS_MINUS:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(s=!0,a=this.compileExpression(e.operand,t==y.Type.void?y.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:a=this.module.createBinary(l.BinaryOp.SubI32,a,this.module.createI32(1));break;case 9:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:a=this.module.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,a,this.currentType.toNativeOne(this.module));break;case 3:case 8:a=this.module.createBinary(l.BinaryOp.SubI64,a,this.module.createI64(1));break;case 11:a=this.module.createBinary(l.BinaryOp.SubF32,a,this.module.createF32(1));break;case 12:a=this.module.createBinary(l.BinaryOp.SubF64,a,this.module.createF64(1))}break;case d.Token.EXCLAMATION:a=this.compileExpression(e.operand,t==y.Type.void?y.Type.i32:t,0,!0),a=i(a,this.currentType,this.module),this.currentType=y.Type.bool;break;case d.Token.TILDE:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(a=this.compileExpression(e.operand,t==y.Type.void?y.Type.i32:t.is(8)?y.Type.i64:t,t==y.Type.void?0:1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:a=this.module.createBinary(l.BinaryOp.XorI32,a,this.module.createI32(-1));break;case 9:if(this.currentType.isReference)return this.error(u.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:a=this.module.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,a,this.currentType.toNativeNegOne(this.module));break;case 3:case 8:a=this.module.createBinary(l.BinaryOp.XorI64,a,this.module.createI64(-1,-1))}break;case d.Token.TYPEOF:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("not implemented");default:throw this.error(u.DiagnosticCode.Operation_not_supported,e.range),new Error("unary operator expected")}return o&&r&&(assert(this.currentType.is(36)),a=n(a,this.currentType,this.module)),s?this.compileAssignmentWithValue(e.operand,a,t!=y.Type.void):a},t.prototype.addDebugLocation=function(e,t){if(null!=this.options.sourceMap){var r=t.source;r.debugInfoIndex<0&&(r.debugInfoIndex=this.module.addDebugInfoFile(r.normalizedPath)),t.debugInfoRef=e,this.currentFunction.debugLocations||(this.currentFunction.debugLocations=[]),this.currentFunction.debugLocations.push(t)}},t}(u.DiagnosticEmitter);t.Compiler=E,t.makeSmallIntegerWrap=n,t.makeIsFalseish=i,t.makeIsTrueish=a},function(e,t,r){"use strict";function n(e){for(var t=e.length,r=new Array(t),n=0;n>>e.size-this.size},e.prototype.is=function(e){return(this.flags&e)==e},Object.defineProperty(e.prototype,"isClass",{get:function(){return null!=this.classType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isFunction",{get:function(){return null!=this.functionType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isReference",{get:function(){return null!=this.classType||null!=this.functionType},enumerable:!0,configurable:!0}),e.prototype.asClass=function(t){assert(9==this.kind);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classType=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.isReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.functionType=t,r},e.prototype.asNullable=function(){return assert(9==this.kind),this.nullableType||(assert(!this.is(512)&&this.isReference),this.nullableType=new e(this.kind,512|this.flags,this.size),this.nullableType.classType=this.classType,this.nullableType.functionType=this.functionType),this.nullableType},e.prototype.isAssignableTo=function(e){var t,r,n,i;if(this.isReference){if(e.isReference)if(t=this.classType){if(r=e.classType)return t.isAssignableTo(r)}else if((n=this.functionType)&&(i=e.functionType))return n.isAssignableTo(i)}else if(!e.isReference)switch(this.kind){case 0:switch(e.kind){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 11:case 12:return!0}break;case 1:switch(e.kind){case 1:case 2:case 3:case 4:case 6:case 7:case 8:case 9:case 11:case 12:return!0}break;case 2:switch(e.kind){case 2:case 3:case 4:case 7:case 8:case 9:case 12:return!0}break;case 3:switch(e.kind){case 3:case 8:return!0;case 4:case 9:return 64==e.size}break;case 4:switch(e.kind){case 2:case 7:return 32==this.size;case 3:case 4:case 8:case 9:return!0;case 12:return 32==e.size}break;case 5:switch(e.kind){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 11:case 12:return!0}break;case 6:switch(e.kind){case 2:case 3:case 4:case 6:case 7:case 8:case 9:case 11:case 12:return!0}break;case 7:switch(e.kind){case 3:case 7:case 8:case 9:case 12:return!0}break;case 8:switch(e.kind){case 8:return!0;case 9:return 64==e.size}break;case 9:switch(e.kind){case 7:return 32==this.size;case 8:case 9:return!0;case 12:return 32==e.size}break;case 10:switch(e.kind){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:return!0}break;case 11:switch(e.kind){case 11:case 12:return!0}break;case 12:return 12==e.kind}return!1},e.prototype.toString=function(e){switch(void 0===e&&(e=!1),this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return e?"usize":this.classType?this.classType.toString():this.functionType?this.functionType.toTypeString():"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";case 13:return"void";default:return assert(!1),""}},e.prototype.toNativeType=function(){switch(this.kind){default:return a.NativeType.I32;case 3:case 8:return a.NativeType.I64;case 4:case 9:return 64==this.size?a.NativeType.I64:a.NativeType.I32;case 11:return a.NativeType.F32;case 12:return a.NativeType.F64;case 13:return a.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=o,t.typesToNativeTypes=n,t.typesToString=i},function(e,t,r){"use strict";function n(e){Fe=e}function i(){var e;return null!=Fe?(e=Fe,Fe=null):e=[],e.length=0,e}function a(e,t){return null==t&&(t=i()),t.push(e),t}function o(e,t){if(t)for(var r=0,n=t.length;r0},enumerable:!0,configurable:!0}),t}(ee);t.FunctionDeclaration=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.IF,t}return _(t,e),t}(Z);t.IfStatement=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.IMPORTDECLARATION,t.modifiers=null,t}return _(t,e),t}(ee);t.ImportDeclaration=Te;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.IMPORT,t}return _(t,e),t}(Z);t.ImportStatement=ge;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.INTERFACEDECLARATION,t}return _(t,e),t}(ie);t.InterfaceDeclaration=Ae;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.METHODDECLARATION,t}return _(t,e),t}(Ee);t.MethodDeclaration=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.NAMESPACEDECLARATION,t}return _(t,e),t}(ee);t.NamespaceDeclaration=ve;!function(e){e[e.DEFAULT=0]="DEFAULT",e[e.OPTIONAL=1]="OPTIONAL",e[e.REST=2]="REST"}(t.ParameterKind||(t.ParameterKind={}));var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.PARAMETER,t}return _(t,e),t}(T);t.Parameter=Ne;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.MODIFIER,t}return _(t,e),t}(T);t.Modifier=Se;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.RETURN,t}return _(t,e),t}(Z);t.ReturnStatement=Ce;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.SWITCHCASE,t}return _(t,e),t}(T);t.SwitchCase=Oe;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.SWITCH,t}return _(t,e),t}(Z);t.SwitchStatement=be;var ke=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.THROW,t}return _(t,e),t}(Z);t.ThrowStatement=ke;var xe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.TRY,t}return _(t,e),t}(Z);t.TryStatement=xe;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.TYPEDECLARATION,t}return _(t,e),t}(ee);t.TypeDeclaration=Le;var Re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.VARIABLEDECLARATION,t}return _(t,e),t}(te);t.VariableDeclaration=Re;var Be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.VARIABLE,t}return _(t,e),t}(Z);t.VariableStatement=Be;var Ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=E.WHILE,t}return _(t,e),t}(Z);t.WhileStatement=Ue;var Fe=null;t.setReusableModifiers=n,t.createModifiers=i,t.addModifier=a,t.getModifier=o,t.hasModifier=s,t.getFirstDecorator=c,t.hasDecorator=p,t.mangleInternalName=u,t.mangleInternalPath=l},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a=r(1),o=r(9);!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){function t(t){switch(t){case"abstract":return e.ABSTRACT;case"as":return e.AS;case"async":return e.ASYNC;case"await":return e.AWAIT;case"break":return e.BREAK;case"case":return e.CASE;case"catch":return e.CATCH;case"class":return e.CLASS;case"continue":return e.CONTINUE;case"const":return e.CONST;case"constructor":return e.CONSTRUCTOR;case"debugger":return e.DEBUGGER;case"declare":return e.DECLARE;case"default":return e.DEFAULT;case"delete":return e.DELETE;case"do":return e.DO;case"else":return e.ELSE;case"enum":return e.ENUM;case"export":return e.EXPORT;case"extends":return e.EXTENDS;case"false":return e.FALSE;case"finally":return e.FINALLY;case"for":return e.FOR;case"from":return e.FROM;case"function":return e.FUNCTION;case"get":return e.GET;case"if":return e.IF;case"implements":return e.IMPLEMENTS;case"import":return e.IMPORT;case"in":return e.IN;case"instanceof":return e.INSTANCEOF;case"interface":return e.INTERFACE;case"is":return e.IS;case"keyof":return e.KEYOF;case"let":return e.LET;case"module":return e.MODULE;case"namespace":return e.NAMESPACE;case"new":return e.NEW;case"null":return e.NULL;case"of":return e.OF;case"package":return e.PACKAGE;case"private":return e.PRIVATE;case"protected":return e.PROTECTED;case"public":return e.PUBLIC;case"readonly":return e.READONLY;case"return":return e.RETURN;case"set":return e.SET;case"static":return e.STATIC;case"super":return e.SUPER;case"switch":return e.SWITCH;case"this":return e.THIS;case"throw":return e.THROW;case"true":return e.TRUE;case"try":return e.TRY;case"type":return e.TYPE;case"typeof":return e.TYPEOF;case"var":return e.VAR;case"void":return e.VOID;case"while":return e.WHILE;case"with":return e.WITH;case"yield":return e.YIELD;default:return e.INVALID}}function r(t){switch(t){case e.ABSTRACT:case e.AS:case e.CONSTRUCTOR:case e.DECLARE:case e.DELETE:case e.FROM:case e.GET:case e.IS:case e.KEYOF:case e.MODULE:case e.NAMESPACE:case e.READONLY:case e.SET:case e.TYPE:return!0;default:return!1}}function n(t){switch(t){case e.DELETE:return"delete";case e.IN:return"in";case e.INSTANCEOF:return"instanceof";case e.NEW:return"new";case e.TYPEOF:return"typeof";case e.VOID:return"void";case e.YIELD:return"yield";case e.DOT_DOT_DOT:return"...";case e.COMMA:return",";case e.LESSTHAN:return"<";case e.GREATERTHAN:return">";case e.LESSTHAN_EQUALS:return"<=";case e.GREATERTHAN_EQUALS:return">=";case e.EQUALS_EQUALS:return"==";case e.EXCLAMATION_EQUALS:return"!=";case e.EQUALS_EQUALS_EQUALS:return"===";case e.EXCLAMATION_EQUALS_EQUALS:return"!==";case e.PLUS:return"+";case e.MINUS:return"-";case e.ASTERISK_ASTERISK:return"**";case e.ASTERISK:return"*";case e.SLASH:return"/";case e.PERCENT:return"%";case e.PLUS_PLUS:return"++";case e.MINUS_MINUS:return"--";case e.LESSTHAN_LESSTHAN:return"<<";case e.GREATERTHAN_GREATERTHAN:return">>";case e.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case e.AMPERSAND:return"&";case e.BAR:return"|";case e.CARET:return"^";case e.EXCLAMATION:return"!";case e.TILDE:return"~";case e.AMPERSAND_AMPERSAND:return"&&";case e.BAR_BAR:return"||";case e.EQUALS:return"=";case e.PLUS_EQUALS:return"+=";case e.MINUS_EQUALS:return"-=";case e.ASTERISK_EQUALS:return"*=";case e.ASTERISK_ASTERISK_EQUALS:return"**=";case e.SLASH_EQUALS:return"/=";case e.PERCENT_EQUALS:return"%=";case e.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case e.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case e.AMPERSAND_EQUALS:return"&=";case e.BAR_EQUALS:return"|=";case e.CARET_EQUALS:return"^=";default:return assert(!1),""}}e.fromKeyword=t,e.isAlsoIdentifier=r,e.operatorToString=n}(i=t.Token||(t.Token={}));var s=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=this.start,r=1;t-- >0;)10==e.charCodeAt(t)&&r++;return r},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=this.start,r=0;t-- >0&&10!=e.charCodeAt(t);)r++;return r},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=s;var c=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.markedPos=0,n.markedToken=-1,n.markedTokenPos=0,n.nextToken=-1,n.nextTokenOnNewLine=!1,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.posi;)if(o.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=s}return this.nextToken},t.prototype.skip=function(e){var t=this.pos,r=this.token,n=this.tokenPos,a=i32.MAX_VALUE;switch(e){case i.GREATERTHAN:a=1}return this.token=this.unsafeNext(e==i.IDENTIFIER,a),this.token==e?(this.nextToken=-1,!0):(this.pos=t,this.token=r,this.tokenPos=n,!1)},t.prototype.mark=function(){this.markedPos=this.pos,this.markedToken=this.token,this.markedTokenPos=this.tokenPos},t.prototype.reset=function(){this.pos=this.markedPos,this.token=this.markedToken,this.tokenPos=this.markedTokenPos,this.nextToken=-1},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new s(this.source,e,t)},t.prototype.readIdentifier=function(){for(var e=this.source.text,t=this.pos;++this.pos=this.end){n+=e.substring(r,this.pos),this.error(a.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(o.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(a.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(a.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(a.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(o.isLineBreak(n)){this.error(a.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&i<=57)r=i64_add(i64_mul(r,n),i64_new(i-48,0));else if(i>=65&&i<=70)r=i64_add(i64_mul(r,n),i64_new(10+i-65,0));else{if(!(i>=97&&i<=102))break;r=i64_add(i64_mul(r,n),i64_new(10+i-97,0))}++this.pos}return this.pos==t&&this.error(a.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0);this.pos=48&&i<=57))break;r=i64_add(i64_mul(r,n),i64_new(i-48,0)),++this.pos}return this.pos==t&&this.error(a.DiagnosticCode.Digit_expected,this.range(t)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0);this.pos=48&&i<=55))break;r=i64_add(i64_mul(r,n),i64_new(i-48,0)),++this.pos}return this.pos==t&&this.error(a.DiagnosticCode.Octal_digit_expected,this.range(t)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0);this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(a.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(a.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(a.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(a.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(a.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(a.DiagnosticEmitter);t.Tokenizer=c},function(e,t,r){"use strict";function n(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Structs cannot extend classes and vice-versa.";case 208:return"Structs cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1311:return"A class may only extend another class.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";default:return""}}Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Structs_cannot_extend_classes_and_vice_versa=207]="Structs_cannot_extend_classes_and_vice_versa",e[e.Structs_cannot_implement_interfaces=208]="Structs_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=n},function(e,t,r){"use strict";function n(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}}function i(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}}function a(e){return e>=48&&e<=57}function o(e){return e>=48&&e<=55}function s(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&l(e)}function c(e){return e>=97&&e<=122}function p(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&h(e)}function u(e,t){if(e65535)&&u(e,d)}function h(e){return!(e<0||e>65535)&&u(e,_)}Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=n,t.isWhiteSpace=i,t.isDecimalDigit=a,t.isOctalDigit=o,t.isIdentifierStart=s,t.isKeywordCharacter=c,t.isIdentifierPart=p;var d=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],_=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500]},function(e,t,r){"use strict";function n(e){for(var t=0,r=e.length;t+10||r=0;)if(e.charCodeAt(i)==o){t-i==3&&46==e.charCodeAt(i+1)&&46==e.charCodeAt(i+2)||(e=n?e.substring(0,i):e.substring(0,i)+e.substring(t+3),r-=t+3-i,t=i-1);break}if(i<0&&t>0&&(2!=t||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){e=e.substring(t+4),r=e.length;continue}}}t++}return r>0?e:"."}function i(e,t){return e.startsWith("std/")?e:n(a(t)+String.fromCharCode(o)+e)}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==o)return e.substring(0,t);return"."}Object.defineProperty(t,"__esModule",{value:!0});var o=47;t.normalize=n,t.resolve=i,t.dirname=a},function(e,t,r){r(12),e.exports=r(19)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(13),r(14),r(17)},function(e,t,r){(function(e){function t(){Error.captureStackTrace?Error.captureStackTrace(this,t):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function r(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}var n="undefined"!=typeof window&&window||void 0!==e&&e||self;Object.defineProperties(n.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(n.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(n.i32=n.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(n.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(n.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(n.u32=n.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(n.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(n.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(n.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),n.clz=Math.clz32,n.abs=Math.abs,n.max=Math.max,n.min=Math.min,n.ceil=Math.ceil,n.floor=Math.floor,n.select=function(e,t,r){return r?e:t},n.sqrt=Math.sqrt,n.trunc=Math.trunc,n.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return e=t|r,t=e>>16&65535,r=(65535&e)<<16,t|r},n.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},t.prototype=Object.create(Error.prototype),t.prototype.name="UnreachableError",t.prototype.message="unreachable",n.unreachable=function(){throw new t},r.prototype=Object.create(Error.prototype),r.prototype.name="AssertionError",n.assert=function(e,t){if(e)return e;throw new r(t)},n.changetype=function(e){return e},n.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)}}).call(t,r(3))},function(e,t,r){(function(e){const t=e.Binaryen||r(15);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(0).Module;i.prototype.toText=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrint(this.ref),t.print=e,r},i.prototype.toAsmjs=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrintAsmjs(this.ref),t.print=e,r}}).call(t,r(3))},function(t,r){t.exports=e},function(e,t,r){"use strict";function n(e,t,r){switch(t.internalName){case"NaN":return e.currentType==u.Type.f32?e.module.createF32(NaN):(e.currentType=u.Type.f64,e.module.createF64(NaN));case"Infinity":return e.currentType==u.Type.f32?e.module.createF32(1/0):(e.currentType=u.Type.f64,e.module.createF64(1/0));case"HEAP_BASE":return e.currentType=e.options.usizeType,e.module.createGetGlobal("HEAP_BASE",e.currentType.toNativeType())}return e.error(p.DiagnosticCode.Operation_not_supported,r.range),e.module.createUnreachable()}function i(e,t,r,n,i,o){var h,d,_,y,m,E,f,T,g=e.module;switch(t.internalName){case"isNaN":if(e.currentType=u.Type.bool,1!=n.length)return r&&1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(e.currentType.kind){case 11:m=e.currentFunction.getAndFreeTempLocal(u.Type.f32),y=g.createBinary(l.BinaryOp.NeF32,g.createTeeLocal(m.index,h),g.createGetLocal(m.index,l.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(u.Type.f64),y=g.createBinary(l.BinaryOp.NeF64,g.createTeeLocal(m.index,h),g.createGetLocal(m.index,l.NativeType.F64));break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break;default:y=g.createI32(0)}return e.currentType=u.Type.bool,y;case"isFinite":if(e.currentType=u.Type.bool,1!=n.length)return r&&1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(e.currentType.kind){case 11:m=e.currentFunction.getAndFreeTempLocal(u.Type.f32),y=g.createSelect(g.createBinary(l.BinaryOp.NeF32,g.createUnary(l.UnaryOp.AbsF32,g.createTeeLocal(m.index,h)),g.createF32(1/0)),g.createI32(0),g.createBinary(l.BinaryOp.EqF32,g.createGetLocal(m.index,l.NativeType.F32),g.createGetLocal(m.index,l.NativeType.F32)));break;case 12:m=e.currentFunction.getAndFreeTempLocal(u.Type.f64),y=g.createSelect(g.createBinary(l.BinaryOp.NeF64,g.createUnary(l.UnaryOp.AbsF64,g.createTeeLocal(m.index,h)),g.createF64(1/0)),g.createI32(0),g.createBinary(l.BinaryOp.EqF64,g.createGetLocal(m.index,l.NativeType.F64),g.createGetLocal(m.index,l.NativeType.F64)));break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break;default:y=g.createI32(1)}return e.currentType=u.Type.bool,y;case"clz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(l.UnaryOp.ClzI32,h);break;case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?l.UnaryOp.ClzI64:l.UnaryOp.ClzI32,h);break;case 3:case 8:y=g.createUnary(l.UnaryOp.ClzI64,h);break;case 11:case 12:case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"ctz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(l.UnaryOp.CtzI32,h);break;case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?l.UnaryOp.CtzI64:l.UnaryOp.CtzI32,h);break;case 3:case 8:y=g.createUnary(l.UnaryOp.CtzI64,h);break;case 11:case 12:case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"popcnt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(l.UnaryOp.PopcntI32,h);break;case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?l.UnaryOp.PopcntI64:l.UnaryOp.PopcntI32,h);break;case 3:case 8:y=g.createUnary(l.UnaryOp.PopcntI64,h);break;case 11:case 12:case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"rotl":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"2",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.i32,0);switch(d=e.compileExpression(n[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=c.makeSmallIntegerWrap(g.createBinary(l.BinaryOp.RotlI32,h,d),e.currentType,g);case 2:case 7:y=g.createBinary(l.BinaryOp.RotlI32,h,d);break;case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}case 4:y=g.createBinary(e.options.isWasm64?l.BinaryOp.RotlI64:l.BinaryOp.RotlI32,h,d);break;case 3:case 8:y=g.createBinary(l.BinaryOp.RotlI64,h,d);break;default:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"rotr":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"2",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.i32,0);switch(d=e.compileExpression(n[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=c.makeSmallIntegerWrap(g.createBinary(l.BinaryOp.RotrI32,h,d),e.currentType,g);break;case 2:case 7:y=g.createBinary(l.BinaryOp.RotrI32,h,d);break;case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}case 4:y=g.createBinary(e.options.isWasm64?l.BinaryOp.RotrI64:l.BinaryOp.RotrI32,h,d);break;case 3:case 8:y=g.createBinary(l.BinaryOp.RotrI64,h,d);break;default:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"abs":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getAndFreeTempLocal(u.Type.i32),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(l.BinaryOp.SubI32,g.createI32(0),g.createGetLocal(m.index,l.NativeType.I32)),g.createBinary(l.BinaryOp.GtI32,g.createGetLocal(m.index,l.NativeType.I32),g.createI32(0)));break;case 4:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(e.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,e.options.usizeType.toNativeZero(g),g.createGetLocal(m.index,e.options.nativeSizeType)),g.createBinary(e.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,g.createGetLocal(m.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(g)));break;case 3:m=e.currentFunction.getAndFreeTempLocal(u.Type.i64),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(l.BinaryOp.SubI64,g.createI64(0,0),g.createGetLocal(m.index,l.NativeType.I64)),g.createBinary(l.BinaryOp.GtI64,g.createGetLocal(m.index,l.NativeType.I64),g.createI64(0,0)));break;case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:y=h;break;case 11:y=g.createUnary(l.UnaryOp.AbsF32,h);break;case 12:y=g.createUnary(l.UnaryOp.AbsF64,h);break;case 13:y=g.createUnreachable();break;default:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"max":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"2",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(d=e.compileExpression(n[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getTempLocal(u.Type.i32),E=e.currentFunction.getAndFreeTempLocal(u.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(l.BinaryOp.GtI32,g.createGetLocal(m.index,l.NativeType.I32),g.createGetLocal(E.index,l.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(u.Type.i32),E=e.currentFunction.getAndFreeTempLocal(u.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(l.BinaryOp.GtU32,g.createGetLocal(m.index,l.NativeType.I32),g.createGetLocal(E.index,l.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(u.Type.i64),E=e.currentFunction.getAndFreeTempLocal(u.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(l.BinaryOp.GtI64,g.createGetLocal(m.index,l.NativeType.I64),g.createGetLocal(E.index,l.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(u.Type.i64),E=e.currentFunction.getAndFreeTempLocal(u.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(l.BinaryOp.GtU64,g.createGetLocal(m.index,l.NativeType.I64),g.createGetLocal(E.index,l.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 11:y=g.createBinary(l.BinaryOp.MaxF32,h,d);break;case 12:y=g.createBinary(l.BinaryOp.MaxF64,h,d);break;default:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"min":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"2",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(d=e.compileExpression(n[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getTempLocal(u.Type.i32),E=e.currentFunction.getAndFreeTempLocal(u.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(l.BinaryOp.LtI32,g.createGetLocal(m.index,l.NativeType.I32),g.createGetLocal(E.index,l.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(u.Type.i32),E=e.currentFunction.getAndFreeTempLocal(u.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(l.BinaryOp.LtU32,g.createGetLocal(m.index,l.NativeType.I32),g.createGetLocal(E.index,l.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(u.Type.i64),E=e.currentFunction.getAndFreeTempLocal(u.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(l.BinaryOp.LtI64,g.createGetLocal(m.index,l.NativeType.I64),g.createGetLocal(E.index,l.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(u.Type.i64),E=e.currentFunction.getAndFreeTempLocal(u.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(l.BinaryOp.LtU64,g.createGetLocal(m.index,l.NativeType.I64),g.createGetLocal(E.index,l.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?l.BinaryOp.LtI64:l.BinaryOp.LtI32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?l.BinaryOp.LtU64:l.BinaryOp.LtU32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 11:y=g.createBinary(l.BinaryOp.MinF32,h,d);break;case 12:y=g.createBinary(l.BinaryOp.MinF64,h,d);break;default:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"ceil":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(l.UnaryOp.CeilF32,h);break;case 12:y=g.createUnary(l.UnaryOp.CeilF64,h);break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"floor":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(l.UnaryOp.FloorF32,h);break;case 12:y=g.createUnary(l.UnaryOp.FloorF64,h);break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"copysign":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"2",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(d=e.compileExpression(n[1],e.currentType),e.currentType.kind){case 11:y=g.createBinary(l.BinaryOp.CopysignF32,h,d);break;case 12:y=g.createBinary(l.BinaryOp.CopysignF64,h,d);break;default:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"nearest":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(l.UnaryOp.NearestF32,h);break;case 12:y=g.createUnary(l.UnaryOp.NearestF64,h);break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"reinterpret":if(1!=n.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r?r.length.toString(10):"0")),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r?r.length.toString(10):"0"),g.createUnreachable();switch(r[0].kind){case 2:case 7:h=e.compileExpression(n[0],u.Type.f32),y=g.createUnary(l.UnaryOp.ReinterpretF32,h);break;case 3:case 8:h=e.compileExpression(n[0],u.Type.f64),y=g.createUnary(l.UnaryOp.ReinterpretF64,h);break;case 9:if(r[0].isReference)return e.error(p.DiagnosticCode.Operation_not_supported,o.range),e.currentType=r[0],g.createUnreachable();case 4:h=e.compileExpression(n[0],e.options.isWasm64?u.Type.f64:u.Type.f32),y=g.createUnary(e.options.isWasm64?l.UnaryOp.ReinterpretF64:l.UnaryOp.ReinterpretF32,h);break;case 11:h=e.compileExpression(n[0],u.Type.u32),y=g.createUnary(l.UnaryOp.ReinterpretI32,h);break;case 12:h=e.compileExpression(n[0],u.Type.u64),y=g.createUnary(l.UnaryOp.ReinterpretI64,h);break;default:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return e.currentType=r[0],y;case"sqrt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(e.currentType.kind){case 11:y=g.createUnary(l.UnaryOp.SqrtF32,h);break;case 12:y=g.createUnary(l.UnaryOp.SqrtF64,h);break;default:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"trunc":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),g.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(l.UnaryOp.TruncF32,h);break;case 12:y=g.createUnary(l.UnaryOp.TruncF64,h);break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"load":return n.length<1||n.length>2?(r&&1==r.length||e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r?r.length.toString(10):"0"),n.length<1?e.error(p.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,o.range,"1",n.length.toString(10)):e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"2",n.length.toString(10)),g.createUnreachable()):r&&1==r.length?(h=e.compileExpression(n[0],e.options.usizeType),T=2==n.length?a(e,n[1]):0,T<0?g.createUnreachable():g.createLoad(r[0].byteSize,r[0].is(5),h,r[0].is(4)&&i.is(4)&&i.size>=r[0].size?(e.currentType=i).toNativeType():(e.currentType=r[0]).toNativeType(),T)):(r&&r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"store":return e.currentType=u.Type.void,n.length<2||n.length>3?(r&&1==r.length||e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r?r.length.toString(10):"0"),n.length<2?e.error(p.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,o.range,"2",n.length.toString(10)):e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"3",n.length.toString(10)),g.createUnreachable()):r&&1==r.length?(h=e.compileExpression(n[0],e.options.usizeType),d=e.compileExpression(n[1],r[0],r[0].is(4)?0:1),e.currentType.is(4)&&r[0].is(4)&&r[0].size>e.currentType.size?(d=e.convertExpression(d,e.currentType,r[0],1,n[1]),f=r[0]):f=e.currentType,(T=3==n.length?a(e,n[2]):0)<0?g.createUnreachable():(e.currentType=u.Type.void,g.createStore(r[0].byteSize,h,d,f.toNativeType(),T))):(e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"sizeof":return e.currentType=e.options.usizeType,0!=n.length?(r&&1==r.length||e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r?r.length.toString(10):"0"),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"0",n.length.toString(10)),g.createUnreachable()):r?1!=r.length?(e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable()):y=e.options.isWasm64?g.createI64(r[0].byteSize,0):g.createI32(r[0].byteSize):(e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1","0"),g.createUnreachable());case"select":if(3!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"3",n.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.i32,0);switch(d=e.compileExpression(n[1],f=e.currentType),_=e.compileExpression(n[2],u.Type.bool),e.currentType=f,e.currentType.kind){default:y=g.createSelect(h,d,_);break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=g.createUnreachable()}return y;case"unreachable":return 0!=n.length&&e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"0",n.length.toString(10)),r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),g.createUnreachable();case"current_memory":return e.currentType=u.Type.i32,0!=n.length&&e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"0",n.length.toString(10)),r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),g.createHost(l.HostOp.CurrentMemory);case"grow_memory":return e.currentType=u.Type.i32,1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"0",n.length.toString(10)),h=g.createUnreachable()):h=e.compileExpression(n[0],u.Type.i32),r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),g.createHost(l.HostOp.GrowMemory,null,[h]);case"move_memory":if(r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),3!=n.length)return e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"3",n.length.toString(10)),e.currentType=u.Type.void,g.createUnreachable();throw h=e.compileExpression(n[0],e.options.usizeType),d=e.compileExpression(n[1],e.options.usizeType),_=e.compileExpression(n[2],e.options.usizeType),e.currentType=u.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),3!=n.length)return e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"3",n.length.toString(10)),e.currentType=u.Type.void,g.createUnreachable();throw h=e.compileExpression(n[0],e.options.usizeType),d=e.compileExpression(n[1],u.Type.u32),_=e.compileExpression(n[2],e.options.usizeType),e.currentType=u.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?9!=r[0].kind?(e.error(p.DiagnosticCode.Operation_not_supported,o.range),e.currentType=r[0],g.createUnreachable()):1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=r[0],g.createUnreachable()):(h=e.compileExpression(n[0],e.options.usizeType,0),e.currentType=r[0],9!=e.currentType.kind?(e.error(p.DiagnosticCode.Operation_not_supported,o.range),g.createUnreachable()):h):(r&&r.length&&(e.currentType=r[0]),e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"assert":if(n.length<1||n.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10))),n.length<1?e.error(p.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,o.range,"1",n.length.toString(10)):n.length>2&&e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"2",n.length.toString(10)),g.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,o.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(n[0],r[0])}else h=e.compileExpression(n[0],u.Type.i32,0);if(f=e.currentType,e.currentType=f.nonNullableType,e.options.noAssert)return i==u.Type.void?(e.currentType=u.Type.void,g.createNop()):h;var A=s(e,2==n.length?n[1]:null,o);if(e.currentType=f.nonNullableType,i==u.Type.void){switch(e.currentType.kind){default:y=g.createIf(g.createUnary(l.UnaryOp.EqzI32,h),A);break;case 3:case 8:y=g.createIf(g.createUnary(l.UnaryOp.EqzI64,h),A);break;case 4:case 9:y=g.createIf(g.createUnary(e.options.isWasm64?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,h),A);break;case 11:y=g.createIf(g.createBinary(l.BinaryOp.EqF32,h,g.createF32(0)),A);break;case 12:y=g.createIf(g.createBinary(l.BinaryOp.EqF64,h,g.createF64(0)),A);break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=A}e.currentType=u.Type.void}else switch(e.currentType.kind){default:m=e.currentFunction.getAndFreeTempLocal(u.Type.i32),y=g.createIf(g.createUnary(l.UnaryOp.EqzI32,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,l.NativeType.I32));break;case 3:case 8:m=e.currentFunction.getAndFreeTempLocal(u.Type.i64),y=g.createIf(g.createUnary(l.UnaryOp.EqzI64,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,l.NativeType.I64));break;case 4:case 9:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=g.createIf(g.createUnary(e.options.isWasm64?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,e.options.nativeSizeType));break;case 11:m=e.currentFunction.getAndFreeTempLocal(u.Type.f32),y=g.createIf(g.createBinary(l.BinaryOp.EqF32,g.createTeeLocal(m.index,h),g.createF32(0)),A,g.createGetLocal(m.index,l.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(u.Type.f64),y=g.createIf(g.createBinary(l.BinaryOp.EqF64,g.createTeeLocal(m.index,h),g.createF64(0)),A,g.createGetLocal(m.index,l.NativeType.F64));break;case 13:e.error(p.DiagnosticCode.Operation_not_supported,o.range),y=A}return y;case"i8":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.i8,g.createUnreachable()):e.compileExpression(n[0],u.Type.i8,2);case"i16":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.i16,g.createUnreachable()):e.compileExpression(n[0],u.Type.i16,2);case"i32":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.i32,g.createUnreachable()):e.compileExpression(n[0],u.Type.i32,2);case"i64":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.i64,g.createUnreachable()):e.compileExpression(n[0],u.Type.i64,2);case"isize":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=e.options.isWasm64?u.Type.isize64:u.Type.isize32,g.createUnreachable()):e.compileExpression(n[0],e.options.isWasm64?u.Type.isize64:u.Type.isize32,2);case"u8":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.u8,g.createUnreachable()):e.compileExpression(n[0],u.Type.u8,2);case"u16":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.u16,g.createUnreachable()):e.compileExpression(n[0],u.Type.u16,2);case"u32":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.u32,g.createUnreachable()):e.compileExpression(n[0],u.Type.u32,2);case"u64":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.u64,g.createUnreachable()):e.compileExpression(n[0],u.Type.u64,2);case"usize":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=e.options.usizeType,g.createUnreachable()):e.compileExpression(n[0],e.options.usizeType,2);case"bool":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.bool,g.createUnreachable()):e.compileExpression(n[0],u.Type.bool,2);case"f32":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.f32,g.createUnreachable()):e.compileExpression(n[0],u.Type.f32,2);case"f64":return r&&e.error(p.DiagnosticCode.Type_0_is_not_generic,o.range,t.internalName),1!=n.length?(e.error(p.DiagnosticCode.Expected_0_arguments_but_got_1,o.range,"1",n.length.toString(10)),e.currentType=u.Type.f64,g.createUnreachable()):e.compileExpression(n[0],u.Type.f64,2)}return e.error(p.DiagnosticCode.Operation_not_supported,o.range),g.createUnreachable()}function a(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,u.Type.usize64),(_BinaryenExpressionGetId(r)!=l.ExpressionId.Const||_BinaryenExpressionGetType(r)!=l.NativeType.I64||0!=_BinaryenConstGetValueI64High(r)||(n=_BinaryenConstGetValueI64Low(r))<0)&&(e.error(p.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,u.Type.usize32),(_BinaryenExpressionGetId(r)!=l.ExpressionId.Const||_BinaryenExpressionGetType(r)!=l.NativeType.I32||(n=_BinaryenConstGetValueI32(r))<0)&&(e.error(p.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function o(e,t,r){var n=t.program,i=n.elements.get(e.options.allocateImpl);if(i)if(i.kind==h.ElementKind.FUNCTION_PROTOTYPE){var a=i.resolve();if(a)if(!a.is(h.ElementFlags.GENERIC)&&a.returnType==e.options.usizeType&&a.parameters&&1==a.parameters.length&&a.parameters[0].type==e.options.usizeType){if(e.compileFunction(a))return e.makeCall(a,[e.options.isWasm64?e.module.createI64(t.currentMemoryOffset):e.module.createI32(t.currentMemoryOffset)])}else n.error(p.DiagnosticCode.Implementation_0_must_match_the_signature_1,r.range,e.options.allocateImpl,"(size: usize): usize")}else n.error(p.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,i.internalName);else n.error(p.DiagnosticCode.Cannot_find_name_0,r.range,e.options.allocateImpl);return e.module.createUnreachable()}function s(e,t,r){var n=e.module,i=n.createUnreachable(),a=e.program.elements.get("abort"),o=e.program.types.get("string");if(a&&a.kind==h.ElementKind.FUNCTION_PROTOTYPE&&o){var s=a.resolve();s&&e.compileFunction(s)&&(assert(s.parameters&&4==s.parameters.length),i=n.createBlock(null,[e.makeCall(s,[null!=t?e.compileExpression(t,o):e.options.usizeType.toNativeZero(n),e.compileStaticString(r.range.source.normalizedPath),n.createI32(r.range.line),n.createI32(r.range.column)]),i]))}return i}Object.defineProperty(t,"__esModule",{value:!0});var c=r(4),p=r(1),u=r(5),l=r(0),h=r(2);t.compileGetConstant=n,t.compileCall=i,t.compileAllocate=o,t.compileAbort=s},function(e,t,r){(function(e){const t=e.Long||r(18);e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),o=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(o)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(t,r(3))},function(e,t){function r(e,t,r){this.low=0|e,this.high=0|t,this.unsigned=!!r}function n(e){return!0===(e&&e.__isLong__)}function i(e,t){var r,n,i;return t?(e>>>=0,(i=0<=e&&e<256)&&(n=l[e])?n:(r=o(e,(0|e)<0?-1:0,!0),i&&(l[e]=r),r)):(e|=0,(i=-128<=e&&e<128)&&(n=u[e])?n:(r=o(e,e<0?-1:0,!1),i&&(u[e]=r),r))}function a(e,t){if(isNaN(e))return t?f:E;if(t){if(e<0)return f;if(e>=_)return v}else{if(e<=-y)return N;if(e+1>=y)return I}return e<0?a(-e,t).neg():o(e%d|0,e/d|0,t)}function o(e,t,n){return new r(e,t,n)}function s(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return E;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return s(e.substring(1),t,r).neg();for(var i=a(h(r,8)),o=E,c=0;c>>0:this.low},S.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},S.toString=function(e){if((e=e||10)<2||36>>0,u=p.toString(e);if(o=c,o.isZero())return u+s;for(;u.length<6;)u="0"+u;s=""+u+s}},S.getHighBits=function(){return this.high},S.getHighBitsUnsigned=function(){return this.high>>>0},S.getLowBits=function(){return this.low},S.getLowBitsUnsigned=function(){return this.low>>>0},S.getNumBitsAbs=function(){if(this.isNegative())return this.eq(N)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},S.isOdd=function(){return 1==(1&this.low)},S.isEven=function(){return 0==(1&this.low)},S.equals=function(e){return n(e)||(e=c(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},S.eq=S.equals,S.notEquals=function(e){return!this.eq(e)},S.neq=S.notEquals,S.ne=S.notEquals,S.lessThan=function(e){return this.comp(e)<0},S.lt=S.lessThan,S.lessThanOrEqual=function(e){return this.comp(e)<=0},S.lte=S.lessThanOrEqual,S.le=S.lessThanOrEqual,S.greaterThan=function(e){return this.comp(e)>0},S.gt=S.greaterThan,S.greaterThanOrEqual=function(e){return this.comp(e)>=0},S.gte=S.greaterThanOrEqual,S.ge=S.greaterThanOrEqual,S.compare=function(e){if(n(e)||(e=c(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},S.comp=S.compare,S.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(T)},S.neg=S.negate,S.add=function(e){n(e)||(e=c(e));var t=this.high>>>16,r=65535&this.high,i=this.low>>>16,a=65535&this.low,s=e.high>>>16,p=65535&e.high,u=e.low>>>16,l=65535&e.low,h=0,d=0,_=0,y=0;return y+=a+l,_+=y>>>16,y&=65535,_+=i+u,d+=_>>>16,_&=65535,d+=r+p,h+=d>>>16,d&=65535,h+=t+s,h&=65535,o(_<<16|y,h<<16|d,this.unsigned)},S.subtract=function(e){return n(e)||(e=c(e)),this.add(e.neg())},S.sub=S.subtract,S.multiply=function(e){if(this.isZero())return E;if(n(e)||(e=c(e)),p){return o(p.mul(this.low,this.high,e.low,e.high),p.get_high(),this.unsigned)}if(e.isZero())return E;if(this.eq(N))return e.isOdd()?N:E;if(e.eq(N))return this.isOdd()?N:E;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(m)&&e.lt(m))return a(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,r=65535&this.high,i=this.low>>>16,s=65535&this.low,u=e.high>>>16,l=65535&e.high,h=e.low>>>16,d=65535&e.low,_=0,y=0,f=0,T=0;return T+=s*d,f+=T>>>16,T&=65535,f+=i*d,y+=f>>>16,f&=65535,f+=s*h,y+=f>>>16,f&=65535,y+=r*d,_+=y>>>16,y&=65535,y+=i*h,_+=y>>>16,y&=65535,y+=s*l,_+=y>>>16,y&=65535,_+=t*d+r*h+i*l+s*u,_&=65535,o(f<<16|T,_<<16|y,this.unsigned)},S.mul=S.multiply,S.divide=function(e){if(n(e)||(e=c(e)),e.isZero())throw Error("division by zero");if(p){if(!this.unsigned&&-2147483648===this.high&&-1===e.low&&-1===e.high)return this;return o((this.unsigned?p.div_u:p.div_s)(this.low,this.high,e.low,e.high),p.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?f:E;var t,r,i;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return f;if(e.gt(this.shru(1)))return g;i=f}else{if(this.eq(N)){if(e.eq(T)||e.eq(A))return N;if(e.eq(N))return T;return t=this.shr(1).div(e).shl(1),t.eq(E)?e.isNegative()?T:A:(r=this.sub(e.mul(t)),i=t.add(r.div(e)))}if(e.eq(N))return this.unsigned?f:E;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();i=E}for(r=this;r.gte(e);){t=Math.max(1,Math.floor(r.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),u=s<=48?1:h(2,s-48),l=a(t),d=l.mul(e);d.isNegative()||d.gt(r);)t-=u,l=a(t,this.unsigned),d=l.mul(e);l.isZero()&&(l=T),i=i.add(l),r=r.sub(d)}return i},S.div=S.divide,S.modulo=function(e){if(n(e)||(e=c(e)),p){return o((this.unsigned?p.rem_u:p.rem_s)(this.low,this.high,e.low,e.high),p.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))},S.mod=S.modulo,S.rem=S.modulo,S.not=function(){return o(~this.low,~this.high,this.unsigned)},S.and=function(e){return n(e)||(e=c(e)),o(this.low&e.low,this.high&e.high,this.unsigned)},S.or=function(e){return n(e)||(e=c(e)),o(this.low|e.low,this.high|e.high,this.unsigned)},S.xor=function(e){return n(e)||(e=c(e)),o(this.low^e.low,this.high^e.high,this.unsigned)},S.shiftLeft=function(e){return n(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?o(this.low<>>32-e,this.unsigned):o(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):o(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},S.shr=S.shiftRight,S.shiftRightUnsigned=function(e){if(n(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;if(e<32){return o(this.low>>>e|t<<32-e,t>>>e,this.unsigned)}return 32===e?o(t,0,this.unsigned):o(t>>>e-32,0,this.unsigned)},S.shru=S.shiftRightUnsigned,S.shr_u=S.shiftRightUnsigned,S.toSigned=function(){return this.unsigned?o(this.low,this.high,!1):this},S.toUnsigned=function(){return this.unsigned?this:o(this.low,this.high,!0)},S.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},S.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},S.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},r.fromBytes=function(e,t,n){return n?r.fromBytesLE(e,t):r.fromBytesBE(e,t)},r.fromBytesLE=function(e,t){return new r(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},r.fromBytesBE=function(e,t){return new r(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){"use strict";function n(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new I.Parser,r=!0),n.parseFile(e,t,r),n}function i(e){return e.nextFile()}function a(e){var t=e.program;return t.diagnosticsOffset0&&this.push(", "),this.push("$"),this.push(a.toString(10)),this.push(": "),this.push(n(_BinaryenFunctionGetParam(e,a)));this.push("): "),this.push(n(_BinaryenFunctionGetResult(e))),this.push(" "),_BinaryenExpressionGetId(r)!=i.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),_BinaryenExpressionGetId(r)!=i.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,a,o,s=_BinaryenExpressionGetId(e),c=_BinaryenExpressionGetType(e);switch(s){case i.ExpressionId.Block:for(null!=(r=i.readString(_BinaryenBlockGetName(e)))&&(this.push(r),this.push(": ")),this.push("{\n"),o=_BinaryenBlockGetNumChildren(e),a=0;a("),this.push(_BinaryenLoadGetOffset(e).toString(10)),this.push(" + "),this.decompileExpression(_BinaryenLoadGetPtr(e)),void this.push(")");case i.ExpressionId.Store:return this.push("store<"),this.push(n(c)),this.push(">("),this.push(_BinaryenStoreGetOffset(e).toString(10)),this.push(" + "),this.decompileExpression(_BinaryenStoreGetPtr(e)),this.push(", "),this.decompileExpression(_BinaryenStoreGetValue(e)),void this.push(")");case i.ExpressionId.Const:switch(c){case i.NativeType.I32:return void this.push(_BinaryenConstGetValueI32(e).toString(10));case i.NativeType.I64:return void this.push(i64_to_string(i64_new(_BinaryenConstGetValueI64Low(e),_BinaryenConstGetValueI64High(e))));case i.NativeType.F32:return void this.push(_BinaryenConstGetValueF32(e).toString(10));case i.NativeType.F64:return void this.push(_BinaryenConstGetValueF64(e).toString(10))}break;case i.ExpressionId.Unary:switch(_BinaryenUnaryGetOp(e)){case i.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.NegF32:case i.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.EqzI32:case i.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.WrapI64:case i.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case i.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case i.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")")}break;case i.ExpressionId.Binary:switch(_BinaryenBinaryGetOp(e)){case i.BinaryOp.AddI32:case i.BinaryOp.AddI64:case i.BinaryOp.AddF32:case i.BinaryOp.AddF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" + "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.SubI32:case i.BinaryOp.SubI64:case i.BinaryOp.SubF32:case i.BinaryOp.SubF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" - "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.MulI32:case i.BinaryOp.MulI64:case i.BinaryOp.MulF32:case i.BinaryOp.MulF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" * "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.DivI32:case i.BinaryOp.DivI64:case i.BinaryOp.DivF32:case i.BinaryOp.DivF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.DivU32:return this.push("("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.RemI32:case i.BinaryOp.RemI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" % "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.RemU32:return this.push("("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.AndI32:case i.BinaryOp.AndI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" & "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.OrI32:case i.BinaryOp.OrI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" | "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.XorI32:case i.BinaryOp.XorI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" ^ "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.ShlI32:case i.BinaryOp.ShlI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" << "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.ShrU32:case i.BinaryOp.ShrU64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >>> "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.ShrI32:case i.BinaryOp.ShrI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >> "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.EqI32:case i.BinaryOp.EqI64:case i.BinaryOp.EqF32:case i.BinaryOp.EqF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" == "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.NeI32:case i.BinaryOp.NeI64:case i.BinaryOp.NeF32:case i.BinaryOp.NeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" != "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.LtI32:case i.BinaryOp.LtI64:case i.BinaryOp.LtF32:case i.BinaryOp.LtF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.LtU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.LeI32:case i.BinaryOp.LeI64:case i.BinaryOp.LeF32:case i.BinaryOp.LeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.LeU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.GtI32:case i.BinaryOp.GtI64:case i.BinaryOp.GtF32:case i.BinaryOp.GtF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.GtU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.GeI32:case i.BinaryOp.GeI64:case i.BinaryOp.GeF32:case i.BinaryOp.GeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.GeU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.DivU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.RemU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" % "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.LtU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.LeU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.GtU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.GeU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case i.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case i.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")")}return;case i.ExpressionId.Select:return this.push("select<"),this.push(n(c)),this.push(">("),this.decompileExpression(_BinaryenSelectGetIfTrue(e)),this.push(", "),this.decompileExpression(_BinaryenSelectGetIfFalse(e)),this.push(", "),this.decompileExpression(_BinaryenSelectGetCondition(e)),void this.push(")");case i.ExpressionId.Drop:return this.decompileExpression(_BinaryenDropGetValue(e)),void this.push(";\n");case i.ExpressionId.Return:return void((t=_BinaryenReturnGetValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case i.ExpressionId.Host:switch(_BinaryenHostGetOp(e)){case i.HostOp.CurrentMemory:return void this.push("current_memory()");case i.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(_BinaryenHostGetOperand(e,0)),void this.push(")")}break;case i.ExpressionId.Nop:return void this.push(";\n");case i.ExpressionId.Unreachable:return void this.push("unreachable()");case i.ExpressionId.AtomicCmpxchg:case i.ExpressionId.AtomicRMW:case i.ExpressionId.AtomicWait:case i.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();t.Decompiler=a},function(e,t,r){"use strict";function n(e){switch(e){case c.Token.DOT_DOT_DOT:return 1;case c.Token.YIELD:return 2;case c.Token.EXCLAMATION:case c.Token.TILDE:case c.Token.PLUS:case c.Token.MINUS:case c.Token.PLUS_PLUS:case c.Token.MINUS_MINUS:case c.Token.TYPEOF:case c.Token.VOID:case c.Token.DELETE:return 16;case c.Token.NEW:return 19;default:return-1}}function i(e){switch(e){case c.Token.COMMA:return 0;case c.Token.EQUALS:case c.Token.PLUS_EQUALS:case c.Token.MINUS_EQUALS:case c.Token.ASTERISK_ASTERISK_EQUALS:case c.Token.ASTERISK_EQUALS:case c.Token.SLASH_EQUALS:case c.Token.PERCENT_EQUALS:case c.Token.LESSTHAN_LESSTHAN_EQUALS:case c.Token.GREATERTHAN_GREATERTHAN_EQUALS:case c.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case c.Token.AMPERSAND_EQUALS:case c.Token.CARET_EQUALS:case c.Token.BAR_EQUALS:return 3;case c.Token.QUESTION:return 4;case c.Token.BAR_BAR:return 5;case c.Token.AMPERSAND_AMPERSAND:return 6;case c.Token.BAR:return 7;case c.Token.CARET:return 8;case c.Token.AMPERSAND:return 9;case c.Token.EQUALS_EQUALS:case c.Token.EXCLAMATION_EQUALS:case c.Token.EQUALS_EQUALS_EQUALS:case c.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case c.Token.AS:case c.Token.IN:case c.Token.INSTANCEOF:case c.Token.LESSTHAN:case c.Token.GREATERTHAN:case c.Token.LESSTHAN_EQUALS:case c.Token.GREATERTHAN_EQUALS:return 11;case c.Token.LESSTHAN_LESSTHAN:case c.Token.GREATERTHAN_GREATERTHAN:case c.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case c.Token.PLUS:case c.Token.MINUS:return 13;case c.Token.ASTERISK:case c.Token.SLASH:case c.Token.PERCENT:return 14;case c.Token.ASTERISK_ASTERISK:return 15;case c.Token.PLUS_PLUS:case c.Token.MINUS_MINUS:return 17;case c.Token.DOT:case c.Token.NEW:case c.Token.OPENBRACKET:return 19;default:return-1}}function a(e){switch(e){case c.Token.EQUALS:case c.Token.PLUS_EQUALS:case c.Token.MINUS_EQUALS:case c.Token.ASTERISK_ASTERISK_EQUALS:case c.Token.ASTERISK_EQUALS:case c.Token.SLASH_EQUALS:case c.Token.PERCENT_EQUALS:case c.Token.LESSTHAN_LESSTHAN_EQUALS:case c.Token.GREATERTHAN_GREATERTHAN_EQUALS:case c.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case c.Token.AMPERSAND_EQUALS:case c.Token.CARET_EQUALS:case c.Token.BAR_EQUALS:case c.Token.QUESTION:case c.Token.ASTERISK_ASTERISK:return!0;default:return!1}}var o=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var s=r(2),c=r(7),p=r(1),u=r(10),l=r(6),h=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.program=new s.Program(t.diagnostics),t}return o(t,e),t.prototype.parseFile=function(e,t,r){for(var n=u.normalize(t),i=0,a=this.program.sources.length;i"),null}if(e.skip(c.Token.BAR)){if(!e.skip(c.Token.NULL))return r||this.error(p.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;h=!0}a=l.Node.createType(s,u,h,e.range(i,e.pos))}for(;e.skip(c.Token.OPENBRACKET);){var _=e.tokenPos;if(!e.skip(c.Token.CLOSEBRACKET))return r||this.error(p.DiagnosticCode._0_expected,e.range(),"]"),null;var y=e.range(_,e.pos);if(h=!1,e.skip(c.Token.BAR)){if(!e.skip(c.Token.NULL))return r||this.error(p.DiagnosticCode._0_expected,e.range(),"null"),null;h=!0}if(a=l.Node.createType(l.Node.createIdentifierExpression("Array",y),[a],h,e.range(i,e.pos)),h)break}return a},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skip(c.Token.IDENTIFIER)){for(var r=e.readIdentifier(),n=l.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(c.Token.DOT);){if(!e.skip(c.Token.IDENTIFIER))return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=l.Node.createPropertyAccessExpression(n,l.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i;if(!e.skip(c.Token.OPENPAREN))return l.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return l.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(p.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos,i=new Array,a=l.hasModifier(l.ModifierKind.DECLARE,t);do{var o=this.parseVariableDeclaration(e,a,t,r);if(!o)return null;i.push(o)}while(e.skip(c.Token.COMMA));var s=l.Node.createVariableStatement(i,t,r,e.range(n,e.pos));return e.skip(c.Token.SEMICOLON),s},t.prototype.parseVariableDeclaration=function(e,t,r,n){if(void 0===t&&(t=!1),!e.skip(c.Token.IDENTIFIER))return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null;var i=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=null;e.skip(c.Token.COLON)&&(a=this.parseType(e));var o=null;if(e.skip(c.Token.EQUALS)){if(t&&this.error(p.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(o=this.parseExpression(e,1)))return null}else l.hasModifier(l.ModifierKind.CONST,r)?l.hasModifier(l.ModifierKind.DECLARE,r)||this.error(p.DiagnosticCode._const_declarations_must_be_initialized,i.range):a||this.error(p.DiagnosticCode.Type_expected,e.range(e.pos));return l.Node.createVariableDeclaration(i,a,o,r,n,c.Range.join(i.range,e.range()))},t.prototype.parseEnum=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;if(e.next()!=c.Token.IDENTIFIER)return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null;var i=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=c.Token.OPENBRACE)return this.error(p.DiagnosticCode._0_expected,e.range(),"{"),null;var a=new Array;if(!e.skip(c.Token.CLOSEBRACE)){do{var o=this.parseEnumValue(e);if(!o)return null;a.push(o)}while(e.skip(c.Token.COMMA));if(!e.skip(c.Token.CLOSEBRACE))return this.error(p.DiagnosticCode._0_expected,e.range(),"}"),null}var s=l.Node.createEnumDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(c.Token.SEMICOLON),s},t.prototype.parseEnumValue=function(e){if(!e.skip(c.Token.IDENTIFIER))return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null;var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;return e.skip(c.Token.EQUALS)&&!(r=this.parseExpression(e,1))?null:l.Node.createEnumValueDeclaration(t,r,c.Range.join(t.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=c.Token.SEMICOLON&&e.nextToken!=c.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=l.Node.createReturnStatement(t,e.range());return e.skip(c.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){var t=new Array;if(e.skip(c.Token.GREATERTHAN))this.error(p.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range());else{do{var r=this.parseTypeParameter(e);if(!r)return null;t.push(r)}while(e.skip(c.Token.COMMA));if(!e.skip(c.Token.GREATERTHAN))return this.error(p.DiagnosticCode._0_expected,e.range(),">"),null}return t},t.prototype.parseTypeParameter=function(e){if(e.next()==c.Token.IDENTIFIER){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;return e.skip(c.Token.EXTENDS)&&!(r=this.parseType(e))?null:l.Node.createTypeParameter(t,r,c.Range.join(t.range,e.range()))}return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e){var t=new Array,r=null,n=!1,i=!1;if(e.peek()!=c.Token.CLOSEPAREN)do{var a=this.parseParameter(e);if(!a)return null;switch(r&&!i&&(this.error(p.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,r.name.range),i=!0),a.parameterKind){default:n&&this.error(p.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,a.name.range);break;case l.ParameterKind.OPTIONAL:n=!0;break;case l.ParameterKind.REST:r=a}t.push(a)}while(e.skip(c.Token.COMMA));return e.skip(c.Token.CLOSEPAREN)?t:(this.error(p.DiagnosticCode._0_expected,e.range(),")"),null)},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null;if(e.skip(c.Token.DOT_DOT_DOT)&&(r=!0,i=e.range()),e.skip(c.Token.IDENTIFIER)){r||(i=e.range());var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),o=null;if((n=e.skip(c.Token.QUESTION))&&r&&this.error(p.DiagnosticCode.A_rest_parameter_cannot_be_optional,a.range),e.skip(c.Token.COLON)&&!(o=this.parseType(e)))return null;var s=null;return!e.skip(c.Token.EQUALS)||(r&&this.error(p.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,a.range),n?this.error(p.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,a.range):n=!0,s=this.parseExpression(e,1))?l.Node.createParameter(a,o,s,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,c.Range.join(i,e.range())):null}return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;if(!e.skip(c.Token.IDENTIFIER))return this.error(p.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var i=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=null;if(e.skip(c.Token.LESSTHAN)&&!(a=this.parseTypeParameters(e)))return null;if(!e.skip(c.Token.OPENPAREN))return this.error(p.DiagnosticCode._0_expected,e.range(e.pos),"("),null;var o=this.parseParameters(e);if(!o)return null;var s=l.hasModifier(l.ModifierKind.SET,t);s&&(1!=o.length&&this.error(p.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),o.length&&o[0].initializer&&this.error(p.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),l.hasModifier(l.ModifierKind.GET,t)&&o.length&&this.error(p.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var u=null;if(e.skip(c.Token.COLON)){if(!(u=this.parseType(e,s)))return null}else s||this.error(p.DiagnosticCode.Type_expected,e.range(e.pos));var h=l.hasModifier(l.ModifierKind.DECLARE,t),d=null;if(e.skip(c.Token.OPENBRACE)){if(h&&this.error(p.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(d=this.parseBlockStatement(e,!1)))return null}else h||this.error(p.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var _=l.Node.createFunctionDeclaration(i,a,o,u,d,t,r,e.range(n,e.pos));return e.skip(c.Token.SEMICOLON),_},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==c.Token.FUNCTION){if(n=!1,t=e.skip(c.Token.IDENTIFIER)?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createIdentifierExpression("",e.range(e.pos,e.pos)),!e.skip(c.Token.OPENPAREN))return this.error(p.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==c.Token.OPENPAREN),t=l.Node.createIdentifierExpression("",e.range(e.tokenPos,e.tokenPos));var i=this.parseParameters(e);return i?this.parseFunctionExpressionCommon(e,t,i,n,r):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i){void 0===i&&(i=-1),i<0&&(i=t.range.start);var a=null;if(e.skip(c.Token.COLON)&&!(a=this.parseType(e)))return null;if(n&&!e.skip(c.Token.EQUALS_GREATERTHAN))return this.error(p.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var o;if(n)o=this.parseStatement(e,!1);else{if(!e.skip(c.Token.OPENBRACE))return this.error(p.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;o=this.parseBlockStatement(e,!1)}if(!o)return null;var s=l.Node.createFunctionDeclaration(t,null,r,a,o,null,null,e.range(i,e.pos));return l.Node.createFunctionExpression(s,n)},t.prototype.parseClass=function(e,t,r){var n=r&&r.length?r[0].range.start:t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(c.Token.IDENTIFIER)){var i,a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(c.Token.LESSTHAN)){if(!(i=this.parseTypeParameters(e)))return null}else i=[];var o=null;if(e.skip(c.Token.EXTENDS)&&!(o=this.parseType(e)))return null;var s=new Array;if(e.skip(c.Token.IMPLEMENTS))do{var u=this.parseType(e);if(!u)return null;s.push(u)}while(e.skip(c.Token.COMMA));if(e.skip(c.Token.OPENBRACE)){var h=new Array;if(!e.skip(c.Token.CLOSEBRACE)){var d=l.hasModifier(l.ModifierKind.DECLARE,t);do{var _=this.parseClassMember(e,d);if(!_)return null;h.push(_)}while(!e.skip(c.Token.CLOSEBRACE))}return l.Node.createClassDeclaration(a,i,o,s,h,t,r,e.range(n,e.pos))}this.error(p.DiagnosticCode._0_expected,e.range(),"{")}else this.error(p.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(c.Token.AT);){var i=this.parseDecorator(e);if(!i)break;n.push(i)}var a=null;e.skip(c.Token.PUBLIC)?a=l.addModifier(l.Node.createModifier(l.ModifierKind.PUBLIC,e.range()),a):e.skip(c.Token.PRIVATE)?a=l.addModifier(l.Node.createModifier(l.ModifierKind.PRIVATE,e.range()),a):e.skip(c.Token.PROTECTED)&&(a=l.addModifier(l.Node.createModifier(l.ModifierKind.PROTECTED,e.range()),a)),e.skip(c.Token.STATIC)?a=l.addModifier(l.Node.createModifier(l.ModifierKind.STATIC,e.range()),a):e.skip(c.Token.ABSTRACT)&&(a=l.addModifier(l.Node.createModifier(l.ModifierKind.ABSTRACT,e.range()),a)),e.skip(c.Token.READONLY)&&(a=l.addModifier(l.Node.createModifier(l.ModifierKind.READONLY,e.range()),a)),e.mark();var o=!1,s=!1;(o=e.skip(c.Token.GET))?e.peek(!0,!0)!=c.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(),o=!1):a=l.addModifier(l.Node.createModifier(l.ModifierKind.GET,e.range()),a):(s=e.skip(c.Token.SET))&&(e.peek(!0,!0)!=c.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(),s=!1):a=l.addModifier(l.Node.createModifier(l.ModifierKind.SET,e.range()),a));var u=e.skip(c.Token.CONSTRUCTOR);if(u||e.skip(c.Token.IDENTIFIER)){var h=u?l.Node.createConstructorExpression(e.range()):l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),d=null;if(e.skip(c.Token.LESSTHAN)&&(u&&this.error(p.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range()),!(d=this.parseTypeParameters(e))))return null;if(e.skip(c.Token.OPENPAREN)){var _=this.parseParameters(e);if(!_)return null;o&&_.length&&this.error(p.DiagnosticCode.A_get_accessor_cannot_have_parameters,h.range),s&&(1!=_.length&&this.error(p.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,h.range),_.length&&_[0].initializer&&this.error(p.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,h.range));var y=null;if(e.skip(c.Token.COLON)){if(h.kind==l.NodeKind.CONSTRUCTOR?this.error(p.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,e.range()):s&&this.error(p.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,e.range()),!(y=this.parseType(e,h.kind==l.NodeKind.CONSTRUCTOR||s)))return null}else s||h.kind==l.NodeKind.CONSTRUCTOR||this.error(p.DiagnosticCode.Type_expected,e.range());var m=null;if(e.skip(c.Token.OPENBRACE)){if(t&&this.error(p.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(m=this.parseBlockStatement(e,!1)))return null}else t||this.error(p.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range());var E=l.Node.createMethodDeclaration(h,d,_,y,m,a,n,e.range(r,e.pos));return e.skip(c.Token.SEMICOLON),E}if(u)this.error(p.DiagnosticCode.Constructor_implementation_is_missing,h.range);else{if(!o&&!s){var f;(f=l.getModifier(l.ModifierKind.ABSTRACT,a))&&this.error(p.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"abstract"),(f=l.getModifier(l.ModifierKind.GET,a))&&this.error(p.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"get"),(f=l.getModifier(l.ModifierKind.SET,a))&&this.error(p.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"set");var T=null;if(e.skip(c.Token.COLON)){if(!(T=this.parseType(e)))return null}else this.error(p.DiagnosticCode.Type_expected,e.range());var g=null;if(e.skip(c.Token.EQUALS)&&!(g=this.parseExpression(e)))return null;var A=l.Node.createFieldDeclaration(h,T,g,a,n,e.range(r,e.pos));return e.skip(c.Token.SEMICOLON),A}this.error(p.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,h.range)}}else this.error(p.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseNamespace=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(c.Token.IDENTIFIER)){var i=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(c.Token.OPENBRACE)){for(var a=new Array;!e.skip(c.Token.CLOSEBRACE);){var o=this.parseTopLevelStatement(e,!0);if(!o)return null;a.push(o)}var s=l.Node.createNamespaceDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(c.Token.SEMICOLON),s}this.error(p.DiagnosticCode._0_expected,e.range(),"{")}else this.error(p.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseExport=function(e,t){var r=t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(c.Token.OPENBRACE)){var n=new Array;if(!e.skip(c.Token.CLOSEBRACE)){do{var i=this.parseExportMember(e);if(!i)return null;n.push(i)}while(e.skip(c.Token.COMMA));if(!e.skip(c.Token.CLOSEBRACE))return this.error(p.DiagnosticCode._0_expected,e.range(),"}"),null}var a=null;if(e.skip(c.Token.FROM)){if(!e.skip(c.Token.STRINGLITERAL))return this.error(p.DiagnosticCode.String_literal_expected,e.range()),null;a=l.Node.createStringLiteralExpression(e.readString(),e.range())}var o=l.Node.createExportStatement(n,a,t,e.range(r,e.pos));return o.normalizedPath&&!this.seenlog.has(o.normalizedPath)&&(this.backlog.push(o.normalizedPath),this.seenlog.add(o.normalizedPath)),e.skip(c.Token.SEMICOLON),o}return this.error(p.DiagnosticCode._0_expected,e.range(),"{"),null},t.prototype.parseExportMember=function(e){if(e.skip(c.Token.IDENTIFIER)){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(c.Token.AS)){if(!e.skip(c.Token.IDENTIFIER))return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null;r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return l.Node.createExportMember(t,r,r?c.Range.join(t.range,r.range):t.range)}return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseImport=function(e){var t=e.tokenPos,r=null,n=null,i=!1;if(e.skip(c.Token.OPENBRACE)){if(r=new Array,!e.skip(c.Token.CLOSEBRACE)){do{var a=this.parseImportDeclaration(e);if(!a)return null;r.push(a)}while(e.skip(c.Token.COMMA));if(!e.skip(c.Token.CLOSEBRACE))return this.error(p.DiagnosticCode._0_expected,e.range(),"}"),null}}else if(e.skip(c.Token.ASTERISK)){if(!e.skip(c.Token.AS))return this.error(p.DiagnosticCode._0_expected,e.range(),"as"),null;if(!e.skip(c.Token.IDENTIFIER))return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null;n=l.Node.createIdentifierExpression(e.readIdentifier(),e.range())}else i=!0;if(i||e.skip(c.Token.FROM)){if(e.skip(c.Token.STRINGLITERAL)){var o,s=l.Node.createStringLiteralExpression(e.readString(),e.range());return n?(assert(!r),o=l.Node.createImportStatementWithWildcard(n,s,e.range(t,e.pos))):o=l.Node.createImportStatement(r,s,e.range(t,e.pos)),this.seenlog.has(o.normalizedPath)||(this.backlog.push(o.normalizedPath),this.seenlog.add(o.normalizedPath)),e.skip(c.Token.SEMICOLON),o}this.error(p.DiagnosticCode.String_literal_expected,e.range())}else this.error(p.DiagnosticCode._0_expected,e.range(),"from");return null},t.prototype.parseImportDeclaration=function(e){if(e.skip(c.Token.IDENTIFIER)){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(c.Token.AS)){if(!e.skip(c.Token.IDENTIFIER))return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null;r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return l.Node.createImportDeclaration(t,r,r?c.Range.join(t.range,r.range):t.range)}return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseExportImport=function(e,t){if(e.skip(c.Token.IDENTIFIER)){var r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(c.Token.EQUALS)){if(e.skip(c.Token.IDENTIFIER)){var n=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=l.Node.createExportImportStatement(n,r,c.Range.join(t,e.range()));return e.skip(c.Token.SEMICOLON),i}this.error(p.DiagnosticCode.Identifier_expected,e.range())}else this.error(p.DiagnosticCode._0_expected,e.range(),"=")}else this.error(p.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseStatement=function(e,t){switch(void 0===t&&(t=!1),e.mark(),e.next()){case c.Token.BREAK:return this.parseBreak(e);case c.Token.CONST:return this.parseVariable(e,[l.Node.createModifier(l.ModifierKind.CONST,e.range())],null);case c.Token.CONTINUE:return this.parseContinue(e);case c.Token.DO:return this.parseDoStatement(e);case c.Token.FOR:return this.parseForStatement(e);case c.Token.IF:return this.parseIfStatement(e);case c.Token.LET:return this.parseVariable(e,[l.Node.createModifier(l.ModifierKind.LET,e.range())],null);case c.Token.VAR:return this.parseVariable(e,null,null);case c.Token.OPENBRACE:return this.parseBlockStatement(e,t);case c.Token.RETURN:return t&&this.error(p.DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,e.range()),this.parseReturn(e);case c.Token.SEMICOLON:return l.Node.createEmptyStatement(e.range(e.tokenPos));case c.Token.SWITCH:return this.parseSwitchStatement(e);case c.Token.THROW:return this.parseThrowStatement(e);case c.Token.TRY:return this.parseTryStatement(e);case c.Token.TYPE:return this.parseTypeDeclaration(e,null);case c.Token.WHILE:return this.parseWhileStatement(e);default:return e.reset(),this.parseExpressionStatement(e)}},t.prototype.parseBlockStatement=function(e,t){for(var r=e.tokenPos,n=new Array;!e.skip(c.Token.CLOSEBRACE);){var i=this.parseStatement(e,t);if(!i)return null;n.push(i)}var a=l.Node.createBlockStatement(n,e.range(r,e.pos));return e.skip(c.Token.SEMICOLON),a},t.prototype.parseBreak=function(e){var t=null;e.peek(!0)!=c.Token.IDENTIFIER||e.nextTokenOnNewLine||(e.next(!0),t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()));var r=l.Node.createBreakStatement(t,e.range());return e.skip(c.Token.SEMICOLON),r},t.prototype.parseContinue=function(e){var t=null;e.peek(!0)!=c.Token.IDENTIFIER||e.nextTokenOnNewLine||(e.next(!0),t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()));var r=l.Node.createContinueStatement(t,e.range());return e.skip(c.Token.SEMICOLON),r},t.prototype.parseDoStatement=function(e){var t=e.tokenPos,r=this.parseStatement(e);if(!r)return null;if(e.skip(c.Token.WHILE))if(e.skip(c.Token.OPENPAREN)){var n=this.parseExpression(e);if(!n)return null;if(e.skip(c.Token.CLOSEPAREN)){var i=l.Node.createDoStatement(r,n,e.range(t,e.pos));return e.skip(c.Token.SEMICOLON),i}this.error(p.DiagnosticCode._0_expected,e.range(),")")}else this.error(p.DiagnosticCode._0_expected,e.range(),"(");else this.error(p.DiagnosticCode._0_expected,e.range(),"while");return null},t.prototype.parseExpressionStatement=function(e){var t=this.parseExpression(e);if(!t)return null;var r=l.Node.createExpressionStatement(t);return e.skip(c.Token.SEMICOLON),r},t.prototype.parseForStatement=function(e){var t=e.tokenPos;if(e.skip(c.Token.OPENPAREN)){var r=null;if(e.skip(c.Token.LET)||e.skip(c.Token.CONST)||e.skip(c.Token.VAR))r=this.parseVariable(e,null,null);else if(!e.skip(c.Token.SEMICOLON)&&!(r=this.parseExpressionStatement(e)))return null;if(e.token==c.Token.SEMICOLON){var n=null;if(!e.skip(c.Token.SEMICOLON)&&!(n=this.parseExpressionStatement(e)))return null;if(e.token==c.Token.SEMICOLON){var i=null;if(!e.skip(c.Token.CLOSEPAREN)){if(!(i=this.parseExpression(e)))return null;if(!e.skip(c.Token.CLOSEPAREN))return this.error(p.DiagnosticCode._0_expected,e.range(),")"),null}var a=this.parseStatement(e);return a?l.Node.createForStatement(r,n?n.expression:null,i,a,e.range(t,e.pos)):null}this.error(p.DiagnosticCode._0_expected,e.range(),";")}else this.error(p.DiagnosticCode._0_expected,e.range(),";")}else this.error(p.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseIfStatement=function(e){var t=e.tokenPos;if(e.skip(c.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(c.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=null;return e.skip(c.Token.ELSE)&&!(i=this.parseStatement(e))?null:l.Node.createIfStatement(r,n,i,e.range(t,e.pos))}this.error(p.DiagnosticCode._0_expected,e.range(),")")}else this.error(p.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseSwitchStatement=function(e){var t=e.tokenPos;if(e.skip(c.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(c.Token.CLOSEPAREN)){if(e.skip(c.Token.OPENBRACE)){for(var n=new Array;!e.skip(c.Token.CLOSEBRACE);){var i=this.parseSwitchCase(e);if(!i)return null;n.push(i)}var a=l.Node.createSwitchStatement(r,n,e.range(t,e.pos));return e.skip(c.Token.SEMICOLON),a}this.error(p.DiagnosticCode._0_expected,e.range(),"{")}else this.error(p.DiagnosticCode._0_expected,e.range(),")")}else this.error(p.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseSwitchCase=function(e){var t,r,n=e.tokenPos;if(e.skip(c.Token.CASE)){var i=this.parseExpression(e);if(!i)return null;if(e.skip(c.Token.COLON)){for(t=new Array;e.peek()!=c.Token.CASE&&e.nextToken!=c.Token.DEFAULT&&e.nextToken!=c.Token.CLOSEBRACE;){if(!(r=this.parseStatement(e)))return null;t.push(r)}return l.Node.createSwitchCase(i,t,e.range(n,e.pos))}this.error(p.DiagnosticCode._0_expected,e.range(),":")}else if(e.skip(c.Token.DEFAULT)){if(e.skip(c.Token.COLON)){for(t=new Array;e.peek()!=c.Token.CASE&&e.nextToken!=c.Token.DEFAULT&&e.nextToken!=c.Token.CLOSEBRACE;){if(!(r=this.parseStatement(e)))return null;t.push(r)}return l.Node.createSwitchCase(null,t,e.range(n,e.pos))}this.error(p.DiagnosticCode._0_expected,e.range(),":")}else this.error(p.DiagnosticCode._case_or_default_expected,e.range());return null},t.prototype.parseThrowStatement=function(e){var t=e.tokenPos,r=this.parseExpression(e);if(!r)return null;var n=l.Node.createThrowStatement(r,e.range(t,e.pos));return e.skip(c.Token.SEMICOLON),n},t.prototype.parseTryStatement=function(e){var t,r=e.tokenPos;if(e.skip(c.Token.OPENBRACE)){for(var n=new Array;!e.skip(c.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;n.push(t)}var i=null,a=null,o=null;if(e.skip(c.Token.CATCH)){if(!e.skip(c.Token.OPENPAREN))return this.error(p.DiagnosticCode._0_expected,e.range(),"("),null;if(!e.skip(c.Token.IDENTIFIER))return this.error(p.DiagnosticCode.Identifier_expected,e.range()),null;if(i=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),!e.skip(c.Token.CLOSEPAREN))return this.error(p.DiagnosticCode._0_expected,e.range(),")"),null;if(!e.skip(c.Token.OPENBRACE))return this.error(p.DiagnosticCode._0_expected,e.range(),"{"),null;for(a=[];!e.skip(c.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;a.push(t)}}if(e.skip(c.Token.FINALLY)){if(!e.skip(c.Token.OPENBRACE))return this.error(p.DiagnosticCode._0_expected,e.range(),"{"),null;for(o=[];!e.skip(c.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;o.push(t)}}if(!a&&!o)return this.error(p.DiagnosticCode._0_expected,e.range(),"catch"),null;var s=l.Node.createTryStatement(n,i,a,o,e.range(r,e.pos));return e.skip(c.Token.SEMICOLON),s}return this.error(p.DiagnosticCode._0_expected,e.range(),"{"),null},t.prototype.parseTypeDeclaration=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=null);var n=r&&r.length?r[0].range.start:t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(c.Token.IDENTIFIER)){var i=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(c.Token.EQUALS)){var a=this.parseType(e);if(!a)return null;var o=l.Node.createTypeDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(c.Token.SEMICOLON),o}this.error(p.DiagnosticCode._0_expected,e.range(),"=")}else this.error(p.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseWhileStatement=function(e){var t=e.tokenPos;if(e.skip(c.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(c.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=l.Node.createWhileStatement(r,n,e.range(t,e.pos));return e.skip(c.Token.SEMICOLON),i}this.error(p.DiagnosticCode._0_expected,e.range(),")")}else this.error(p.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseExpressionStart=function(e){var t=e.next(!0),r=e.tokenPos,i=null;if(t==c.Token.NULL)return l.Node.createNullExpression(e.range());if(t==c.Token.TRUE)return l.Node.createTrueExpression(e.range());if(t==c.Token.FALSE)return l.Node.createFalseExpression(e.range());var a=n(t);if(-1!=a){var o;return t==c.Token.NEW?(o=this.parseExpression(e,18))?o.kind==l.NodeKind.CALL?l.Node.createNewExpression(o.expression,o.typeArguments,o.arguments,e.range(r,e.pos)):(this.error(p.DiagnosticCode.Operation_not_supported,e.range()),null):null:(o=this.parseExpression(e,a))?(t!=c.Token.PLUS_PLUS&&t!=c.Token.MINUS_MINUS||o.kind!=l.NodeKind.IDENTIFIER&&o.kind!=l.NodeKind.ELEMENTACCESS&&o.kind!=l.NodeKind.PROPERTYACCESS&&this.error(p.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,o.range),l.Node.createUnaryPrefixExpression(t,o,e.range(r,e.pos))):null}switch(t){case c.Token.OPENPAREN:if(e.skip(c.Token.CLOSEPAREN))return this.parseFunctionExpressionCommon(e,l.Node.createIdentifierExpression("",e.range(r,r)),[],!0);e.mark();var s=!0;do{switch(e.next(!0)){case c.Token.DOT_DOT_DOT:return e.reset(),this.parseFunctionExpression(e);case c.Token.IDENTIFIER:switch(e.readIdentifier(),e.next()){case c.Token.CLOSEPAREN:if(!e.skip(c.Token.EQUALS_GREATERTHAN)){s=!1;break}case c.Token.QUESTION:case c.Token.COLON:return e.reset(),this.parseFunctionExpression(e);case c.Token.COMMA:break;default:s=!1}break;default:s=!1}}while(s);return e.reset(),i=this.parseExpression(e),i?e.skip(c.Token.CLOSEPAREN)?l.Node.createParenthesizedExpression(i,e.range(r,e.pos)):(this.error(p.DiagnosticCode._0_expected,e.range(),")"),null):null;case c.Token.OPENBRACKET:var u=new Array;if(!e.skip(c.Token.CLOSEBRACKET)){do{if(e.peek()==c.Token.COMMA)i=null;else if(!(i=this.parseExpression(e,1)))return null;if(u.push(i),e.peek()==c.Token.CLOSEBRACKET)break}while(e.skip(c.Token.COMMA));if(!e.skip(c.Token.CLOSEBRACKET))return this.error(p.DiagnosticCode._0_expected,e.range(),"]"),null}return l.Node.createArrayLiteralExpression(u,e.range(r,e.pos));case c.Token.LESSTHAN:var h=this.parseType(e);return h?e.skip(c.Token.GREATERTHAN)?(i=this.parseExpression(e,18),i?l.Node.createAssertionExpression(0,i,h,e.range(r,e.pos)):null):(this.error(p.DiagnosticCode._0_expected,e.range(),">"),null):null;case c.Token.IDENTIFIER:return l.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case c.Token.THIS:return l.Node.createThisExpression(e.range(r,e.pos));case c.Token.CONSTRUCTOR:return l.Node.createConstructorExpression(e.range(r,e.pos));case c.Token.SUPER:return l.Node.createSuperExpression(e.range(r,e.pos));case c.Token.STRINGLITERAL:return l.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case c.Token.INTEGERLITERAL:return l.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case c.Token.FLOATLITERAL:return l.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case c.Token.SLASH:var d=e.readRegexpPattern();return e.skip(c.Token.SLASH)?l.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(p.DiagnosticCode._0_expected,e.range(),"/"),null);case c.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(p.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){if(e.mark(),!e.skip(c.Token.LESSTHAN))return null;var t=new Array;do{var r=this.parseType(e,!0,!0);if(!r)return e.reset(),null;t.push(r)}while(e.skip(c.Token.COMMA));return e.skip(c.Token.GREATERTHAN)&&e.skip(c.Token.OPENPAREN)?t:(e.reset(),null)},t.prototype.parseArguments=function(e){var t=new Array;if(!e.skip(c.Token.CLOSEPAREN)){do{var r=this.parseExpression(e,1);if(!r)return null;t.push(r)}while(e.skip(c.Token.COMMA));if(!e.skip(c.Token.CLOSEPAREN))return this.error(p.DiagnosticCode._0_expected,e.range(),")"),null}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;var n=r.range.start,o=this.tryParseTypeArgumentsBeforeArguments(e);if(o||e.skip(c.Token.OPENPAREN)){var s=this.parseArguments(e);if(!s)return null;r=l.Node.createCallExpression(r,o,s,e.range(n,e.pos))}for(var u,h,d=null;(h=i(u=e.peek()))>=t;)switch(e.next(),u){case c.Token.AS:var _=this.parseType(e);if(!_)return null;r=l.Node.createAssertionExpression(1,r,_,e.range(n,e.pos));break;case c.Token.OPENBRACKET:if(!(d=this.parseExpression(e)))return null;if(!e.skip(c.Token.CLOSEBRACKET))return this.error(p.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,d,e.range(n,e.pos));break;case c.Token.PLUS_PLUS:case c.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.NodeKind.PROPERTYACCESS&&this.error(p.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=l.Node.createUnaryPostfixExpression(u,r,e.range(n,e.pos));break;case c.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(c.Token.COLON))return this.error(p.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e);if(!m)return null;r=l.Node.createTernaryExpression(r,y,m,e.range(n,e.pos));break;case c.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,1)))return null;E.push(r)}while(e.skip(c.Token.COMMA));r=l.Node.createCommaExpression(E,e.range(n,e.pos));break;default:if(!(d=this.parseExpression(e,a(u)?h:h+1)))return null;if(u==c.Token.DOT)if(d.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,d,e.range(n,e.pos));else{if(d.kind!=l.NodeKind.CALL)return this.error(p.DiagnosticCode.Identifier_expected,d.range),null;var f=d;if(f.expression.kind!=l.NodeKind.IDENTIFIER)return this.error(p.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=l.Node.createPropertyAccessExpression(r,f.expression,e.range(n,e.pos)),r=f}else r=l.Node.createBinaryExpression(u,r,d,e.range(n,e.pos))}return r},t}(p.DiagnosticEmitter);t.Parser=h;!function(e){e[e.COMMA=0]="COMMA",e[e.SPREAD=1]="SPREAD",e[e.YIELD=2]="YIELD",e[e.ASSIGNMENT=3]="ASSIGNMENT",e[e.CONDITIONAL=4]="CONDITIONAL",e[e.LOGICAL_OR=5]="LOGICAL_OR",e[e.LOGICAL_AND=6]="LOGICAL_AND",e[e.BITWISE_OR=7]="BITWISE_OR",e[e.BITWISE_XOR=8]="BITWISE_XOR",e[e.BITWISE_AND=9]="BITWISE_AND",e[e.EQUALITY=10]="EQUALITY",e[e.RELATIONAL=11]="RELATIONAL",e[e.SHIFT=12]="SHIFT",e[e.ADDITIVE=13]="ADDITIVE",e[e.MULTIPLICATIVE=14]="MULTIPLICATIVE",e[e.EXPONENTIATED=15]="EXPONENTIATED",e[e.UNARY_PREFIX=16]="UNARY_PREFIX",e[e.UNARY_POSTFIX=17]="UNARY_POSTFIX",e[e.CALL=18]="CALL",e[e.MEMBERACCESS=19]="MEMBERACCESS",e[e.GROUPING=20]="GROUPING",e[e.INVALID=-1]="INVALID"}(t.Precedence||(t.Precedence={}))}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}(window,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=21)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(9),o=r(10);function s(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return""}}t.DiagnosticCode=o.DiagnosticCode,t.diagnosticCodeToString=o.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=s;var c="",p="",u="",l="";function h(e){switch(e){case n.INFO:return c;case n.WARNING:return p;case n.ERROR:return u;default:return""}}t.diagnosticCategoryToColor=h;var d=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,o){void 0===n&&(n=null),void 0===a&&(a=null),void 0===o&&(o=null);var s=i.diagnosticCodeToString(t);return null!=n&&(s=s.replace("{0}",n)),null!=a&&(s=s.replace("{1}",a)),null!=o&&(s=s.replace("{2}",o)),new e(t,r,s)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?s(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+" @ "+this.range.start.toString(10)+","+this.range.end.toString(10):s(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function _(e,t){void 0===t&&(t=!1);for(var r=e.source.text,n=r.length,i=e.start,o=e.end;i>0&&!a.isLineBreak(r.charCodeAt(i-1));)i--;for(;o=0;--a)free_memory(i[a])}},e.prototype.createCall=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=l(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=l(e),a=u(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r.length,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=l(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=l(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=l(e),a=l(t),o=l(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=l(e),i=l(t),a=l(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=l(e),i=l(t),a=l(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=l(e),a=l(t),o=l(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=l(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var o=l(i),s=r.length,c=new Array(s),h=new Array(s),d=new Array(s),_=0;_=0;--_)free_memory(c[_]);free_memory(o)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.out,r=l(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=h(t);var a=h(t+4);i=h(t+8);var o=new y;return o.output=d(n,a),o.sourceMap=_(i),o}finally{r&&free_memory(r),n&&free_memory(n),i&&free_memory(i)}},e.prototype.toText=function(){throw new Error("not implemented")},e.prototype.toAsmjs=function(){throw new Error("not implemented")},e.prototype.dispose=function(){this.ref&&(_BinaryenModuleDispose(this.ref),free_memory(this.out))},e.prototype.createRelooper=function(){return c.create(this)},e.prototype.cloneExpression=function(e,t,r){if(void 0===t&&(t=!1),void 0===r&&(r=i32.MAX_VALUE),r<0)return 0;var a,o;switch(r-=1,_BinaryenExpressionGetId(e)){case i.Const:switch(_BinaryenExpressionGetType(e)){case n.I32:return this.createI32(_BinaryenConstGetValueI32(e));case n.I64:return this.createI64(_BinaryenConstGetValueI64Low(e),_BinaryenConstGetValueI64High(e));case n.F32:return this.createF32(_BinaryenConstGetValueF32(e));case n.F64:return this.createF64(_BinaryenConstGetValueF64(e));default:throw new Error("concrete type expected")}case i.GetLocal:return _BinaryenGetLocal(this.ref,_BinaryenGetLocalGetIndex(e),_BinaryenExpressionGetType(e));case i.GetGlobal:var s=_BinaryenGetGlobalGetName(e);if(!s)break;return _BinaryenGetGlobal(this.ref,s,_BinaryenExpressionGetType(e));case i.Load:if(!(a=this.cloneExpression(_BinaryenLoadGetPtr(e),t,r)))break;return _BinaryenLoadIsAtomic(e)?_BinaryenAtomicLoad(this.ref,_BinaryenLoadGetBytes(e),_BinaryenLoadGetOffset(e),_BinaryenExpressionGetType(e),a):_BinaryenLoad(this.ref,_BinaryenLoadGetBytes(e),_BinaryenLoadIsSigned(e)?1:0,_BinaryenLoadGetOffset(e),_BinaryenLoadGetAlign(e),_BinaryenExpressionGetType(e),a);case i.Unary:if(!(a=this.cloneExpression(_BinaryenUnaryGetValue(e),t,r)))break;return _BinaryenUnary(this.ref,_BinaryenUnaryGetOp(e),a);case i.Binary:if(!(a=this.cloneExpression(_BinaryenBinaryGetLeft(e),t,r)))break;if(!(o=this.cloneExpression(_BinaryenBinaryGetRight(e),t,r)))break;return _BinaryenBinary(this.ref,_BinaryenBinaryGetOp(e),a,o)}return 0},e.prototype.addDebugInfoFile=function(e){var t=l(e);try{return _BinaryenModuleAddDebugInfoFileName(this.ref,t)}finally{free_memory(t)}},e.prototype.getDebugInfoFile=function(e){return _(_BinaryenModuleGetDebugInfoFileName(this.ref,e))},e.prototype.setDebugLocation=function(e,t,r,n,i){_BinaryenFunctionSetDebugLocation(e,t,r,n,i)},e.MAX_MEMORY_WASM32=65535,e}();t.Module=s;var c=function(){function e(){}return e.create=function(t){var r=new e;return r.module=t,r.ref=_RelooperCreate(),r},e.createStub=function(t){var r=new e;return r.module=t,r.ref=0,r},e.prototype.addBlock=function(e){return _RelooperAddBlock(this.ref,e)},e.prototype.addBranch=function(e,t,r,n){void 0===r&&(r=0),void 0===n&&(n=0),_RelooperAddBranch(e,t,r,n)},e.prototype.addBlockWithSwitch=function(e,t){return _RelooperAddBlockWithSwitch(this.ref,e,t)},e.prototype.addBranchForSwitch=function(e,t,r,n){void 0===n&&(n=0);var i=u(r);try{_RelooperAddBranchForSwitch(e,t,i,r.length,n)}finally{free_memory(i)}},e.prototype.renderAndDispose=function(e,t){return _RelooperRenderAndDispose(this.ref,e,t,this.module.ref)},e}();function p(e){if(!e)return 0;for(var t=allocate_memory(e.length),r=t,n=0,i=e.length;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function l(e){if(null==e)return 0;for(var t=allocate_memory(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function h(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function d(e,t){for(var r=new Uint8Array(t),n=0;n=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o};Object.defineProperty(t,"__esModule",{value:!0});var s=r(0),c=r(5),p=r(4),u=r(1);t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.LIBRARY_SUBST="(lib)",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER;var l=function(){return function(){}}(),h=function(){return function(){}}(),d=new Map,_=function(e){function r(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elements=new Map,r.types=d,r.typeAliases=new Map,r.exports=new Map,r.sources=[],r}return i(r,e),r.prototype.initialize=function(e){this.options=e,this.types=new Map([["i8",c.Type.i8],["i16",c.Type.i16],["i32",c.Type.i32],["i64",c.Type.i64],["isize",e.isizeType],["u8",c.Type.u8],["u16",c.Type.u16],["u32",c.Type.u32],["u64",c.Type.u64],["usize",e.usizeType],["bool",c.Type.bool],["f32",c.Type.f32],["f64",c.Type.f64],["void",c.Type.void],["number",c.Type.f64],["boolean",c.Type.bool]]);for(var t,r,n,i=new Map,u=new Array,l=new Array,h=0,d=this.sources.length;h",a+="<"+y+">")}else if(r){var E=r.get(a);if(E)return E}if((u=this.types.get(o))||(u=this.types.get(a)))return u;var f=this.typeAliases.get(a);return f&&(u=this.resolveType(f,null,n))?u:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,e.name.range,a),null)},r.prototype.resolveTypeArguments=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=e.length,a=t?t.length:0;if(i!=a)return a?this.error(s.DiagnosticCode.Expected_0_type_arguments_but_got_1,p.Range.join(t[0].range,t[a-1].range),i.toString(10),a.toString(10)):n&&this.error(s.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var o=new Array(i),c=0;c");var C,b,x,k=null;if(this.classPrototype&&!(k=this.classPrototype.resolve(this.classTypeArguments,t)))return null;if(this.is(E.SETTER)||this.is(E.CONSTRUCTOR))C=c.Type.void;else{T=assert(p.returnType);var L=this.program.resolveType(T,t,!0);if(!L)return null;C=L}return(n=new O(this,N,e,g,C,k)).contextualTypeArguments=t,this.instances.set(r,n),n},t.prototype.resolveInclTypeArguments=function(e,t,r){var n=null;return!this.is(E.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},t.prototype.resolvePartial=function(e){if(!this.classPrototype)throw new Error("partially resolved instance method must reference its class prototype");if(e&&e.length){var r=new t(this.program,this.simpleName,this.internalName,this.declaration,this.classPrototype);return r.flags=this.flags,r.classTypeArguments=e,r}return this},t.prototype.toString=function(){return this.simpleName},t}(T);t.FunctionPrototype=b;var O=function(e){function t(t,r,n,i,s,c){void 0===c&&(c=null);var p,u,l=e.call(this,t.program,t.simpleName,r)||this;if(l.kind=m.FUNCTION,l.locals=new Map,l.additionalLocals=[],l.breakContext=null,l.debugLocations=null,l.ref=0,l.functionTableIndex=-1,l.nextBreakId=0,l.breakStack=null,l.tempI32s=null,l.tempI64s=null,l.tempF32s=null,l.tempF64s=null,l.prototype=t,l.typeArguments=n,l.parameters=i||[],l.returnType=s,l.instanceMethodOf=c,l.flags=t.flags,!t.is(E.BUILTIN)&&!t.is(E.DECLARED)){var h=0;if(c){if(assert(l.is(E.INSTANCE)),l.locals.set("this",new C(t.program,"this",h++,c.type)),c.contextualTypeArguments){l.contextualTypeArguments||(l.contextualTypeArguments=new Map);try{for(var d=a(c.contextualTypeArguments),_=d.next();!_.done;_=d.next()){var y=o(_.value,2),f=y[0],T=y[1];l.contextualTypeArguments.set(f,T)}}catch(e){p={error:e}}finally{try{_&&!_.done&&(u=d.return)&&u.call(d)}finally{if(p)throw p.error}}}}else assert(!l.is(E.INSTANCE));for(var g=0,A=l.parameters.length;g0)return t[t.length-1];var r=this.addLocal(e);return t.push(r),r},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap){var r=this.debugLocations;if(r)for(var n=0,i=r.length;n"),(n=new B(this,A,e,T)).contextualTypeArguments=t,this.instances.set(r,n);var I,v,N,S,C,b,O=0;if(T&&(O=T.currentMemoryOffset,T.members)){n.members||(n.members=new Map);try{for(var x=a(T.members.values()),R=x.next();!R.done;R=x.next()){var U=R.value;n.members.set(U.simpleName,U)}}catch(e){N={error:e}}finally{try{R&&!R.done&&(S=x.return)&&S.call(x)}finally{if(N)throw N.error}}}if(this.constructorPrototype){var F=this.constructorPrototype.resolvePartial(e);F&&(n.constructorInstance=F.resolve())}if(this.instanceMembers)try{for(var D=a(this.instanceMembers.values()),w=D.next();!w.done;w=D.next()){var P=w.value;switch(P.kind){case m.FIELD_PROTOTYPE:n.members||(n.members=new Map);var M=P.declaration;if(!M.type)throw new Error("type expected");var G=this.program.resolveType(M.type,n.contextualTypeArguments);if(G){var K=new k(P,P.internalName,G);switch(G.byteSize){case 1:break;case 2:1&O&&++O;break;case 4:3&O&&(O=1+(3|O));break;case 8:7&O&&(O=1+(7|O));break;default:assert(!1)}K.memoryOffset=O,O+=G.byteSize,n.members.set(P.simpleName,K)}break;case m.FUNCTION_PROTOTYPE:n.members||(n.members=new Map);var z=P.resolvePartial(e);z&&n.members.set(P.simpleName,z);break;case m.PROPERTY:n.members||(n.members=new Map),assert(P.getterPrototype);var H=new L(this.program,P.simpleName,P.internalName,this);H.getterPrototype=P.getterPrototype.resolvePartial(e),P.setterPrototype&&(H.setterPrototype=P.setterPrototype.resolvePartial(e)),n.members.set(P.simpleName,H);break;default:throw new Error("instance member expected")}}}catch(e){C={error:e}}finally{try{w&&!w.done&&(b=D.return)&&b.call(D)}finally{if(C)throw C.error}}return n.currentMemoryOffset=O,n},t.prototype.resolveInclTypeArguments=function(e,t,r){var n=null;if(this.is(E.GENERIC)){if(assert(null!=e&&0!=e.length),!(n=this.program.resolveTypeArguments(this.declaration.typeParameters,e,t,r)))return null}else assert(null==e||!e.length);return this.resolve(n,t)},t.prototype.toString=function(){return this.simpleName},t}(T);t.ClassPrototype=R;var B=function(e){function t(t,r,n,i){void 0===n&&(n=null),void 0===i&&(i=null);var s=e.call(this,t.program,t.simpleName,r)||this;if(s.kind=m.CLASS,s.contextualTypeArguments=null,s.currentMemoryOffset=0,s.constructorInstance=null,s.prototype=t,s.flags=t.flags,s.typeArguments=n,s.type=t.program.options.usizeType.asClass(s),s.base=i,i&&i.contextualTypeArguments){s.contextualTypeArguments||(s.contextualTypeArguments=new Map);try{for(var c=a(i.contextualTypeArguments),p=c.next();!p.done;p=c.next()){var u=o(p.value,2),l=u[0],h=u[1];s.contextualTypeArguments.set(l,h)}}catch(e){y={error:e}}finally{try{p&&!p.done&&(E=c.return)&&E.call(c)}finally{if(y)throw y.error}}}var d,_,y,E,f=s.prototype.declaration;if(f){var T=f.typeParameters;if(n){if((_=n.length)!=T.length)throw new Error("type argument count mismatch");if(_)for(s.contextualTypeArguments||(s.contextualTypeArguments=new Map),d=0;d<_;++d)s.contextualTypeArguments.set(T[d].name.text,n[d])}else if(T.length)throw new Error("type argument count mismatch")}return s}return i(t,e),t.prototype.isAssignableTo=function(e){var t=this;do{if(t==e)return!0}while(t=t.base);return!1},t.prototype.toString=function(){return this.prototype.simpleName},t}(T);t.Class=B;var U=function(e){function t(t,r,n,i){var a=e.call(this,t,r,n,i)||this;return a.kind=m.INTERFACE_PROTOTYPE,a}return i(t,e),t}(R);t.InterfacePrototype=U;var F=function(e){function t(t,r,n,i){void 0===n&&(n=[]),void 0===i&&(i=null);var a=e.call(this,t,r,n,i)||this;return a.kind=m.INTERFACE,a}return i(t,e),t}(B);t.Interface=F,function(e){e[e.NONE=0]="NONE",e[e.RETURNS=1]="RETURNS",e[e.POSSIBLY_THROWS=2]="POSSIBLY_THROWS",e[e.POSSIBLY_BREAKS=4]="POSSIBLY_BREAKS",e[e.POSSIBLY_CONTINUES=8]="POSSIBLY_CONTINUES"}(t.FlowFlags||(t.FlowFlags={}));var D=function(){function e(){this.scopedLocals=null}return e.create=function(t){var r=new e;return r.parent=null,r.flags=0,r.currentFunction=t,r.continueLabel=null,r.breakLabel=null,r},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.set=function(e){this.flags|=e},e.prototype.enterBranchOrScope=function(){var t=new e;return t.parent=this,t.flags=this.flags,t.currentFunction=this.currentFunction,t.continueLabel=this.continueLabel,t.breakLabel=this.breakLabel,t},e.prototype.leaveBranchOrScope=function(){var e,t,r=assert(this.parent);if(this.scopedLocals){try{for(var n=a(this.scopedLocals.values()),i=n.next();!i.done;i=n.next()){var o=i.value;this.currentFunction.freeTempLocal(o)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}this.scopedLocals=null}return this.is(2)&&r.set(2),this.is(4)&&r.breakLabel==this.breakLabel&&r.set(4),this.is(8)&&r.continueLabel==this.continueLabel&&r.set(8),r},e.prototype.addScopedLocal=function(e,t,r){var n=this.currentFunction.getTempLocal(t);if(this.scopedLocals){if(this.scopedLocals.has(e))return void this.currentFunction.program.error(s.DiagnosticCode.Duplicate_identifier_0,r.range)}else this.scopedLocals=new Map;this.scopedLocals.set(e,n)},e.prototype.getScopedLocal=function(e){var t,r=this;do{if(r.scopedLocals&&(t=r.scopedLocals.get(e)))return t}while(r=r.parent);return this.currentFunction.locals.get(e)},e.prototype.finalize=function(){return assert(null==this.parent,"must be the topmost parent flow"),this.continueLabel=null,this.breakLabel=null,this.is(1)},e}();t.Flow=D},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0});var a,o=r(0),s=r(9);!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(a=t.Token||(t.Token={})),function(e){e.fromKeyword=function(t){switch(t){case"abstract":return e.ABSTRACT;case"as":return e.AS;case"async":return e.ASYNC;case"await":return e.AWAIT;case"break":return e.BREAK;case"case":return e.CASE;case"catch":return e.CATCH;case"class":return e.CLASS;case"continue":return e.CONTINUE;case"const":return e.CONST;case"constructor":return e.CONSTRUCTOR;case"debugger":return e.DEBUGGER;case"declare":return e.DECLARE;case"default":return e.DEFAULT;case"delete":return e.DELETE;case"do":return e.DO;case"else":return e.ELSE;case"enum":return e.ENUM;case"export":return e.EXPORT;case"extends":return e.EXTENDS;case"false":return e.FALSE;case"finally":return e.FINALLY;case"for":return e.FOR;case"from":return e.FROM;case"function":return e.FUNCTION;case"get":return e.GET;case"if":return e.IF;case"implements":return e.IMPLEMENTS;case"import":return e.IMPORT;case"in":return e.IN;case"instanceof":return e.INSTANCEOF;case"interface":return e.INTERFACE;case"is":return e.IS;case"keyof":return e.KEYOF;case"let":return e.LET;case"module":return e.MODULE;case"namespace":return e.NAMESPACE;case"new":return e.NEW;case"null":return e.NULL;case"of":return e.OF;case"package":return e.PACKAGE;case"private":return e.PRIVATE;case"protected":return e.PROTECTED;case"public":return e.PUBLIC;case"readonly":return e.READONLY;case"return":return e.RETURN;case"set":return e.SET;case"static":return e.STATIC;case"super":return e.SUPER;case"switch":return e.SWITCH;case"this":return e.THIS;case"throw":return e.THROW;case"true":return e.TRUE;case"try":return e.TRY;case"type":return e.TYPE;case"typeof":return e.TYPEOF;case"var":return e.VAR;case"void":return e.VOID;case"while":return e.WHILE;case"with":return e.WITH;case"yield":return e.YIELD;default:return e.INVALID}},e.isAlsoIdentifier=function(t){switch(t){case e.ABSTRACT:case e.AS:case e.CONSTRUCTOR:case e.DECLARE:case e.DELETE:case e.FROM:case e.GET:case e.IS:case e.KEYOF:case e.MODULE:case e.NAMESPACE:case e.READONLY:case e.SET:case e.TYPE:return!0;default:return!1}},e.operatorToString=function(t){switch(t){case e.DELETE:return"delete";case e.IN:return"in";case e.INSTANCEOF:return"instanceof";case e.NEW:return"new";case e.TYPEOF:return"typeof";case e.VOID:return"void";case e.YIELD:return"yield";case e.DOT_DOT_DOT:return"...";case e.COMMA:return",";case e.LESSTHAN:return"<";case e.GREATERTHAN:return">";case e.LESSTHAN_EQUALS:return"<=";case e.GREATERTHAN_EQUALS:return">=";case e.EQUALS_EQUALS:return"==";case e.EXCLAMATION_EQUALS:return"!=";case e.EQUALS_EQUALS_EQUALS:return"===";case e.EXCLAMATION_EQUALS_EQUALS:return"!==";case e.PLUS:return"+";case e.MINUS:return"-";case e.ASTERISK_ASTERISK:return"**";case e.ASTERISK:return"*";case e.SLASH:return"/";case e.PERCENT:return"%";case e.PLUS_PLUS:return"++";case e.MINUS_MINUS:return"--";case e.LESSTHAN_LESSTHAN:return"<<";case e.GREATERTHAN_GREATERTHAN:return">>";case e.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case e.AMPERSAND:return"&";case e.BAR:return"|";case e.CARET:return"^";case e.EXCLAMATION:return"!";case e.TILDE:return"~";case e.AMPERSAND_AMPERSAND:return"&&";case e.BAR_BAR:return"||";case e.EQUALS:return"=";case e.PLUS_EQUALS:return"+=";case e.MINUS_EQUALS:return"-=";case e.ASTERISK_EQUALS:return"*=";case e.ASTERISK_ASTERISK_EQUALS:return"**=";case e.SLASH_EQUALS:return"/=";case e.PERCENT_EQUALS:return"%=";case e.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case e.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case e.AMPERSAND_EQUALS:return"&=";case e.BAR_EQUALS:return"|=";case e.CARET_EQUALS:return"^=";default:return assert(!1),""}}}(a=t.Token||(t.Token={}));var c=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=this.start,r=1;t-- >0;)10==e.charCodeAt(t)&&r++;return r},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=this.start,r=0;t-- >0&&10!=e.charCodeAt(t);)r++;return r},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=c;var p=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.markedPos=0,n.markedToken=-1,n.markedTokenPos=0,n.nextToken=-1,n.nextTokenOnNewLine=!1,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.posi;)if(s.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=o}return this.nextToken},t.prototype.skip=function(e){var t=this.pos,r=this.token,n=this.tokenPos,i=i32.MAX_VALUE;switch(e){case a.GREATERTHAN:i=1}return this.token=this.unsafeNext(e==a.IDENTIFIER,i),this.token==e?(this.nextToken=-1,!0):(this.pos=t,this.token=r,this.tokenPos=n,!1)},t.prototype.mark=function(){this.markedPos=this.pos,this.markedToken=this.token,this.markedTokenPos=this.tokenPos},t.prototype.reset=function(){this.pos=this.markedPos,this.token=this.markedToken,this.tokenPos=this.markedTokenPos,this.nextToken=-1},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new c(this.source,e,t)},t.prototype.readIdentifier=function(){for(var e=this.source.text,t=this.pos;++this.pos=this.end){n+=e.substring(r,this.pos),this.error(o.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(s.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(o.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(o.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(o.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(s.isLineBreak(n)){this.error(o.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&i<=57)r=i64_add(i64_mul(r,n),i64_new(i-48,0));else if(i>=65&&i<=70)r=i64_add(i64_mul(r,n),i64_new(10+i-65,0));else{if(!(i>=97&&i<=102))break;r=i64_add(i64_mul(r,n),i64_new(10+i-97,0))}++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0);this.pos=48&&i<=57))break;r=i64_add(i64_mul(r,n),i64_new(i-48,0)),++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Digit_expected,this.range(t)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0);this.pos=48&&i<=55))break;r=i64_add(i64_mul(r,n),i64_new(i-48,0)),++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Octal_digit_expected,this.range(t)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0);this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(o.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(o.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(o.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(o.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(o.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(o.DiagnosticEmitter);t.Tokenizer=p},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0});var a=r(2),o=r(3);t.Token=o.Token,t.Range=o.Range;var s,c=r(8);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.IDENTIFIER=3]="IDENTIFIER",e[e.ASSERTION=4]="ASSERTION",e[e.BINARY=5]="BINARY",e[e.CALL=6]="CALL",e[e.COMMA=7]="COMMA",e[e.ELEMENTACCESS=8]="ELEMENTACCESS",e[e.FALSE=9]="FALSE",e[e.FUNCTION=10]="FUNCTION",e[e.FUNCTIONARROW=11]="FUNCTIONARROW",e[e.LITERAL=12]="LITERAL",e[e.NEW=13]="NEW",e[e.NULL=14]="NULL",e[e.PARENTHESIZED=15]="PARENTHESIZED",e[e.PROPERTYACCESS=16]="PROPERTYACCESS",e[e.TERNARY=17]="TERNARY",e[e.SUPER=18]="SUPER",e[e.THIS=19]="THIS",e[e.TRUE=20]="TRUE",e[e.CONSTRUCTOR=21]="CONSTRUCTOR",e[e.UNARYPOSTFIX=22]="UNARYPOSTFIX",e[e.UNARYPREFIX=23]="UNARYPREFIX",e[e.BLOCK=24]="BLOCK",e[e.BREAK=25]="BREAK",e[e.CONTINUE=26]="CONTINUE",e[e.DO=27]="DO",e[e.EMPTY=28]="EMPTY",e[e.EXPORT=29]="EXPORT",e[e.EXPORTIMPORT=30]="EXPORTIMPORT",e[e.EXPRESSION=31]="EXPRESSION",e[e.FOR=32]="FOR",e[e.IF=33]="IF",e[e.IMPORT=34]="IMPORT",e[e.RETURN=35]="RETURN",e[e.SWITCH=36]="SWITCH",e[e.THROW=37]="THROW",e[e.TRY=38]="TRY",e[e.VARIABLE=39]="VARIABLE",e[e.WHILE=40]="WHILE",e[e.CLASSDECLARATION=41]="CLASSDECLARATION",e[e.ENUMDECLARATION=42]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=43]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=44]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=45]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=46]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=47]="INTERFACEDECLARATION",e[e.METHODDECLARATION=48]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=49]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=50]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=51]="VARIABLEDECLARATION",e[e.DECORATOR=52]="DECORATOR",e[e.EXPORTMEMBER=53]="EXPORTMEMBER",e[e.MODIFIER=54]="MODIFIER",e[e.PARAMETER=55]="PARAMETER",e[e.SWITCHCASE=56]="SWITCHCASE"}(s=t.NodeKind||(t.NodeKind={}));var p=function(){function e(){this.parent=null}return e.createType=function(e,t,r,n){var i=new u;return i.range=n,i.name=e,i.typeArguments=t,i.isNullable=r,i},e.createIdentifierExpression=function(e,t){var r=new d;return r.range=t,r.text=e,r},e.createArrayLiteralExpression=function(e,t){var r=new y;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(V);t.FunctionDeclaration=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(z);t.IfStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t.modifiers=null,t}return i(t,e),t}(V);t.ImportDeclaration=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(z);t.ImportStatement=ue;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(X);t.InterfaceDeclaration=le;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(se);t.MethodDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(V);t.NamespaceDeclaration=de,function(e){e[e.DEFAULT=0]="DEFAULT",e[e.OPTIONAL=1]="OPTIONAL",e[e.REST=2]="REST"}(t.ParameterKind||(t.ParameterKind={}));var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.PARAMETER,t}return i(t,e),t}(p);t.Parameter=_e;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.MODIFIER,t}return i(t,e),t}(p);t.Modifier=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(z);t.ReturnStatement=me;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return i(t,e),t}(p);t.SwitchCase=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return i(t,e),t}(z);t.SwitchStatement=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return i(t,e),t}(z);t.ThrowStatement=Te;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return i(t,e),t}(z);t.TryStatement=ge;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(V);t.TypeDeclaration=Ae;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(W);t.VariableDeclaration=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(z);t.VariableStatement=ve;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(z);t.WhileStatement=Ne;var Se=null;function Ce(){var e;return null!=Se?(e=Se,Se=null):e=[],e.length=0,e}function be(e,t){if(t)for(var r=0,n=t.length;r>>e.size-this.size},e.prototype.is=function(e){return(this.flags&e)==e},Object.defineProperty(e.prototype,"isClass",{get:function(){return null!=this.classType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isFunction",{get:function(){return null!=this.functionType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isReference",{get:function(){return null!=this.classType||null!=this.functionType},enumerable:!0,configurable:!0}),e.prototype.asClass=function(t){assert(9==this.kind&&!this.classType);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classType=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.functionType);var r=new e(this.kind,-129&this.flags|256,this.size);return r.functionType=t,r},e.prototype.asNullable=function(){return assert(this.isReference),this.nullableType||(assert(!this.is(512)),this.nullableType=new e(this.kind,512|this.flags,this.size),this.nullableType.classType=this.classType,this.nullableType.functionType=this.functionType),this.nullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.isReference){if(e.isReference)if(r=this.classType){if(n=e.classType)return r.isAssignableTo(n)}else if((i=this.functionType)&&(a=e.functionType))return i.isAssignableTo(a)}else if(!e.isReference)if(this.is(4))if(e.is(4)){if(!t||this.is(1)==e.is(1))return this.size<=e.size}else{if(11==e.kind)return this.size<=23;if(12==e.kind)return this.size<=52}else if(this.is(8)&&e.is(8))return this.size<=e.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){switch(void 0===e&&(e=!1),this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return e?"usize":this.classType?this.classType.toString():this.functionType?this.functionType.toTypeString():"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";case 13:return"void";default:return assert(!1),""}},e.prototype.toNativeType=function(){switch(this.kind){default:return n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;n=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var o,s=r(16),c=r(0),p=r(1),u=r(2),l=r(3),h=r(4),d=r(5);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(o=t.Target||(t.Target={}));var _=function(){function e(){this.target=o.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.noMemory=!1,this.importMemory=!1,this.memoryBase=0,this.allocateImpl="allocate_memory",this.freeImpl="free_memory",this.sourceMap=!1}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==o.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==o.WASM64?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==o.WASM64?d.Type.isize64:d.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==o.WASM64?p.NativeType.I64:p.NativeType.I32},enumerable:!0,configurable:!0}),e}();t.Options=_,function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={}));var y=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.startFunctionBody=new Array,n.currentEnum=null,n.currentType=d.Type.void,n.memorySegments=new Array,n.stringSegments=new Map,n.functionTable=new Array,n.files=new Set,n.program=t,n.options=r||new _,n.memoryOffset=i64_new(max(n.options.memoryBase,n.options.usizeType.byteSize)),n.module=p.Module.create(),n}return i(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){this.program.initialize(this.options);var e=assert(this.program.elements.get("start"));assert(e.kind==u.ElementKind.FUNCTION_PROTOTYPE);var t=new u.Function(e,e.internalName,null,null,d.Type.void);t.set(u.ElementFlags.START),this.currentFunction=this.startFunction=t;for(var r=this.program.sources,n=0,i=r.length;n"),!1;e.type=this.currentType}var i=e.type.toNativeType();if(e.is(u.ElementFlags.DECLARED))return e.is(u.ElementFlags.CONSTANT)?(this.module.addGlobalImport(e.internalName,e.namespace?e.namespace.simpleName:"env",e.simpleName,i),e.set(u.ElementFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,t.range),!1);var a=!1;e.is(u.ElementFlags.INLINED)?r=this.compileInlineConstant(e,e.type,!0):t.initializer?(r||(r=this.compileExpression(t.initializer,e.type)),_BinaryenExpressionGetId(r)!=p.ExpressionId.Const&&(e.is(u.ElementFlags.CONSTANT)?(r=this.precomputeExpressionRef(r),_BinaryenExpressionGetId(r)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,t.range),a=!0)):a=!0)):r=e.type.toNativeZero(this.module);var o=e.internalName;if(a){this.module.addGlobal(o,i,!0,e.type.toNativeZero(this.module));var s=this.module.createSetGlobal(o,r);this.startFunctionBody.push(s)}else if(e.is(u.ElementFlags.CONSTANT)){switch(_BinaryenExpressionGetType(r)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI32(r),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI64Low(r),_BinaryenConstGetValueI64High(r));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF32(r);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF64(r);break;default:throw new Error("concrete type expected")}e.set(u.ElementFlags.INLINED),t.isTopLevel&&this.module.addGlobal(o,i,!e.is(u.ElementFlags.CONSTANT),r),t.range.source.isEntry&&t.isTopLevelExport&&this.module.addGlobalExport(e.internalName,t.programLevelInternalName)}else this.module.addGlobal(o,i,!e.is(u.ElementFlags.CONSTANT),r);return e.set(u.ElementFlags.COMPILED),!0},t.prototype.compileEnumDeclaration=function(e){var t=this.program.elements.get(e.fileLevelInternalName);if(!t||t.kind!=u.ElementKind.ENUM)throw new Error("enum expected");return this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(u.ElementFlags.COMPILED))return!0;e.set(u.ElementFlags.COMPILED),this.currentEnum=e;var t,r,n=null;if(e.members)try{for(var i=a(e.members.values()),o=i.next();!o.done;o=i.next()){var s=o.value;if(s.kind==u.ElementKind.ENUMVALUE){var l,h=!1,_=s,y=_.declaration;if(_.set(u.ElementFlags.COMPILED),_.is(u.ElementFlags.INLINED))e.declaration.isTopLevelExport&&this.module.addGlobal(_.internalName,p.NativeType.I32,!1,this.module.createI32(_.constantValue));else if(y.value?(l=this.compileExpression(y.value,d.Type.i32),_BinaryenExpressionGetId(l)!=p.ExpressionId.Const&&(l=this.precomputeExpressionRef(l),_BinaryenExpressionGetId(l)!=p.ExpressionId.Const&&(e.is(u.ElementFlags.CONSTANT)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0))):null==n?l=this.module.createI32(0):n.is(u.ElementFlags.INLINED)?l=this.module.createI32(n.constantValue+1):(l=this.module.createBinary(p.BinaryOp.AddI32,this.module.createGetGlobal(n.internalName,p.NativeType.I32),this.module.createI32(1)),e.is(u.ElementFlags.CONSTANT)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h){this.module.addGlobal(_.internalName,p.NativeType.I32,!0,this.module.createI32(0));var m=this.module.createSetGlobal(_.internalName,l);this.startFunctionBody.push(m)}else{if(this.module.addGlobal(_.internalName,p.NativeType.I32,!1,l),_BinaryenExpressionGetType(l)!=p.NativeType.I32)throw new Error("i32 expected");_.constantValue=_BinaryenConstGetValueI32(l),_.set(u.ElementFlags.INLINED)}n=_,e.declaration.range.source.isEntry&&e.declaration.isTopLevelExport&&(s.is(u.ElementFlags.INLINED)?this.module.addGlobalExport(s.internalName,s.internalName):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=this.program.elements.get(e.fileLevelInternalName);if(!n||n.kind!=u.ElementKind.FUNCTION_PROTOTYPE)throw new Error("function expected");return this.compileFunctionUsingTypeArguments(n,t,r,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n){var i=e.resolveInclTypeArguments(t,r,n);return i&&this.compileFunction(i)?i:null},t.prototype.compileFunction=function(e){if(e.is(u.ElementFlags.COMPILED))return!0;assert(!e.is(u.ElementFlags.BUILTIN)||"abort"==e.simpleName);var t=e.prototype.declaration;if(e.is(u.ElementFlags.DECLARED)){if(t.body)return this.error(c.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,t.name.range),!1}else if(!t.body)return this.error(c.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,t.name.range),!1;e.set(u.ElementFlags.COMPILED);var r=0;if(!e.is(u.ElementFlags.DECLARED)){var n=this.currentFunction;this.currentFunction=e;var i=assert(t.body,"implementation expected");r=this.compileStatement(i);var a=this.currentFunction.flow.finalize();e.returnType==d.Type.void||a||this.error(c.DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,assert(t.returnType,"return type expected").range),this.currentFunction=n}var o=e.parameters?e.parameters.length:0,s=e.instanceMethodOf?o+1:o,l=0,h=e.returnType.toNativeType(),_=new Array(s),y=new Array(s+1);if(e.instanceMethodOf&&(_[l]=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,y[l++]=e.instanceMethodOf.type.toSignatureString()),e.parameters)for(var m=0;m=0)return e.functionTableIndex;var t=this.functionTable.length;return this.functionTable.push(e),e.functionTableIndex=t,t},t.prototype.compileStatement=function(e){var t;switch(e.kind){case h.NodeKind.BLOCK:t=this.compileBlockStatement(e);break;case h.NodeKind.BREAK:t=this.compileBreakStatement(e);break;case h.NodeKind.CONTINUE:t=this.compileContinueStatement(e);break;case h.NodeKind.DO:t=this.compileDoStatement(e);break;case h.NodeKind.EMPTY:t=this.compileEmptyStatement(e);break;case h.NodeKind.EXPRESSION:t=this.compileExpressionStatement(e);break;case h.NodeKind.FOR:t=this.compileForStatement(e);break;case h.NodeKind.IF:t=this.compileIfStatement(e);break;case h.NodeKind.RETURN:t=this.compileReturnStatement(e);break;case h.NodeKind.SWITCH:t=this.compileSwitchStatement(e);break;case h.NodeKind.THROW:t=this.compileThrowStatement(e);break;case h.NodeKind.TRY:t=this.compileTryStatement(e);break;case h.NodeKind.VARIABLE:var r=this.compileVariableStatement(e);t=r||this.module.createNop();break;case h.NodeKind.WHILE:t=this.compileWhileStatement(e);break;case h.NodeKind.TYPEDECLARATION:if(this.currentFunction==this.startFunction)return this.module.createNop();default:throw new Error("statement expected")}return this.addDebugLocation(t,e.range),t},t.prototype.compileStatements=function(e){for(var t=e.length,r=new Array(t),n=0;n=0?"case"+o.toString(10):"break")+"|"+t);var u=this.module.createBlock("case0|"+t,i,p.NativeType.None),l=!0;for(s=0;s=0&&l&&this.currentFunction.flow.set(1),u},t.prototype.compileThrowStatement=function(e){return this.currentFunction.flow.set(2),this.currentFunction.flow.set(1),this.module.createUnreachable()},t.prototype.compileTryStatement=function(e){throw new Error("not implemented")},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=e.declarations;if(t||this.currentFunction==this.startFunction&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var n=0,i=r.length;n");continue}l=this.currentType}if(h.hasModifier(h.ModifierKind.CONST,o.modifiers))if(_){if(_=this.precomputeExpressionRef(_),_BinaryenExpressionGetId(_)==p.ExpressionId.Const){var y=new u.Local(this.program,s,-1,l);switch(_BinaryenExpressionGetType(_)){case p.NativeType.I32:y=y.withConstantIntegerValue(_BinaryenConstGetValueI32(_),0);break;case p.NativeType.I64:y=y.withConstantIntegerValue(_BinaryenConstGetValueI64Low(_),_BinaryenConstGetValueI64High(_));break;case p.NativeType.F32:y=y.withConstantFloatValue(_BinaryenConstGetValueF32(_));break;case p.NativeType.F64:y=y.withConstantFloatValue(_BinaryenConstGetValueF64(_));break;default:throw new Error("concrete type expected")}var m=this.currentFunction.flow.scopedLocals;if(m){if(m.has(s))return this.error(c.DiagnosticCode.Duplicate_identifier_0,o.name.range,s),0}else m=this.currentFunction.flow.scopedLocals=new Map;return m.set(s,y),0}this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,o.range)}else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,o.range);h.hasModifier(h.ModifierKind.LET,o.modifiers)?this.currentFunction.flow.addScopedLocal(s,l,o.name):this.currentFunction.addLocal(l,s),_&&a.push(this.compileAssignmentWithValue(o.name,_))}return a.length?1==a.length?a[0]:this.module.createBlock(null,a,p.NativeType.None):0},t.prototype.compileWhileStatement=function(e){var t=f(this.compileExpression(e.condition,d.Type.i32,0),this.currentType,this.module),r=this.currentFunction.enterBreakContext();this.currentFunction.flow=this.currentFunction.flow.enterBranchOrScope();var n=this.currentFunction.flow.breakLabel="break|"+r,i=this.currentFunction.flow.continueLabel="continue|"+r,a=this.compileStatement(e.statement);this.currentFunction.flow=this.currentFunction.flow.leaveBranchOrScope(),this.currentFunction.leaveBreakContext();var o=this.module.createBlock(n,[this.module.createLoop(i,this.module.createIf(t,this.module.createBlock(null,[a,this.module.createBreak(i)],p.NativeType.None)))],p.NativeType.None);return o},t.prototype.compileInlineConstant=function(e,t,r){switch(assert(e.is(u.ElementFlags.INLINED)),!r&&e.type.is(4)&&t.is(4)&&e.type.size>n:0);case 5:case 6:case 10:var i=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&i:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 11:return this.module.createF32(e.constantFloatValue);case 12:return this.module.createF64(e.constantFloatValue);default:throw new Error("concrete type expected")}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(void 0===r&&(r=1),void 0===n&&(n=!0),this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t,n);break;case h.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case h.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case h.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case h.NodeKind.FUNCTION:case h.NodeKind.FUNCTIONARROW:i=this.compileFunctionExpression(e,t);break;case h.NodeKind.IDENTIFIER:case h.NodeKind.FALSE:case h.NodeKind.NULL:case h.NodeKind.THIS:case h.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case h.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case h.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case h.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case h.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case h.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case h.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case h.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t,n);break;default:throw new Error("expression expected")}return 0!=r&&this.currentType!=t&&(i=this.convertExpression(i,this.currentType,t,r,e),this.currentType=t),this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return void 0===r&&(r=!0),this.compileExpression(e,t==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r){return void 0===r&&(r=1),this.precomputeExpressionRef(this.compileExpression(e,t,r))},t.prototype.precomputeExpressionRef=function(e){var t=this.currentType.toNativeType(),r=this.module.getFunctionTypeBySignature(t,[]);r||(r=this.module.addFunctionType(this.currentType.toSignatureString(),t,[]));var n=this.module.addFunction("__precompute",r,[],e);this.module.runPasses(["precompute"],n);var i=_BinaryenFunctionGetBody(n);return this.module.removeFunction("__precompute"),i},t.prototype.convertExpression=function(e,t,r,n,i){return 0==n?(assert(!1,"concrete type expected"),e):13==t.kind?(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,i.range,t.toString(),r.toString()),this.module.createUnreachable()):13==r.kind?this.module.createDrop(e):(1!=n||t.isAssignableTo(r)||this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,i.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=this.module.createUnary(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=this.module.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?11==t.kind?r.is(1)?r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF32ToI64,e):(e=this.module.createUnary(p.UnaryOp.TruncF32ToI32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF32ToU64,e):(e=this.module.createUnary(p.UnaryOp.TruncF32ToU32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(1)?r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF64ToI64,e):(e=this.module.createUnary(p.UnaryOp.TruncF64ToI32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF64ToU64,e):(e=this.module.createUnary(p.UnaryOp.TruncF64ToU32,e),r.is(32)&&(e=m(e,r,this.module))):(assert(0==r.flags,"void type expected"),e=this.module.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=this.module.createUnary(p.UnaryOp.WrapI64,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.createUnary(r.is(1)?p.UnaryOp.ExtendI32:p.UnaryOp.ExtendU32,e):r.is(32)&&(t.size>r.size||t.size==r.size&&t.is(1)!=r.is(1))&&(e=m(e,r,this.module)),this.currentType=r,e)},t.prototype.compileAssertionExpression=function(e,t){var r=this.program.resolveType(e.toType,this.currentFunction.contextualTypeArguments);return r?this.compileExpression(e.expression,r,2):this.module.createUnreachable()},t.prototype.compileBinaryExpression=function(e,t,r){var n,i,a,o,s,u,h;void 0===r&&(r=!0);var _=!1,y=!1,E=null;switch(e.operator){case l.Token.LESSTHAN:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.LtI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.LtI64,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LtI64:p.BinaryOp.LtI32,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.LtU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LtU64:p.BinaryOp.LtU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.LtU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.LtF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.LtF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.GREATERTHAN:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.GtI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.GtI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.GtU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.GtU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.GtF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.GtF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.LESSTHAN_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.LeI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.LeI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.LeU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.LeU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.LeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.LeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.GREATERTHAN_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.GeI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.GeI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.GeU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.GeU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.GeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.GeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EQUALS_EQUALS_EQUALS:case l.Token.EQUALS_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,l.Token.operatorToString(e.operator),i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.EqI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.EqI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.EqF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.EqF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EXCLAMATION_EQUALS_EQUALS:case l.Token.EXCLAMATION_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,l.Token.operatorToString(e.operator),i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.NeI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.NeI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.NeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.NeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EQUALS:return this.compileAssignment(e.left,e.right,t);case l.Token.PLUS_EQUALS:_=!0;case l.Token.PLUS:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.AddI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.AddI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.AddF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.AddF64,n,a);break;default:throw new Error("concrete type expected")}break;case l.Token.MINUS_EQUALS:_=!0;case l.Token.MINUS:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.SubI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.SubI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.SubF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.SubF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.ASTERISK_EQUALS:_=!0;case l.Token.ASTERISK:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.MulI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.MulI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.MulF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.MulF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.SLASH_EQUALS:_=!0;case l.Token.SLASH:if(n=this.compileExpressionRetainType(e.left,t,!0),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:y=!0;case 2:h=this.module.createBinary(p.BinaryOp.DivI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.DivI64,n,a);break;case 5:case 6:case 10:y=!0;case 7:h=this.module.createBinary(p.BinaryOp.DivU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.DivU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.DivF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.DivF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.PERCENT_EQUALS:_=!0;case l.Token.PERCENT:if(n=this.compileExpressionRetainType(e.left,t,!0),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.RemI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.RemI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.RemU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.RemU64,n,a);break;case 11:case 12:this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=this.module.createUnreachable();break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.LESSTHAN_LESSTHAN_EQUALS:_=!0;case l.Token.LESSTHAN_LESSTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!1),a=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.ShlI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.ShlI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.ShlI64:p.BinaryOp.ShlI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.GREATERTHAN_GREATERTHAN_EQUALS:_=!0;case l.Token.GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!0),a=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){default:h=this.module.createBinary(p.BinaryOp.ShrI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.ShrI64,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,n,a);break;case 5:case 6:case 10:case 7:h=this.module.createBinary(p.BinaryOp.ShrU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:_=!0;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!0),a=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){case 0:case 1:y=!0;default:h=this.module.createBinary(p.BinaryOp.ShrU32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.AMPERSAND_EQUALS:_=!0;case l.Token.AMPERSAND:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.AndI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.AndI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.BinaryOp.AndI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.BAR_EQUALS:_=!0;case l.Token.BAR:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.OrI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.OrI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.BinaryOp.OrI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.CARET_EQUALS:_=!0;case l.Token.CARET:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.XorI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.XorI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.AMPERSAND_AMPERSAND:n=this.compileExpressionRetainType(e.left,t),a=this.compileExpression(e.right,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(E=this.currentFunction.getAndFreeTempLocal(this.currentType),n=this.module.createTeeLocal(E.index,n)),y=this.currentType.is(36),u=f(n,this.currentType,this.module),h=h?this.module.createIf(u,a,h):this.module.createIf(u,a,this.module.createGetLocal(assert(E,"tempLocal must be set").index,this.currentType.toNativeType()));break;case l.Token.BAR_BAR:n=this.compileExpressionRetainType(e.left,t),a=this.compileExpression(e.right,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(E=this.currentFunction.getAndFreeTempLocal(this.currentType),n=this.module.createTeeLocal(E.index,n)),y=this.currentType.is(36),u=f(n,this.currentType,this.module),h=h?this.module.createIf(u,h,a):this.module.createIf(u,this.module.createGetLocal(assert(E,"tempLocal must be set").index,this.currentType.toNativeType()),a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("not implemented")}return y&&r&&(assert(this.currentType.is(36),"small integer type expected"),h=m(h,this.currentType,this.module)),_?this.compileAssignmentWithValue(e.left,h,t!=d.Type.void):h},t.prototype.compileAssignment=function(e,t,r){var n=this.program.resolveExpression(e,this.currentFunction);if(!n)return this.module.createUnreachable();var i,a=n.element;switch(a.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(a))return this.module.createUnreachable();assert(a.type!=d.Type.void,"concrete type expected");case u.ElementKind.LOCAL:case u.ElementKind.FIELD:i=a.type;break;case u.ElementKind.PROPERTY:var o=a.setterPrototype;if(o){var s=o.resolve();if(!s)return this.module.createUnreachable();assert(s.parameters&&1==s.parameters.length),i=s.parameters[0].type;break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),this.module.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){assert(n.target&&n.target.kind==u.ElementKind.CLASS&&a.simpleName==n.target.prototype.fnIndexedGet);var p=a.resolve(null);if(p){i=p.returnType;break}}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}return this.currentType=i,this.compileAssignmentWithValue(e,this.compileExpression(t,i),r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.program.resolveExpression(e,this.currentFunction);if(!n)return this.module.createUnreachable();var i,a,o=n.element;switch(o.kind){case u.ElementKind.LOCAL:return this.currentType=r?o.type:d.Type.void,o.is(u.ElementFlags.CONSTANT)?(this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName),this.module.createUnreachable()):r?this.module.createTeeLocal(o.index,t):this.module.createSetLocal(o.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();if(assert(o.type!=d.Type.void,"concrete type expected"),this.currentType=r?o.type:d.Type.void,o.is(u.ElementFlags.CONSTANT))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName),this.module.createUnreachable();if(!r)return this.module.createSetGlobal(o.internalName,t);var s=o.type.toNativeType();return this.module.createBlock(null,[this.module.createSetGlobal(o.internalName,t),this.module.createGetGlobal(o.internalName,s)],s);case u.ElementKind.FIELD:if(o.prototype.isReadonly)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName),this.module.createUnreachable();assert(null!=n.targetExpression,"target expression expected"),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType,"class type expected"),this.currentType=r?o.type:d.Type.void;var p=o.type.toNativeType();return r?(i=this.currentFunction.getAndFreeTempLocal(o.type),this.module.createBlock(null,[this.module.createSetLocal(i.index,t),this.module.createStore(o.type.size>>3,a,this.module.createGetLocal(i.index,p),p,o.memoryOffset),this.module.createGetLocal(i.index,p)],p)):this.module.createStore(o.type.size>>3,a,t,p,o.memoryOffset);case u.ElementKind.PROPERTY:var l=o.setterPrototype;if(l){var _=l.resolve();if(_){if(assert(_.parameters&&1==_.parameters.length),!r)return _.is(u.ElementFlags.INSTANCE)?(assert(null!=n.targetExpression),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType),this.currentType=d.Type.void,this.makeCall(_,[a,t])):(this.currentType=d.Type.void,this.makeCall(_,[t]));var y=o.getterPrototype;assert(null!=y);var m=y.resolve();if(m)return assert(!m.parameters||!m.parameters.length),_.is(u.ElementFlags.INSTANCE)?(assert(null!=n.targetExpression),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType),i=this.currentFunction.getAndFreeTempLocal(m.returnType),this.module.createBlock(null,[this.makeCall(_,[this.module.createTeeLocal(i.index,a),t]),this.makeCall(m,[this.module.createGetLocal(i.index,i.type.toNativeType())])],(this.currentType=m.returnType).toNativeType())):this.module.createBlock(null,[this.makeCall(_,[t]),this.makeCall(m)],(this.currentType=m.returnType).toNativeType())}}else this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName);return this.module.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){assert(n.target&&n.target.kind==u.ElementKind.CLASS);var E=o.resolve();if(!E)return this.module.createUnreachable();var f,T=n.target.prototype.fnIndexedSet;if(null!=T&&n.target.members&&(f=n.target.members.get(T))&&f.kind==u.ElementKind.FUNCTION_PROTOTYPE){var g=f.resolve();if(!g)return this.module.createUnreachable();a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType);var A=this.compileExpression(e.elementExpression,d.Type.i32);return r?(this.currentType=E.returnType,i=this.currentFunction.getAndFreeTempLocal(this.currentType),this.module.createBlock(null,[this.makeCall(g,[a,A,this.module.createTeeLocal(i.index,t)]),this.module.createGetLocal(i.index,i.type.toNativeType())],this.currentType.toNativeType())):(this.currentType=g.returnType,this.makeCall(g,[a,A,t]))}return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,n.target.internalName),this.module.createUnreachable()}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r=this.program.resolveExpression(e.expression,this.currentFunction);if(!r)return this.module.createUnreachable();var n=r.element;if(n.kind!=u.ElementKind.FUNCTION_PROTOTYPE)return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,n.internalName),this.module.createUnreachable();var i,a=n;if(a.is(u.ElementFlags.BUILTIN)){var o=null;if(e.typeArguments){var p=e.typeArguments.length;o=new Array(p);for(var l=0;lo)return this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,r.range,a.toString(10),p.toString(10)),this.module.createUnreachable();var u=new Array(o),l=0,h=0;if(e.instanceMethodOf&&(u[l++]=n||this.compileExpression(t[h++],e.instanceMethodOf.type)),i)for(;ll)u[l]=this.compileExpression(t[h++],i[l+a-o].type);else{var d=i[l+a-o].initializer;if(!d)return this.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,r.range,(l+a-o).toString(10),p.toString(10)),this.module.createUnreachable();u[l]=this.compileExpression(d,i[l+a-o].type)}return this.currentType=e.returnType,this.makeCall(e,u)},t.prototype.makeCall=function(e,t){return void 0===t&&(t=null),e.is(u.ElementFlags.COMPILED)||this.compileFunction(e)?e.is(u.ElementFlags.DECLARED)?this.module.createCallImport(e.internalName,t,e.returnType.toNativeType()):this.module.createCall(e.internalName,t,e.returnType.toNativeType()):this.module.createUnreachable()},t.prototype.compileCommaExpression=function(e,t){for(var r=e.expressions,n=r.length,i=new Array(n--),a=0;a=0),this.currentType=i.type,this.module.createGetLocal(i.index,this.currentType.toNativeType()));case u.ElementKind.GLOBAL:return i.is(u.ElementFlags.BUILTIN)?s.compileGetConstant(this,i,e):this.compileGlobal(i)?(assert(i.type!=d.Type.void),i.is(u.ElementFlags.INLINED)?this.compileInlineConstant(i,t,r):(this.currentType=i.type,this.module.createGetGlobal(i.internalName,this.currentType.toNativeType()))):this.module.createUnreachable();case u.ElementKind.ENUMVALUE:return i.is(u.ElementFlags.COMPILED)?(this.currentType=d.Type.i32,i.is(u.ElementFlags.INLINED)?this.module.createI32(i.constantValue):this.module.createGetGlobal(i.internalName,p.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable())}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){switch(void 0===r&&(r=!1),e.literalKind){case 4:assert(!r);var n=t.classType;return n&&n==this.program.elements.get("Array")&&n.typeArguments&&1==n.typeArguments.length?this.compileStaticArray(n.typeArguments[0],e.elementExpressions):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable());case 0:var i=e.value;return r&&(i=-i),t==d.Type.f32?this.module.createF32(i):(this.currentType=d.Type.f64,this.module.createF64(i));case 1:var a=e.value;switch(r&&(a=i64_sub(i64_new(0),a)),t.kind){case 0:if(i64_is_i8(a))return this.module.createI32(i64_low(a));break;case 1:if(i64_is_i16(a))return this.module.createI32(i64_low(a));break;case 2:if(i64_is_i32(a))return this.module.createI32(i64_low(a));break;case 5:if(i64_is_u8(a))return this.module.createI32(i64_low(a));break;case 6:if(i64_is_u16(a))return this.module.createI32(i64_low(a));break;case 7:if(i64_is_u32(a))return this.module.createI32(i64_low(a));break;case 10:if(i64_is_bool(a))return this.module.createI32(i64_low(a));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_u32(a))return this.module.createI32(i64_low(a));break}return this.module.createI64(i64_low(a),i64_high(a));case 3:case 8:return this.module.createI64(i64_low(a),i64_high(a));case 11:if(i64_is_f32(a))return this.module.createF32(i64_to_f32(a));break;case 12:if(i64_is_f64(a))return this.module.createF64(i64_to_f64(a));break;case 13:break;default:assert(!1)}return i64_is_i32(a)?(this.currentType=d.Type.i32,this.module.createI32(i64_low(a))):(this.currentType=d.Type.i64,this.module.createI64(i64_low(a),i64_high(a)));case 2:return assert(!r),this.compileStaticString(e.value)}throw new Error("not implemented")},t.prototype.compileStaticString=function(e){var t=this.stringSegments.get(e);if(!t){var r=e.length,n=new Uint8Array(4+2*r);n[0]=255&r,n[1]=r>>>8&255,n[2]=r>>>16&255,n[3]=r>>>24&255;for(var i=0;i>>8&255;t=this.addMemorySegment(n,this.options.usizeType.byteSize),this.stringSegments.set(e,t)}var a=t.offset,o=this.program.types.get("string");return this.currentType=o||this.options.usizeType,this.options.isWasm64?this.module.createI64(i64_low(a),i64_high(a)):(assert(i64_is_i32(a)),this.module.createI32(i64_low(a)))},t.prototype.compileStaticArray=function(e,t){var r,n=!0,i=t.length,a=e.toNativeType();switch(a){case p.NativeType.I32:r=changetype(new Int32Array(i));break;case p.NativeType.I64:r=changetype(new Array(i));break;case p.NativeType.F32:r=changetype(new Float32Array(i));break;case p.NativeType.F64:r=changetype(new Float64Array(i));break;default:throw new Error("concrete type expected")}for(var o,s=new Array(i),c=0;c=0),i=this.compileExpression(n.targetExpression,this.options.usizeType,0),this.currentType=a.type,this.module.createLoad(a.type.size>>3,a.type.is(5),i,a.type.toNativeType(),a.memoryOffset);case u.ElementKind.PROPERTY:var o=a.getterPrototype;assert(null!=o);var l=o.resolve(null);return l?(assert(!l.parameters||!l.parameters.length),this.currentType=l.returnType,l.is(u.ElementFlags.INSTANCE)?(i=this.compileExpression(n.targetExpression,this.options.usizeType,0),this.currentType=l.returnType,this.makeCall(l,[i])):this.makeCall(l)):this.module.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=f(this.compileExpression(e.condition,d.Type.u32,0),this.currentType,this.module),n=this.compileExpression(e.ifThen,t),i=this.compileExpression(e.ifElse,t);return this.module.createIf(r,n,i)},t.prototype.compileUnaryPostfixExpression=function(e,t){var r,n,i,a,o=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),s=!1;switch(e.operator){case l.Token.PLUS_PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:s=!0;default:r=p.BinaryOp.AddI32,n=p.NativeType.I32,i=this.module.createI32(1);break;case 9:case 4:r=this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,i=this.currentType.toNativeOne(this.module);break;case 3:case 8:r=p.BinaryOp.AddI64,n=p.NativeType.I64,i=this.module.createI64(1);break;case 11:r=p.BinaryOp.AddF32,n=p.NativeType.F32,i=this.module.createF32(1);break;case 12:r=p.BinaryOp.AddF64,n=p.NativeType.F64,i=this.module.createF64(1);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.MINUS_MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:s=!0;default:r=p.BinaryOp.SubI32,n=p.NativeType.I32,i=this.module.createI32(1);break;case 9:case 4:r=this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,i=this.currentType.toNativeOne(this.module);break;case 3:case 8:r=p.BinaryOp.SubI64,n=p.NativeType.I64,i=this.module.createI64(1);break;case 11:r=p.BinaryOp.SubF32,n=p.NativeType.F32,i=this.module.createF32(1);break;case 12:r=p.BinaryOp.SubF64,n=p.NativeType.F64,i=this.module.createF64(1);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("unary postfix operator expected")}var u=null;return t==d.Type.void?a=this.module.createBinary(r,o,i):(u=this.currentFunction.getTempLocal(this.currentType),a=this.module.createBinary(r,this.module.createGetLocal(u.index,n),i)),s&&(assert(this.currentType.is(36)),a=m(a,this.currentType,this.module)),a=this.compileAssignmentWithValue(e.operand,a,!1),t==d.Type.void?(assert(!u),a):(this.currentType=assert(u).type,this.currentFunction.freeTempLocal(u),this.module.createBlock(null,[this.module.createSetLocal(u.index,o),a,this.module.createGetLocal(u.index,n)],n))},t.prototype.compileUnaryPrefixExpression=function(e,t,r){void 0===r&&(r=!0);var n,i=!1,a=!1;switch(e.operator){case l.Token.PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),i=this.currentType.is(36);break;case l.Token.MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();if(e.operand.kind!=h.NodeKind.LITERAL||1!=e.operand.literalKind&&0!=e.operand.literalKind)switch(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.SubI32,this.module.createI32(0),n);break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,this.currentType.toNativeZero(this.module),n);break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.SubI64,this.module.createI64(0),n);break;case 11:n=this.module.createUnary(p.UnaryOp.NegF32,n);break;case 12:n=this.module.createUnary(p.UnaryOp.NegF64,n)}else n=this.compileLiteralExpression(e.operand,t,!0),this.addDebugLocation(n,e.range);break;case l.Token.PLUS_PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(a=!0,n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.AddI32,n,this.module.createI32(1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,this.currentType.toNativeOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.AddI64,n,this.module.createI64(1));break;case 11:n=this.module.createBinary(p.BinaryOp.AddF32,n,this.module.createF32(1));break;case 12:n=this.module.createBinary(p.BinaryOp.AddF64,n,this.module.createF64(1))}break;case l.Token.MINUS_MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(a=!0,n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.SubI32,n,this.module.createI32(1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,this.currentType.toNativeOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.SubI64,n,this.module.createI64(1));break;case 11:n=this.module.createBinary(p.BinaryOp.SubF32,n,this.module.createF32(1));break;case 12:n=this.module.createBinary(p.BinaryOp.SubF64,n,this.module.createF64(1))}break;case l.Token.EXCLAMATION:n=E(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!0),this.currentType,this.module),this.currentType=d.Type.bool;break;case l.Token.TILDE:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,t==d.Type.void?0:1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.XorI32,n,this.module.createI32(-1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,this.currentType.toNativeNegOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.XorI64,n,this.module.createI64(-1,-1))}break;case l.Token.TYPEOF:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("not implemented");default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("unary operator expected")}return i&&r&&(assert(this.currentType.is(36)),n=m(n,this.currentType,this.module)),a?this.compileAssignmentWithValue(e.operand,n,t!=d.Type.void):n},t.prototype.addDebugLocation=function(e,t){if(null!=this.options.sourceMap){var r=t.source;r.debugInfoIndex<0&&(r.debugInfoIndex=this.module.addDebugInfoFile(r.normalizedPath)),t.debugInfoRef=e,this.currentFunction.debugLocations||(this.currentFunction.debugLocations=[]),this.currentFunction.debugLocations.push(t)}},t}(c.DiagnosticEmitter);function m(e,t,r){switch(t.kind){case 0:e=r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24));break;case 1:e=r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16));break;case 5:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255));break;case 6:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535));break;case 10:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(1));break;case 13:throw new Error("concrete type expected")}return e}function E(e,t,r){switch(t.kind){default:e=r.createUnary(p.UnaryOp.EqzI32,e);break;case 3:case 8:e=r.createUnary(p.UnaryOp.EqzI64,e);break;case 9:case 4:e=r.createUnary(64==t.size?p.UnaryOp.EqzI64:p.UnaryOp.EqzI32,e);break;case 11:e=r.createBinary(p.BinaryOp.EqF32,e,r.createF32(0));break;case 12:e=r.createBinary(p.BinaryOp.EqF64,e,r.createF64(0));break;case 13:throw new Error("concrete type expected")}return e}function f(e,t,r){switch(t.kind){case 3:case 8:e=r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0));break;case 9:case 4:64==t.size&&(e=r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0)));break;case 11:e=r.createBinary(p.BinaryOp.NeF32,e,r.createF32(0));break;case 12:e=r.createBinary(p.BinaryOp.NeF64,e,r.createF64(0));break;case 13:throw new Error("concrete type expected")}return e}t.Compiler=y,t.makeSmallIntegerWrap=m,t.makeIsFalseish=E,t.makeIsTrueish=f},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalize=i,t.resolve=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&!((t=e)<0||t>65535)&&a(t,n);var t},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&!((t=e)<0||t>65535)&&a(t,i);var t};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e"),null}if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;h=!0}n=p.Node.createType(u,l,h,e.range(a,e.pos))}for(;e.skip(o.Token.OPENBRACKET);){var _=e.tokenPos;if(!e.skip(o.Token.CLOSEBRACKET))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;var y=e.range(_,e.pos);if(h=!1,e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"null"),null;h=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",y),[n],h,e.range(a,e.pos)),h)break}return n},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){for(var r,n=e.readIdentifier(),i=p.Node.createIdentifierExpression(n,e.range(t,e.pos));e.skip(o.Token.DOT);){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;n=e.readIdentifier(),i=p.Node.createPropertyAccessExpression(i,p.Node.createIdentifierExpression(n,e.range()),e.range(t,e.pos))}if(!e.skip(o.Token.OPENPAREN))return p.Node.createDecorator(i,null,e.range(t,e.pos));if(r=this.parseArguments(e))return p.Node.createDecorator(i,r,e.range(t,e.pos))}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos,i=new Array,a=p.hasModifier(p.ModifierKind.DECLARE,t);do{var s=this.parseVariableDeclaration(e,a,t,r);if(!s)return null;i.push(s)}while(e.skip(o.Token.COMMA));var c=p.Node.createVariableStatement(i,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),c},t.prototype.parseVariableDeclaration=function(e,t,r,n){if(void 0===t&&(t=!1),!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=null;e.skip(o.Token.COLON)&&(a=this.parseType(e));var c=null;if(e.skip(o.Token.EQUALS)){if(t&&this.error(s.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(c=this.parseExpression(e,1)))return null}else p.hasModifier(p.ModifierKind.CONST,r)?p.hasModifier(p.ModifierKind.DECLARE,r)||this.error(s.DiagnosticCode._const_declarations_must_be_initialized,i.range):a||this.error(s.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(i,a,c,r,n,o.Range.join(i.range,e.range()))},t.prototype.parseEnum=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;if(e.next()!=o.Token.IDENTIFIER)return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=o.Token.OPENBRACE)return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;var a=new Array;if(!e.skip(o.Token.CLOSEBRACE)){do{var c=this.parseEnumValue(e);if(!c)return null;a.push(c)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var u=p.Node.createEnumDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;return e.skip(o.Token.EQUALS)&&!(r=this.parseExpression(e,1))?null:p.Node.createEnumValueDeclaration(t,r,o.Range.join(t.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=o.Token.SEMICOLON&&e.nextToken!=o.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){var t=new Array;if(e.skip(o.Token.GREATERTHAN))this.error(s.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range());else{do{var r=this.parseTypeParameter(e);if(!r)return null;t.push(r)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(),">"),null}return t},t.prototype.parseTypeParameter=function(e){if(e.next()==o.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;return e.skip(o.Token.EXTENDS)&&!(r=this.parseType(e))?null:p.Node.createTypeParameter(t,r,o.Range.join(t.range,e.range()))}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e){var t=new Array,r=null,n=!1,i=!1;if(e.peek()!=o.Token.CLOSEPAREN)do{var a=this.parseParameter(e);if(!a)return null;switch(r&&!i&&(this.error(s.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,r.name.range),i=!0),a.parameterKind){default:n&&this.error(s.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,a.name.range);break;case p.ParameterKind.OPTIONAL:n=!0;break;case p.ParameterKind.REST:r=a}t.push(a)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.CLOSEPAREN)?t:(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null)},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null;if(e.skip(o.Token.DOT_DOT_DOT)&&(r=!0,i=e.range()),e.skip(o.Token.IDENTIFIER)){r||(i=e.range());var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=null;if((n=e.skip(o.Token.QUESTION))&&r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,a.range),e.skip(o.Token.COLON)&&!(c=this.parseType(e)))return null;var u=null;return!e.skip(o.Token.EQUALS)||(r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,a.range),n?this.error(s.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,a.range):n=!0,u=this.parseExpression(e,1))?p.Node.createParameter(a,c,u,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,o.Range.join(i,e.range())):null}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=null;if(e.skip(o.Token.LESSTHAN)&&!(a=this.parseTypeParameters(e)))return null;if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null;var c=this.parseParameters(e);if(!c)return null;var u=p.hasModifier(p.ModifierKind.SET,t);u&&(1!=c.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),c.length&&c[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),p.hasModifier(p.ModifierKind.GET,t)&&c.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var l=null;if(e.skip(o.Token.COLON)){if(!(l=this.parseType(e,u)))return null}else u||this.error(s.DiagnosticCode.Type_expected,e.range(e.pos));var h=p.hasModifier(p.ModifierKind.DECLARE,t),d=null;if(e.skip(o.Token.OPENBRACE)){if(h&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(d=this.parseBlockStatement(e,!1)))return null}else h||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var _=p.Node.createFunctionDeclaration(i,a,c,l,d,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),_},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==o.Token.FUNCTION){if(n=!1,t=e.skip(o.Token.IDENTIFIER)?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createIdentifierExpression("",e.range(e.pos,e.pos)),!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==o.Token.OPENPAREN),t=p.Node.createIdentifierExpression("",e.range(e.tokenPos,e.tokenPos));var i=this.parseParameters(e);return i?this.parseFunctionExpressionCommon(e,t,i,n,r):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i){void 0===i&&(i=-1),i<0&&(i=t.range.start);var a,c=null;if(e.skip(o.Token.COLON)&&!(c=this.parseType(e)))return null;if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;if(n)a=this.parseStatement(e,!1);else{if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;a=this.parseBlockStatement(e,!1)}if(!a)return null;var u=p.Node.createFunctionDeclaration(t,null,r,c,a,null,null,e.range(i,e.pos));return p.Node.createFunctionExpression(u,n)},t.prototype.parseClass=function(e,t,r){var n=r&&r.length?r[0].range.start:t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){var i,a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.LESSTHAN)){if(!(i=this.parseTypeParameters(e)))return null}else i=[];var c=null;if(e.skip(o.Token.EXTENDS)&&!(c=this.parseType(e)))return null;var u=new Array;if(e.skip(o.Token.IMPLEMENTS))do{var l=this.parseType(e);if(!l)return null;u.push(l)}while(e.skip(o.Token.COMMA));if(e.skip(o.Token.OPENBRACE)){var h=new Array;if(!e.skip(o.Token.CLOSEBRACE)){var d=p.hasModifier(p.ModifierKind.DECLARE,t);do{var _=this.parseClassMember(e,d);if(!_)return null;h.push(_)}while(!e.skip(o.Token.CLOSEBRACE))}return p.Node.createClassDeclaration(a,i,c,u,h,t,r,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(o.Token.AT);){var i=this.parseDecorator(e);if(!i)break;n.push(i)}var a=null;e.skip(o.Token.PUBLIC)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.PUBLIC,e.range()),a):e.skip(o.Token.PRIVATE)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.PRIVATE,e.range()),a):e.skip(o.Token.PROTECTED)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.PROTECTED,e.range()),a)),e.skip(o.Token.STATIC)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.STATIC,e.range()),a):e.skip(o.Token.ABSTRACT)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.ABSTRACT,e.range()),a)),e.skip(o.Token.READONLY)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.READONLY,e.range()),a)),e.mark();var c=!1,u=!1;(c=e.skip(o.Token.GET))?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(),c=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.GET,e.range()),a):(u=e.skip(o.Token.SET))&&(e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(),u=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.SET,e.range()),a));var l=e.skip(o.Token.CONSTRUCTOR);if(l||e.skip(o.Token.IDENTIFIER)){var h=l?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),d=null;if(e.skip(o.Token.LESSTHAN)&&(l&&this.error(s.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range()),!(d=this.parseTypeParameters(e))))return null;if(e.skip(o.Token.OPENPAREN)){var _=this.parseParameters(e);if(!_)return null;c&&_.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,h.range),u&&(1!=_.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,h.range),_.length&&_[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,h.range));var y=null;if(e.skip(o.Token.COLON)){if(h.kind==p.NodeKind.CONSTRUCTOR?this.error(s.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,e.range()):u&&this.error(s.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,e.range()),!(y=this.parseType(e,h.kind==p.NodeKind.CONSTRUCTOR||u)))return null}else u||h.kind==p.NodeKind.CONSTRUCTOR||this.error(s.DiagnosticCode.Type_expected,e.range());var m=null;if(e.skip(o.Token.OPENBRACE)){if(t&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(m=this.parseBlockStatement(e,!1)))return null}else t||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range());var E=p.Node.createMethodDeclaration(h,d,_,y,m,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),E}if(l)this.error(s.DiagnosticCode.Constructor_implementation_is_missing,h.range);else{if(!c&&!u){var f;(f=p.getModifier(p.ModifierKind.ABSTRACT,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"abstract"),(f=p.getModifier(p.ModifierKind.GET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"get"),(f=p.getModifier(p.ModifierKind.SET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"set");var T=null;if(e.skip(o.Token.COLON)){if(!(T=this.parseType(e)))return null}else this.error(s.DiagnosticCode.Type_expected,e.range());var g=null;if(e.skip(o.Token.EQUALS)&&!(g=this.parseExpression(e)))return null;var A=p.Node.createFieldDeclaration(h,T,g,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),A}this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,h.range)}}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseNamespace=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.OPENBRACE)){for(var a=new Array;!e.skip(o.Token.CLOSEBRACE);){var c=this.parseTopLevelStatement(e,!0);if(!c)return null;a.push(c)}var u=p.Node.createNamespaceDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseExport=function(e,t){var r=t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(o.Token.OPENBRACE)){var n=new Array;if(!e.skip(o.Token.CLOSEBRACE)){do{var i=this.parseExportMember(e);if(!i)return null;n.push(i)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var a=null;if(e.skip(o.Token.FROM)){if(!e.skip(o.Token.STRINGLITERAL))return this.error(s.DiagnosticCode.String_literal_expected,e.range()),null;a=p.Node.createStringLiteralExpression(e.readString(),e.range())}var c=p.Node.createExportStatement(n,a,t,e.range(r,e.pos));return c.normalizedPath&&!this.seenlog.has(c.normalizedPath)&&(this.backlog.push(c.normalizedPath),this.seenlog.add(c.normalizedPath)),e.skip(o.Token.SEMICOLON),c}return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null},t.prototype.parseExportMember=function(e){if(e.skip(o.Token.IDENTIFIER)){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.AS)){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return p.Node.createExportMember(t,r,r?o.Range.join(t.range,r.range):t.range)}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseImport=function(e){var t=e.tokenPos,r=null,n=null,i=!1;if(e.skip(o.Token.OPENBRACE)){if(r=new Array,!e.skip(o.Token.CLOSEBRACE)){do{var a=this.parseImportDeclaration(e);if(!a)return null;r.push(a)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}}else if(e.skip(o.Token.ASTERISK)){if(!e.skip(o.Token.AS))return this.error(s.DiagnosticCode._0_expected,e.range(),"as"),null;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}else i=!0;if(i||e.skip(o.Token.FROM)){if(e.skip(o.Token.STRINGLITERAL)){var c,u=p.Node.createStringLiteralExpression(e.readString(),e.range());return n?(assert(!r),c=p.Node.createImportStatementWithWildcard(n,u,e.range(t,e.pos))):c=p.Node.createImportStatement(r,u,e.range(t,e.pos)),this.seenlog.has(c.normalizedPath)||(this.backlog.push(c.normalizedPath),this.seenlog.add(c.normalizedPath)),e.skip(o.Token.SEMICOLON),c}this.error(s.DiagnosticCode.String_literal_expected,e.range())}else this.error(s.DiagnosticCode._0_expected,e.range(),"from");return null},t.prototype.parseImportDeclaration=function(e){if(e.skip(o.Token.IDENTIFIER)){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.AS)){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return p.Node.createImportDeclaration(t,r,r?o.Range.join(t.range,r.range):t.range)}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseExportImport=function(e,t){if(e.skip(o.Token.IDENTIFIER)){var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.EQUALS)){if(e.skip(o.Token.IDENTIFIER)){var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=p.Node.createExportImportStatement(n,r,o.Range.join(t,e.range()));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode.Identifier_expected,e.range())}else this.error(s.DiagnosticCode._0_expected,e.range(),"=")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseStatement=function(e,t){switch(void 0===t&&(t=!1),e.mark(),e.next()){case o.Token.BREAK:return this.parseBreak(e);case o.Token.CONST:return this.parseVariable(e,[p.Node.createModifier(p.ModifierKind.CONST,e.range())],null);case o.Token.CONTINUE:return this.parseContinue(e);case o.Token.DO:return this.parseDoStatement(e);case o.Token.FOR:return this.parseForStatement(e);case o.Token.IF:return this.parseIfStatement(e);case o.Token.LET:return this.parseVariable(e,[p.Node.createModifier(p.ModifierKind.LET,e.range())],null);case o.Token.VAR:return this.parseVariable(e,null,null);case o.Token.OPENBRACE:return this.parseBlockStatement(e,t);case o.Token.RETURN:return t&&this.error(s.DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,e.range()),this.parseReturn(e);case o.Token.SEMICOLON:return p.Node.createEmptyStatement(e.range(e.tokenPos));case o.Token.SWITCH:return this.parseSwitchStatement(e);case o.Token.THROW:return this.parseThrowStatement(e);case o.Token.TRY:return this.parseTryStatement(e);case o.Token.TYPE:return this.parseTypeDeclaration(e,null);case o.Token.WHILE:return this.parseWhileStatement(e);default:return e.reset(),this.parseExpressionStatement(e)}},t.prototype.parseBlockStatement=function(e,t){for(var r=e.tokenPos,n=new Array;!e.skip(o.Token.CLOSEBRACE);){var i=this.parseStatement(e,t);if(!i)return null;n.push(i)}var a=p.Node.createBlockStatement(n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),a},t.prototype.parseBreak=function(e){var t=null;e.peek(!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine||(e.next(!0),t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()));var r=p.Node.createBreakStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseContinue=function(e){var t=null;e.peek(!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine||(e.next(!0),t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()));var r=p.Node.createContinueStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseDoStatement=function(e){var t=e.tokenPos,r=this.parseStatement(e);if(!r)return null;if(e.skip(o.Token.WHILE))if(e.skip(o.Token.OPENPAREN)){var n=this.parseExpression(e);if(!n)return null;if(e.skip(o.Token.CLOSEPAREN)){var i=p.Node.createDoStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");else this.error(s.DiagnosticCode._0_expected,e.range(),"while");return null},t.prototype.parseExpressionStatement=function(e){var t=this.parseExpression(e);if(!t)return null;var r=p.Node.createExpressionStatement(t);return e.skip(o.Token.SEMICOLON),r},t.prototype.parseForStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=null;if(e.skip(o.Token.LET)||e.skip(o.Token.CONST)||e.skip(o.Token.VAR))r=this.parseVariable(e,null,null);else if(!e.skip(o.Token.SEMICOLON)&&!(r=this.parseExpressionStatement(e)))return null;if(e.token==o.Token.SEMICOLON){var n=null;if(!e.skip(o.Token.SEMICOLON)&&!(n=this.parseExpressionStatement(e)))return null;if(e.token==o.Token.SEMICOLON){var i=null;if(!e.skip(o.Token.CLOSEPAREN)){if(!(i=this.parseExpression(e)))return null;if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null}var a=this.parseStatement(e);return a?p.Node.createForStatement(r,n?n.expression:null,i,a,e.range(t,e.pos)):null}this.error(s.DiagnosticCode._0_expected,e.range(),";")}else this.error(s.DiagnosticCode._0_expected,e.range(),";")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseIfStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=null;return e.skip(o.Token.ELSE)&&!(i=this.parseStatement(e))?null:p.Node.createIfStatement(r,n,i,e.range(t,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseSwitchStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){if(e.skip(o.Token.OPENBRACE)){for(var n=new Array;!e.skip(o.Token.CLOSEBRACE);){var i=this.parseSwitchCase(e);if(!i)return null;n.push(i)}var a=p.Node.createSwitchStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),a}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseSwitchCase=function(e){var t,r,n=e.tokenPos;if(e.skip(o.Token.CASE)){var i=this.parseExpression(e);if(!i)return null;if(e.skip(o.Token.COLON)){for(t=new Array;e.peek()!=o.Token.CASE&&e.nextToken!=o.Token.DEFAULT&&e.nextToken!=o.Token.CLOSEBRACE;){if(!(r=this.parseStatement(e)))return null;t.push(r)}return p.Node.createSwitchCase(i,t,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),":")}else if(e.skip(o.Token.DEFAULT)){if(e.skip(o.Token.COLON)){for(t=new Array;e.peek()!=o.Token.CASE&&e.nextToken!=o.Token.DEFAULT&&e.nextToken!=o.Token.CLOSEBRACE;){if(!(r=this.parseStatement(e)))return null;t.push(r)}return p.Node.createSwitchCase(null,t,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),":")}else this.error(s.DiagnosticCode._case_or_default_expected,e.range());return null},t.prototype.parseThrowStatement=function(e){var t=e.tokenPos,r=this.parseExpression(e);if(!r)return null;var n=p.Node.createThrowStatement(r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),n},t.prototype.parseTryStatement=function(e){var t,r=e.tokenPos;if(e.skip(o.Token.OPENBRACE)){for(var n=new Array;!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;n.push(t)}var i=null,a=null,c=null;if(e.skip(o.Token.CATCH)){if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),"("),null;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;if(i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null;if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;for(a=[];!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;a.push(t)}}if(e.skip(o.Token.FINALLY)){if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;for(c=[];!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;c.push(t)}}if(!a&&!c)return this.error(s.DiagnosticCode._0_expected,e.range(),"catch"),null;var u=p.Node.createTryStatement(n,i,a,c,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),u}return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null},t.prototype.parseTypeDeclaration=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=null);var n=r&&r.length?r[0].range.start:t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.EQUALS)){var a=this.parseType(e);if(!a)return null;var c=p.Node.createTypeDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),c}this.error(s.DiagnosticCode._0_expected,e.range(),"=")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseWhileStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=p.Node.createWhileStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseExpressionStart=function(e){var t=e.next(!0),r=e.tokenPos,n=null;if(t==o.Token.NULL)return p.Node.createNullExpression(e.range());if(t==o.Token.TRUE)return p.Node.createTrueExpression(e.range());if(t==o.Token.FALSE)return p.Node.createFalseExpression(e.range());var i,a=function(e){switch(e){case o.Token.DOT_DOT_DOT:return 1;case o.Token.YIELD:return 2;case o.Token.EXCLAMATION:case o.Token.TILDE:case o.Token.PLUS:case o.Token.MINUS:case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:case o.Token.TYPEOF:case o.Token.VOID:case o.Token.DELETE:return 16;case o.Token.NEW:return 19;default:return-1}}(t);if(-1!=a)return t==o.Token.NEW?(i=this.parseExpression(e,18))?i.kind==p.NodeKind.CALL?p.Node.createNewExpression(i.expression,i.typeArguments,i.arguments,e.range(r,e.pos)):(this.error(s.DiagnosticCode.Operation_not_supported,e.range()),null):null:(i=this.parseExpression(e,a))?(t!=o.Token.PLUS_PLUS&&t!=o.Token.MINUS_MINUS||i.kind!=p.NodeKind.IDENTIFIER&&i.kind!=p.NodeKind.ELEMENTACCESS&&i.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,i.range),p.Node.createUnaryPrefixExpression(t,i,e.range(r,e.pos))):null;switch(t){case o.Token.OPENPAREN:if(e.skip(o.Token.CLOSEPAREN))return this.parseFunctionExpressionCommon(e,p.Node.createIdentifierExpression("",e.range(r,r)),[],!0);e.mark();var c=!0;do{switch(e.next(!0)){case o.Token.DOT_DOT_DOT:return e.reset(),this.parseFunctionExpression(e);case o.Token.IDENTIFIER:switch(e.readIdentifier(),e.next()){case o.Token.CLOSEPAREN:if(!e.skip(o.Token.EQUALS_GREATERTHAN)){c=!1;break}case o.Token.QUESTION:case o.Token.COLON:return e.reset(),this.parseFunctionExpression(e);case o.Token.COMMA:break;default:c=!1}break;default:c=!1}}while(c);return e.reset(),(n=this.parseExpression(e))?e.skip(o.Token.CLOSEPAREN)?p.Node.createParenthesizedExpression(n,e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null):null;case o.Token.OPENBRACKET:var u=new Array;if(!e.skip(o.Token.CLOSEBRACKET)){do{if(e.peek()==o.Token.COMMA)n=null;else if(!(n=this.parseExpression(e,1)))return null;if(u.push(n),e.peek()==o.Token.CLOSEBRACKET)break}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACKET))return this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null}return p.Node.createArrayLiteralExpression(u,e.range(r,e.pos));case o.Token.LESSTHAN:var l=this.parseType(e);return l?e.skip(o.Token.GREATERTHAN)?(n=this.parseExpression(e,18))?p.Node.createAssertionExpression(0,n,l,e.range(r,e.pos)):null:(this.error(s.DiagnosticCode._0_expected,e.range(),">"),null):null;case o.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case o.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case o.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case o.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case o.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case o.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case o.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case o.Token.SLASH:var h=e.readRegexpPattern();return e.skip(o.Token.SLASH)?p.Node.createRegexpLiteralExpression(h,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),"/"),null);case o.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(s.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){if(e.mark(),!e.skip(o.Token.LESSTHAN))return null;var t=new Array;do{var r=this.parseType(e,!0,!0);if(!r)return e.reset(),null;t.push(r)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.GREATERTHAN)&&e.skip(o.Token.OPENPAREN)?t:(e.reset(),null)},t.prototype.parseArguments=function(e){var t=new Array;if(!e.skip(o.Token.CLOSEPAREN)){do{var r=this.parseExpression(e,1);if(!r)return null;t.push(r)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;var n,i=r.range.start,a=this.tryParseTypeArgumentsBeforeArguments(e);if(a||e.skip(o.Token.OPENPAREN)){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var u,d=null;(u=l(n=e.peek()))>=t;)switch(e.next(),n){case o.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(1,r,_,e.range(i,e.pos));break;case o.Token.OPENBRACKET:if(!(d=this.parseExpression(e)))return null;if(!e.skip(o.Token.CLOSEBRACKET))return this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,d,e.range(i,e.pos));break;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case o.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(o.Token.COLON))return this.error(s.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e);if(!m)return null;r=p.Node.createTernaryExpression(r,y,m,e.range(i,e.pos));break;case o.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,1)))return null;E.push(r)}while(e.skip(o.Token.COMMA));r=p.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(d=this.parseExpression(e,h(n)?u:u+1)))return null;if(n==o.Token.DOT)if(d.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,d,e.range(i,e.pos));else{if(d.kind!=p.NodeKind.CALL)return this.error(s.DiagnosticCode.Identifier_expected,d.range),null;var f=d;if(f.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(s.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=p.Node.createPropertyAccessExpression(r,f.expression,e.range(i,e.pos)),r=f}else r=p.Node.createBinaryExpression(n,r,d,e.range(i,e.pos))}return r},t}(s.DiagnosticEmitter);function l(e){switch(e){case o.Token.COMMA:return 0;case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:return 3;case o.Token.QUESTION:return 4;case o.Token.BAR_BAR:return 5;case o.Token.AMPERSAND_AMPERSAND:return 6;case o.Token.BAR:return 7;case o.Token.CARET:return 8;case o.Token.AMPERSAND:return 9;case o.Token.EQUALS_EQUALS:case o.Token.EXCLAMATION_EQUALS:case o.Token.EQUALS_EQUALS_EQUALS:case o.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case o.Token.AS:case o.Token.IN:case o.Token.INSTANCEOF:case o.Token.LESSTHAN:case o.Token.GREATERTHAN:case o.Token.LESSTHAN_EQUALS:case o.Token.GREATERTHAN_EQUALS:return 11;case o.Token.LESSTHAN_LESSTHAN:case o.Token.GREATERTHAN_GREATERTHAN:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case o.Token.PLUS:case o.Token.MINUS:return 13;case o.Token.ASTERISK:case o.Token.SLASH:case o.Token.PERCENT:return 14;case o.Token.ASTERISK_ASTERISK:return 15;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:return 17;case o.Token.DOT:case o.Token.NEW:case o.Token.OPENBRACKET:return 19;default:return-1}}function h(e){switch(e){case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:case o.Token.QUESTION:case o.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.COMMA=0]="COMMA",e[e.SPREAD=1]="SPREAD",e[e.YIELD=2]="YIELD",e[e.ASSIGNMENT=3]="ASSIGNMENT",e[e.CONDITIONAL=4]="CONDITIONAL",e[e.LOGICAL_OR=5]="LOGICAL_OR",e[e.LOGICAL_AND=6]="LOGICAL_AND",e[e.BITWISE_OR=7]="BITWISE_OR",e[e.BITWISE_XOR=8]="BITWISE_XOR",e[e.BITWISE_AND=9]="BITWISE_AND",e[e.EQUALITY=10]="EQUALITY",e[e.RELATIONAL=11]="RELATIONAL",e[e.SHIFT=12]="SHIFT",e[e.ADDITIVE=13]="ADDITIVE",e[e.MULTIPLICATIVE=14]="MULTIPLICATIVE",e[e.EXPONENTIATED=15]="EXPONENTIATED",e[e.UNARY_PREFIX=16]="UNARY_PREFIX",e[e.UNARY_POSTFIX=17]="UNARY_POSTFIX",e[e.CALL=18]="CALL",e[e.MEMBERACCESS=19]="MEMBERACCESS",e[e.GROUPING=20]="GROUPING",e[e.INVALID=-1]="INVALID"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1),i=function(){function e(){this.text=[],this.functionId=0}return e.decompile=function(t){var r=new e;return r.decompile(t),r.finish()},e.prototype.decompile=function(e){throw new Error("not implemented")},e.prototype.decompileFunction=function(e){var t=n.readString(_BinaryenFunctionGetName(e))||"$"+this.functionId.toString(10),r=_BinaryenFunctionGetBody(e);this.push("function "),this.push(t),this.push("(");for(var i=0,o=_BinaryenFunctionGetNumParams(e);i0&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(_BinaryenFunctionGetParam(e,i)));this.push("): "),this.push(a(_BinaryenFunctionGetResult(e))),this.push(" "),_BinaryenExpressionGetId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),_BinaryenExpressionGetId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,o,s=_BinaryenExpressionGetId(e),c=_BinaryenExpressionGetType(e);switch(s){case n.ExpressionId.Block:for(null!=(r=n.readString(_BinaryenBlockGetName(e)))&&(this.push(r),this.push(": ")),this.push("{\n"),o=_BinaryenBlockGetNumChildren(e),i=0;i("),this.push(_BinaryenLoadGetOffset(e).toString(10)),this.push(" + "),this.decompileExpression(_BinaryenLoadGetPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(_BinaryenStoreGetOffset(e).toString(10)),this.push(" + "),this.decompileExpression(_BinaryenStoreGetPtr(e)),this.push(", "),this.decompileExpression(_BinaryenStoreGetValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(_BinaryenConstGetValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(_BinaryenConstGetValueI64Low(e),_BinaryenConstGetValueI64High(e))));case n.NativeType.F32:return void this.push(_BinaryenConstGetValueF32(e).toString(10));case n.NativeType.F64:return void this.push(_BinaryenConstGetValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(_BinaryenUnaryGetOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(_BinaryenBinaryGetOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" + "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" - "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" * "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" % "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" & "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" | "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" ^ "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" << "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >>> "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >> "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" == "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" != "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" % "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(_BinaryenSelectGetIfTrue(e)),this.push(", "),this.decompileExpression(_BinaryenSelectGetIfFalse(e)),this.push(", "),this.decompileExpression(_BinaryenSelectGetCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(_BinaryenDropGetValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=_BinaryenReturnGetValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(_BinaryenHostGetOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(_BinaryenHostGetOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(6),i=r(12),a=r(0);t.formatDiagnostic=a.formatDiagnosticMessage;var o=r(11);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser,r=!0),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset>>=0)&&e<256)&&(n=o[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(o[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?f:E;if(t){if(e<0)return f;if(e>=_)return v}else{if(e<=-y)return N;if(e+1>=y)return I}return e<0?c(-e,t).neg():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=s,n.fromNumber=c,n.fromBits=p;var u=Math.pow;function l(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return E;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return l(e.substring(1),t,r).neg();for(var i=c(u(r,8)),a=E,o=0;o>>0:this.low},S.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},S.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=s).isZero())return p+o;for(;p.length<6;)p="0"+p;o=""+p+o}},S.getHighBits=function(){return this.high},S.getHighBitsUnsigned=function(){return this.high>>>0},S.getLowBits=function(){return this.low},S.getLowBitsUnsigned=function(){return this.low>>>0},S.getNumBitsAbs=function(){if(this.isNegative())return this.eq(N)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},S.isOdd=function(){return 1==(1&this.low)},S.isEven=function(){return 0==(1&this.low)},S.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},S.eq=S.equals,S.notEquals=function(e){return!this.eq(e)},S.neq=S.notEquals,S.ne=S.notEquals,S.lessThan=function(e){return this.comp(e)<0},S.lt=S.lessThan,S.lessThanOrEqual=function(e){return this.comp(e)<=0},S.lte=S.lessThanOrEqual,S.le=S.lessThanOrEqual,S.greaterThan=function(e){return this.comp(e)>0},S.gt=S.greaterThan,S.greaterThanOrEqual=function(e){return this.comp(e)>=0},S.gte=S.greaterThanOrEqual,S.ge=S.greaterThanOrEqual,S.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},S.comp=S.compare,S.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(T)},S.neg=S.negate,S.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,o=e.high>>>16,s=65535&e.high,c=e.low>>>16,u=0,l=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,l+=(d+=n+c)>>>16,u+=(l+=r+s)>>>16,u+=t+o,p((d&=65535)<<16|(_&=65535),(u&=65535)<<16|(l&=65535),this.unsigned)},S.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},S.sub=S.subtract,S.multiply=function(e){if(this.isZero())return E;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return E;if(this.eq(N))return e.isOdd()?N:E;if(e.eq(N))return this.isOdd()?N:E;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(m)&&e.lt(m))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,o=65535&this.low,s=e.high>>>16,u=65535&e.high,l=e.low>>>16,d=65535&e.low,_=0,y=0,f=0,T=0;return f+=(T+=o*d)>>>16,y+=(f+=a*d)>>>16,f&=65535,y+=(f+=o*l)>>>16,_+=(y+=n*d)>>>16,y&=65535,_+=(y+=a*l)>>>16,y&=65535,_+=(y+=o*u)>>>16,_+=t*d+n*l+a*u+o*s,p((f&=65535)<<16|(T&=65535),(_&=65535)<<16|(y&=65535),this.unsigned)},S.mul=S.multiply,S.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?f:E;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return f;if(e.gt(this.shru(1)))return g;a=f}else{if(this.eq(N))return e.eq(T)||e.eq(A)?N:e.eq(N)?T:(t=this.shr(1).div(e).shl(1)).eq(E)?e.isNegative()?T:A:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?f:E;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=E}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var o=Math.ceil(Math.log(t)/Math.LN2),s=o<=48?1:u(2,o-48),l=c(t),d=l.mul(e);d.isNegative()||d.gt(n);)d=(l=c(t-=s,this.unsigned)).mul(e);l.isZero()&&(l=T),a=a.add(l),n=n.sub(d)}return a},S.div=S.divide,S.modulo=function(e){return i(e)||(e=h(e)),r?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},S.mod=S.modulo,S.rem=S.modulo,S.not=function(){return p(~this.low,~this.high,this.unsigned)},S.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},S.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},S.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},S.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},S.shr=S.shiftRight,S.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},S.shru=S.shiftRightUnsigned,S.shr_u=S.shiftRightUnsigned,S.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},S.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},S.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},S.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},S.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(14);e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),o=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(o)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(6),i=r(0),a=r(5),o=r(1),s=r(2);function c(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64),(_BinaryenExpressionGetId(r)!=o.ExpressionId.Const||_BinaryenExpressionGetType(r)!=o.NativeType.I64||0!=_BinaryenConstGetValueI64High(r)||(n=_BinaryenConstGetValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,a.Type.usize32),(_BinaryenExpressionGetId(r)!=o.ExpressionId.Const||_BinaryenExpressionGetType(r)!=o.NativeType.I32||(n=_BinaryenConstGetValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function p(e,t,r){var n=e.module,i=n.createUnreachable(),a=e.program.elements.get("abort"),o=e.program.types.get("string");if(a&&a.kind==s.ElementKind.FUNCTION_PROTOTYPE&&o){var c=a.resolve();c&&e.compileFunction(c)&&(assert(c.parameters&&4==c.parameters.length),i=n.createBlock(null,[e.makeCall(c,[null!=t?e.compileExpression(t,o):e.options.usizeType.toNativeZero(n),e.compileStaticString(r.range.source.normalizedPath),n.createI32(r.range.line),n.createI32(r.range.column)]),i]))}return i}t.compileGetConstant=function(e,t,r){switch(t.internalName){case"NaN":return e.currentType==a.Type.f32?e.module.createF32(NaN):(e.currentType=a.Type.f64,e.module.createF64(NaN));case"Infinity":return e.currentType==a.Type.f32?e.module.createF32(1/0):(e.currentType=a.Type.f64,e.module.createF64(1/0));case"HEAP_BASE":return e.currentType=e.options.usizeType,e.module.createGetGlobal("HEAP_BASE",e.currentType.toNativeType())}return e.error(i.DiagnosticCode.Operation_not_supported,r.range),e.module.createUnreachable()},t.compileCall=function(e,t,r,s,u,l){var h,d,_,y,m,E,f,T,g=e.module;switch(t.internalName){case"isNaN":if(e.currentType=a.Type.bool,1!=s.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createBinary(o.BinaryOp.NeF32,g.createTeeLocal(m.index,h),g.createGetLocal(m.index,o.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createBinary(o.BinaryOp.NeF64,g.createTeeLocal(m.index,h),g.createGetLocal(m.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break;default:y=g.createI32(0)}return e.currentType=a.Type.bool,y;case"isFinite":if(e.currentType=a.Type.bool,1!=s.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createSelect(g.createBinary(o.BinaryOp.NeF32,g.createUnary(o.UnaryOp.AbsF32,g.createTeeLocal(m.index,h)),g.createF32(1/0)),g.createI32(0),g.createBinary(o.BinaryOp.EqF32,g.createGetLocal(m.index,o.NativeType.F32),g.createGetLocal(m.index,o.NativeType.F32)));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createSelect(g.createBinary(o.BinaryOp.NeF64,g.createUnary(o.UnaryOp.AbsF64,g.createTeeLocal(m.index,h)),g.createF64(1/0)),g.createI32(0),g.createBinary(o.BinaryOp.EqF64,g.createGetLocal(m.index,o.NativeType.F64),g.createGetLocal(m.index,o.NativeType.F64)));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break;default:y=g.createI32(1)}return e.currentType=a.Type.bool,y;case"clz":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.ClzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.ClzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"ctz":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.CtzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.CtzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"popcnt":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.PopcntI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.PopcntI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"rotl":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=n.makeSmallIntegerWrap(g.createBinary(o.BinaryOp.RotlI32,h,d),e.currentType,g);case 2:case 7:y=g.createBinary(o.BinaryOp.RotlI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,h,d);break;case 3:case 8:y=g.createBinary(o.BinaryOp.RotlI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"rotr":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=n.makeSmallIntegerWrap(g.createBinary(o.BinaryOp.RotrI32,h,d),e.currentType,g);break;case 2:case 7:y=g.createBinary(o.BinaryOp.RotrI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,h,d);break;case 3:case 8:y=g.createBinary(o.BinaryOp.RotrI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"abs":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(o.BinaryOp.SubI32,g.createI32(0),g.createGetLocal(m.index,o.NativeType.I32)),g.createBinary(o.BinaryOp.GtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createI32(0)));break;case 4:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(g),g.createGetLocal(m.index,e.options.nativeSizeType)),g.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,g.createGetLocal(m.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(g)));break;case 3:m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(o.BinaryOp.SubI64,g.createI64(0,0),g.createGetLocal(m.index,o.NativeType.I64)),g.createBinary(o.BinaryOp.GtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createI64(0,0)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:y=h;break;case 11:y=g.createUnary(o.UnaryOp.AbsF32,h);break;case 12:y=g.createUnary(o.UnaryOp.AbsF64,h);break;case 13:y=g.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"max":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtU32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtU64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 11:y=g.createBinary(o.BinaryOp.MaxF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.MaxF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"min":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtU32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtU64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 11:y=g.createBinary(o.BinaryOp.MinF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.MinF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"ceil":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.CeilF32,h);break;case 12:y=g.createUnary(o.UnaryOp.CeilF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"floor":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.FloorF32,h);break;case 12:y=g.createUnary(o.UnaryOp.FloorF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"copysign":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 11:y=g.createBinary(o.BinaryOp.CopysignF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.CopysignF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"nearest":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.NearestF32,h);break;case 12:y=g.createUnary(o.UnaryOp.NearestF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"reinterpret":if(1!=s.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable();switch(r[0].kind){case 2:case 7:h=e.compileExpression(s[0],a.Type.f32),y=g.createUnary(o.UnaryOp.ReinterpretF32,h);break;case 3:case 8:h=e.compileExpression(s[0],a.Type.f64),y=g.createUnary(o.UnaryOp.ReinterpretF64,h);break;case 9:if(r[0].isReference)return e.error(i.DiagnosticCode.Operation_not_supported,l.range),e.currentType=r[0],g.createUnreachable();case 4:h=e.compileExpression(s[0],e.options.isWasm64?a.Type.f64:a.Type.f32),y=g.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,h);break;case 11:h=e.compileExpression(s[0],a.Type.u32),y=g.createUnary(o.UnaryOp.ReinterpretI32,h);break;case 12:h=e.compileExpression(s[0],a.Type.u64),y=g.createUnary(o.UnaryOp.ReinterpretI64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return e.currentType=r[0],y;case"sqrt":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:y=g.createUnary(o.UnaryOp.SqrtF32,h);break;case 12:y=g.createUnary(o.UnaryOp.SqrtF64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"trunc":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.TruncF32,h);break;case 12:y=g.createUnary(o.UnaryOp.TruncF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"load":return s.length<1||s.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),s.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"1",s.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable()):r&&1==r.length?(h=e.compileExpression(s[0],e.options.usizeType),(T=2==s.length?c(e,s[1]):0)<0?g.createUnreachable():(e.currentType=r[0],g.createLoad(r[0].byteSize,r[0].is(5),h,r[0].is(4)&&u.is(4)&&u.size>r[0].size?(e.currentType=u).toNativeType():(e.currentType=r[0]).toNativeType(),T))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"store":return e.currentType=a.Type.void,s.length<2||s.length>3?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),s.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"2",s.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),g.createUnreachable()):r&&1==r.length?(h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],r[0],r[0].is(4)?0:1),e.currentType.is(4)&&r[0].is(4)&&r[0].size>e.currentType.size?(d=e.convertExpression(d,e.currentType,r[0],1,s[1]),f=r[0]):f=e.currentType,(T=3==s.length?c(e,s[2]):0)<0?g.createUnreachable():(e.currentType=a.Type.void,g.createStore(r[0].byteSize,h,d,f.toNativeType(),T))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"sizeof":return e.currentType=e.options.usizeType,0!=s.length?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),g.createUnreachable()):r?1!=r.length?(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable()):y=e.options.isWasm64?g.createI64(r[0].byteSize,0):g.createI32(r[0].byteSize):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1","0"),g.createUnreachable());case"select":if(3!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],f=e.currentType),_=e.compileExpression(s[2],a.Type.bool),e.currentType=f,e.currentType.kind){default:y=g.createSelect(h,d,_);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"unreachable":return 0!=s.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=s.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createHost(o.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),h=g.createUnreachable()):h=e.compileExpression(s[0],a.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createHost(o.HostOp.GrowMemory,null,[h]);case"move_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),3!=s.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),e.currentType=a.Type.void,g.createUnreachable();throw h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],e.options.usizeType),_=e.compileExpression(s[2],e.options.usizeType),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),3!=s.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),e.currentType=a.Type.void,g.createUnreachable();throw h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],a.Type.u32),_=e.compileExpression(s[2],e.options.usizeType),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?9!=r[0].kind?(e.error(i.DiagnosticCode.Operation_not_supported,l.range),e.currentType=r[0],g.createUnreachable()):1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=r[0],g.createUnreachable()):(h=e.compileExpression(s[0],e.options.usizeType,0),e.currentType=r[0],9!=e.currentType.kind?(e.error(i.DiagnosticCode.Operation_not_supported,l.range),g.createUnreachable()):h):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"assert":if(s.length<1||s.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),s.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"1",s.length.toString(10)):s.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpressionRetainType(s[0],a.Type.i32);if(f=e.currentType,e.currentType=f.nonNullableType,e.options.noAssert)return u==a.Type.void?(e.currentType=a.Type.void,g.createNop()):h;var A=p(e,2==s.length?s[1]:null,l);if(e.currentType=f.nonNullableType,u==a.Type.void){switch(e.currentType.kind){default:y=g.createIf(g.createUnary(o.UnaryOp.EqzI32,h),A);break;case 3:case 8:y=g.createIf(g.createUnary(o.UnaryOp.EqzI64,h),A);break;case 4:case 9:y=g.createIf(g.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,h),A);break;case 11:y=g.createIf(g.createBinary(o.BinaryOp.EqF32,h,g.createF32(0)),A);break;case 12:y=g.createIf(g.createBinary(o.BinaryOp.EqF64,h,g.createF64(0)),A);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=A}e.currentType=a.Type.void}else switch(e.currentType.kind){default:m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),y=g.createIf(g.createUnary(o.UnaryOp.EqzI32,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,o.NativeType.I32));break;case 3:case 8:m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=g.createIf(g.createUnary(o.UnaryOp.EqzI64,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,o.NativeType.I64));break;case 4:case 9:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=g.createIf(g.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,e.options.nativeSizeType));break;case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createIf(g.createBinary(o.BinaryOp.EqF32,g.createTeeLocal(m.index,h),g.createF32(0)),A,g.createGetLocal(m.index,o.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createIf(g.createBinary(o.BinaryOp.EqF64,g.createTeeLocal(m.index,h),g.createF64(0)),A,g.createGetLocal(m.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=A}return y;case"i8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i8,g.createUnreachable()):e.compileExpression(s[0],a.Type.i8,2);case"i16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i16,g.createUnreachable()):e.compileExpression(s[0],a.Type.i16,2);case"i32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i32,g.createUnreachable()):e.compileExpression(s[0],a.Type.i32,2);case"i64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i64,g.createUnreachable()):e.compileExpression(s[0],a.Type.i64,2);case"isize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=e.options.isWasm64?a.Type.isize64:a.Type.isize32,g.createUnreachable()):e.compileExpression(s[0],e.options.isWasm64?a.Type.isize64:a.Type.isize32,2);case"u8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u8,g.createUnreachable()):e.compileExpression(s[0],a.Type.u8,2);case"u16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u16,g.createUnreachable()):e.compileExpression(s[0],a.Type.u16,2);case"u32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u32,g.createUnreachable()):e.compileExpression(s[0],a.Type.u32,2);case"u64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u64,g.createUnreachable()):e.compileExpression(s[0],a.Type.u64,2);case"usize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=e.options.usizeType,g.createUnreachable()):e.compileExpression(s[0],e.options.usizeType,2);case"bool":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.bool,g.createUnreachable()):e.compileExpression(s[0],a.Type.bool,2);case"f32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.f32,g.createUnreachable()):e.compileExpression(s[0],a.Type.f32,2);case"f64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.f64,g.createUnreachable()):e.compileExpression(s[0],a.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,l.range),g.createUnreachable()},t.compileAllocate=function(e,t,r){var n=t.program,a=n.elements.get(e.options.allocateImpl);if(a)if(a.kind==s.ElementKind.FUNCTION_PROTOTYPE){var o=a.resolve();if(o)if(!o.is(s.ElementFlags.GENERIC)&&o.returnType==e.options.usizeType&&o.parameters&&1==o.parameters.length&&o.parameters[0].type==e.options.usizeType){if(e.compileFunction(o))return e.makeCall(o,[e.options.isWasm64?e.module.createI64(t.currentMemoryOffset):e.module.createI32(t.currentMemoryOffset)])}else n.error(i.DiagnosticCode.Implementation_0_must_match_the_signature_1,r.range,e.options.allocateImpl,"(size: usize): usize")}else n.error(i.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,a.internalName);else n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,e.options.allocateImpl);return e.module.createUnreachable()},t.compileAbort=p},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(17);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(1).Module;i.prototype.toText=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrint(this.ref),t.print=e,r},i.prototype.toAsmjs=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrintAsmjs(this.ref),t.print=e,r}}).call(this,r(7))},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function r(){Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function n(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}Object.defineProperties(t.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(t.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(t.i32=t.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(t.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(t.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(t.u32=t.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(t.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(t.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),t.clz=Math.clz32,t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return(t=(e=t|r)>>16&65535)|(r=(65535&e)<<16)},t.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},r.prototype=Object.create(Error.prototype),r.prototype.name="UnreachableError",r.prototype.message="unreachable",t.unreachable=function(){throw new r},n.prototype=Object.create(Error.prototype),n.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new n(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)}}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(19),r(18),r(15)},function(e,t,r){r(20),e.exports=r(13)}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index 8391a803..2eb25105 100644 --- a/dist/assemblyscript.js.map +++ b/dist/assemblyscript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///assemblyscript.js","webpack:///webpack/bootstrap 2814b8b5f549cb891410","webpack:///./src/module.ts","webpack:///./src/diagnostics.ts","webpack:///./src/program.ts","webpack:///(webpack)/buildin/global.js","webpack:///./src/compiler.ts","webpack:///./src/types.ts","webpack:///./src/ast.ts","webpack:///./src/tokenizer.ts","webpack:///./src/diagnosticMessages.generated.ts","webpack:///./src/util/charcode.ts","webpack:///./src/util/path.ts","webpack:///./src/glue/js/index.ts","webpack:///./std/portable.js","webpack:///./src/glue/js/binaryen.js","webpack:///external \"binaryen\"","webpack:///./src/builtins.ts","webpack:///./src/glue/js/i64.js","webpack:///./node_modules/long/src/long.js","webpack:///./src/index.ts","webpack:///./src/decompiler.ts","webpack:///./src/parser.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE_15__","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","allocU8Array","u8s","ptr","allocate_memory","length","idx","k","store","allocI32Array","i32s","val","stringLengthUTF8","str","len","u","charCodeAt","allocString","readInt","load","readBuffer","ret","Uint8Array","readString","cp","u1","u2","u3","u4","u5","arr","Array","push","String","fromCodePoints","value","NativeType","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","ExpressionId","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","create","buffer","offset","segment","Module","ref","_BinaryenModuleCreate","out","createFrom","cArr","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","paramTypes","cStr","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","createI32","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","expr","_BinaryenUnary","createBinary","left","right","_BinaryenBinary","createHost","operands","_BinaryenHost","createGetLocal","index","type","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","label","children","None","_BinaryenBlock","createBreak","condition","_BinaryenBreak","createDrop","expression","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","strs","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","initializer","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addFunctionExport","internalName","externalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","binaryBytes","Binary","output","sourceMap","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","relooper","_RelooperCreate","createStub","addBlock","code","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","diagnosticCategoryToString","category","DiagnosticCategory","INFO","WARNING","ERROR","diagnosticCategoryToColor","colorBlue","colorYellow","colorRed","formatDiagnosticMessage","message","useColors","showContext","context","range","formatDiagnosticContext","sb","colorReset","toString","source","normalizedPath","line","column","join","text","start","end","charcode_1","isLineBreak","substring","diagnosticMessages_generated_1","diagnosticMessages_generated_2","DiagnosticCode","diagnosticCodeToString","DiagnosticMessage","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","DiagnosticEmitter","diagnostics","emitDiagnostic","error","info","warning","__extends","extendStatics","setPrototypeOf","__proto__","b","__","constructor","__values","Symbol","iterator","next","done","__read","r","e","ar","diagnostics_1","types_1","ast_1","module_1","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","QueuedExport","QueuedImport","noTypesYet","Map","Program","_super","_this","diagnosticsOffset","elements","types","typeAliases","sources","initialize","options","Type","i8","i16","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","queuedExports","queuedImports","queuedDerivedClasses","statements","j","statement","kind","NodeKind","CLASSDECLARATION","initializeClass","ENUMDECLARATION","initializeEnum","EXPORT","initializeExports","FUNCTIONDECLARATION","initializeFunction","IMPORT","initializeImports","INTERFACEDECLARATION","initializeInterface","NAMESPACEDECLARATION","initializeNamespace","TYPEDECLARATION","initializeTypeAlias","VARIABLE","initializeVariables","element","queuedImport","tryResolveImport","referencedName","set","splice","referencedNameAlt","Module_0_has_no_exported_member_1","declaration","parent","path","queuedExports_1","queuedExports_1_1","_a","queuedExport","currentExport","isReExport","member","setExportAndCheckLibrary","Cannot_find_name_0","e_1_1","e_1","_b","return","derivedDeclaration","derivedType","assert","extendsType","resolved","resolveIdentifier","ElementKind","CLASS_PROTOTYPE","A_class_may_only_extend_another_class","basePrototype","checkInternalDecorators","isBuiltin","hasDecorator","decorators","ElementFlags","BUILTIN","isLibrary","is","EXPORTED","SOURCE","GLOBAL","has","Duplicate_identifier_0","namespace","fileLevelInternalName","ClassPrototype","isUnmanaged","implementsTypes","Structs_cannot_implement_interfaces","Range","members","Export_declaration_conflicts_with_exported_declaration_of_0","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isGetter","hasModifier","ModifierKind","GET","modifiers","SET","initializeAccessor","initializeMethod","programLevelInternalName","instance","resolve","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperators","decorator","decoratorKind","Operation_not_supported","numArgs","arguments","firstArg","LITERAL","literalKind","fnIndexedGet","simpleName","fnIndexedSet","fnConcat","fnEquals","String_literal_expected","Expected_0_arguments_but_got_1","propertyName","internalPropertyName","propertyElement","PROPERTY","getterPrototype","setterPrototype","Property","staticName","staticPrototype","instanceName","instancePrototype","enm","Enum","values","initializeEnumValue","EnumValue","initializeExport","internalPath","identifier","referencedElement","seen","Set","add","declarations","initializeImport","namespaceName","indexPart","endsWith","InterfacePrototype","queuedExtendingClasses","parentNamespace","Namespace","alias","global","resolveType","node","contextualTypeArguments","reportNotFound","localName","resolveInclTypeArguments","typeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeParameters","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","resolvedElement","ResolvedElement","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","resolveExpression","targetType","LOCAL","FIELD","classType","Property_0_does_not_exist_on_type_1","CLASS","withTarget","base","resolveElementAccess","elementAccess","indexedGet","indexedGetName","FUNCTION_PROTOTYPE","Index_signature_is_missing_in_type_0","PARENTHESIZED","ASSERTION","toType","BINARY","THIS","instanceMethodOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","Element","program","flags","NONE","flag","NAMESPACE","modifierKind","IMPORTED","DECLARE","DECLARED","ENUM","CONST","CONSTANT","constantValue","enum","ConstantValueKind","VariableLikeElement","apply","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","INLINED","withConstantFloatValue","constantFloatValue","LET","SCOPED","READONLY","PUBLIC","PRIVATE","PROTECTED","Parameter","Local","instances","classTypeArguments","GETTER","SETTER","ABSTRACT","isGeneric","GENERIC","INSTANCE","functionTypeArguments","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","e_2_1","e_2","classDeclaration","classTypeParameters","functionTypeParameters","parameters","typeNode","parameterTypes","parameterDeclaration","parameterType","classInstance","Function","reportNode","resolvedTypeArguments","resolvePartial","partialPrototype","FUNCTION","locals","additionalLocals","breakContext","debugLocations","functionTableIndex","nextBreakId","breakStack","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","_c","e_3_1","e_3","_d","parameter","parameterName","Flow","addLocal","local","getTempLocal","temps","toNativeType","pop","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","debugInfoIndex","isAssignableTo","toTypeString","FIELD_PROTOTYPE","Field","memoryOffset","UNMANAGED","inheritedTypeArguments_2","inheritedTypeArguments_2_1","e_4_1","e_4","baseClass","baseClassType","Structs_cannot_extend_classes_and_vice_versa","Class","currentMemoryOffset","inheritedMember","e_5_1","e_5","_e","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","methodPrototype","instanceProperty","e_6_1","e_6","_h","asClass","baseName","baseType","e_7_1","e_7","current","INTERFACE_PROTOTYPE","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","enterBranchOrScope","branchFlow","leaveBranchOrScope","scopedLocal","e_8_1","e_8","addScopedLocal","g","eval","window","makeSmallIntegerWrap","ShrI32","ShlI32","AndI32","makeIsFalseish","EqzI32","EqzI64","size","EqF32","EqF64","makeIsTrueish","NeI64","NeF32","NeF64","builtins_1","program_1","tokenizer_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","memoryBase","allocateImpl","freeImpl","usize64","usize32","isize64","isize32","ConversionKind","Compiler","startFunctionBody","currentEnum","currentType","memorySegments","stringSegments","functionTable","files","max","compile","startFunctionPrototype","startFunctionInstance","START","startFunction","isEntry","compileSource","typeRef","typesToNativeTypes","i64_align","isWasm64","pages","i64_shr_u","entries","compileSourceByPath","normalizedPathWithoutExtension","File_0_not_found","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","COMPILED","initExpr","resolvedType","Type_0_is_not_assignable_to_type_1","Type_expected","compileExpression","nativeType","initializeInStart","compileInlineConstant","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","toNativeZero","setExpr","exprType","isTopLevel","isTopLevelExport","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","stmt","allBranchesReturn","A_function_whose_declared_type_is_not_void_must_return_a_value","numParameters","numParametersInclThis","paramIndex","nativeResultType","nativeParamTypes","signatureNameParts","toSignatureString","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","needsExplicitExport","globalDeclaration","compileClass","addMemorySegment","alignment","i64_add","addFunctionTableEntry","BLOCK","compileBlockStatement","BREAK","compileBreakStatement","CONTINUE","compileContinueStatement","DO","compileDoStatement","EMPTY","compileEmptyStatement","EXPRESSION","compileExpressionStatement","FOR","compileForStatement","IF","compileIfStatement","RETURN","compileReturnStatement","SWITCH","compileSwitchStatement","THROW","compileThrowStatement","TRY","compileTryStatement","WHILE","compileWhileStatement","addDebugLocation","compileStatements","stmts","stmtReturns","A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement","A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement","previousBreakLabel","previousContinueLabel","incrementor","alwaysReturns","ifTrueReturns","ifFalseReturns","tempLocal","cases","breaks","breakIndex","defaultIndex","case_","EqI32","currentBlock","fallsThrough","nextLabel","isKnownGlobal","initializers","init","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","shift","computeSmallIntegerShift","mask","computeSmallIntegerMask","conversionKind","wrapSmallIntegers","compileAssertionExpression","compileBinaryExpression","compileCallExpression","COMMA","compileCommaExpression","compileElementAccessExpression","FUNCTIONARROW","compileFunctionExpression","FALSE","NULL","TRUE","compileIdentifierExpression","compileLiteralExpression","NEW","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","TERNARY","compileTernaryExpression","UNARYPOSTFIX","compileUnaryPostfixExpression","UNARYPREFIX","compileUnaryPrefixExpression","convertExpression","precomputeExpression","funcRef","_BinaryenFunctionGetBody","fromType","Conversion_from_type_0_to_1_requires_an_explicit_cast","mod","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","computeCommonType","leftType","rightType","compound","possiblyOverflows","operator","Token","LESSTHAN","LtI32","LtI64","LtU32","LtU64","LtF32","LtF64","GREATERTHAN","GtI32","GtI64","GtU32","GtU64","GtF32","GtF64","LESSTHAN_EQUALS","LeI32","LeI64","LeU32","LeU64","LeF32","LeF64","GREATERTHAN_EQUALS","GeI32","GeI64","GeU32","GeU64","GeF32","GeF64","EQUALS_EQUALS_EQUALS","EQUALS_EQUALS","EqI64","EXCLAMATION_EQUALS_EQUALS","EXCLAMATION_EQUALS","NeI32","EQUALS","compileAssignment","PLUS_EQUALS","PLUS","AddI64","AddF32","AddF64","MINUS_EQUALS","MINUS","SubI32","SubI64","SubF32","SubF64","ASTERISK_EQUALS","ASTERISK","MulI32","MulI64","MulF32","MulF64","SLASH_EQUALS","SLASH","DivI32","DivI64","DivU32","DivU64","DivF32","DivF64","PERCENT_EQUALS","PERCENT","RemI32","RemI64","RemU32","RemU64","LESSTHAN_LESSTHAN_EQUALS","LESSTHAN_LESSTHAN","ShlI64","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN","ShrI64","ShrU32","ShrU64","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND_EQUALS","AMPERSAND","AndI64","BAR_EQUALS","BAR","OrI32","OrI64","CARET_EQUALS","CARET","XorI32","XorI64","AMPERSAND_AMPERSAND","BAR_BAR","valueExpression","elementType","setterInstance","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","resolvedIndexedSet","valueWithCorrectType","tee","targetExpr","globalNativeType","isReadonly","elementNativeType","makeCall","getterInstance","resolvedIndexedGet","indexedSet","indexedSetName","elementExpr","elementExpression","Index_signature_in_type_0_only_permits_reading","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","functionPrototype","compileCall","numArguments","numArgumentsInclThis","argumentIndex","args","argumentExpressions","thisArg","operandIndex","Expected_at_least_0_arguments_but_got_1","expressions","exprs","asFunction","compileGetConstant","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileStaticArray","elementExpressions","floatValue","intValue","i64_sub","i64_is_i8","i64_is_i16","i64_is_i32","i64_is_u8","i64_is_u16","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStaticString","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","isStatic","Int32Array","Float32Array","Float64Array","thisExpr","compileAllocate","field","nativeSizeType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","ifThen","ifElse","nativeOne","getValue","operand","PLUS_PLUS","isReference","toNativeOne","MINUS_MINUS","setValue","NegF32","NegF64","EXCLAMATION","TILDE","toNativeNegOne","TYPEOF","TypeKind","TypeFlags","nullableType","ceil","nonNullableType","asNullable","currentClass","targetClass","targetFunction","kindOnly","setReusableModifiers","reusableModifiers","createModifiers","addModifier","modifier","getModifier","getFirstDecorator","mangleInternalName","asGlobal","VARIABLEDECLARATION","mangleInternalPath","setParent","nodes","setParentOpt","path_1","Node","createType","isNullable","TypeNode","createIdentifierExpression","IdentifierExpression","createArrayLiteralExpression","ArrayLiteralExpression","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","isArrow","FunctionArrowExpression","FunctionExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDecorator","Decorator","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalize","startsWith","createExportImportStatement","ExportImportStatement","createExportMember","elem","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","ForStatement","createTypeParameter","TypeParameter","createParameter","parameterKind","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createModifier","Modifier","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createWhileStatement","WhileStatement","TYPE","TYPEPARAMETER","Expression","LiteralKind","LiteralExpression","AssertionKind","UnaryExpression","Statement","SourceKind","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","VariableLikeDeclarationStatement","DecoratorKind","DECORATOR","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","IMPORTDECLARATION","ParameterKind","PARAMETER","MODIFIER","SWITCHCASE","fromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","INSTANCEOF","IS","KEYOF","MODULE","OF","PACKAGE","VAR","VOID","WITH","YIELD","INVALID","isAlsoIdentifier","token","operatorToString","DOT_DOT_DOT","ASTERISK_ASTERISK","ASTERISK_ASTERISK_EQUALS","a","pos","Tokenizer","tokenPos","markedPos","markedToken","markedTokenPos","nextToken","nextTokenOnNewLine","preferIdentifier","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordText","keywordToken","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skip","mark","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","i64_mul","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","parseFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","isUnicodeIdentifierStart","isUnicodeIdentifierPart","lookupInUnicodeMap","map","mid","unicodeIdentifierStart","unicodeIdentifierPart","CharCode","separator","ipos","origin","dirname","UnreachableError","captureStackTrace","stack","AssertionError","globalScope","defineProperties","MIN_VALUE","writable","Math","fround","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","EPSILON","clz32","abs","min","floor","sqrt","trunc","isTrueish","radix","parseInt","undefined","fromCodePoint","binaryen","Binaryen","key","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","compiler","NaN","Infinity","tempLocal0","tempLocal1","AbsF32","AbsF64","ClzI32","ClzI64","CtzI32","CtzI64","PopcntI32","PopcntI64","RotlI32","RotlI64","RotrI32","RotrI64","MaxF32","MaxF64","MinF32","MinF64","CeilF32","CeilF64","FloorF32","FloorF64","CopysignF32","CopysignF64","NearestF32","NearestF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","SqrtF32","SqrtF64","TruncF32","TruncF64","evaluateConstantOffset","Type_0_is_not_generic","CurrentMemory","GrowMemory","abort","compileAbort","cls","Implementation_0_must_match_the_signature_1","abortPrototype","abortInstance","Long","fromBits","low","high","sub","mul","i64_div","div","i64_div_u","toUnsigned","toSigned","i64_rem","i64_rem_u","i64_and","and","i64_or","or","i64_xor","xor","i64_shl","shl","i64_shr","shr","shru","i64_not","not","fromInt","minSafeF32","fromNumber","maxSafeF32","gte","lte","minSafeF64","maxSafeF64","toNumber","i64_to_string","unsigned","isLong","obj","cachedObj","cache","UINT_CACHE","INT_CACHE","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","fromString","RangeError","indexOf","radixToPower","pow_dbl","power","fromValue","wasm","WebAssembly","Instance","__isLong__","pow","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","isZero","isNegative","eq","radixLong","rem1","rem","remDiv","intval","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","other","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","le","greaterThan","gt","greaterThanOrEqual","ge","compare","thisNeg","otherNeg","negate","addend","a48","a32","a16","a00","b48","b32","b16","b00","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","divide","divisor","div_u","div_s","approx","res","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","parseFile","parser","parser_1","Parser","nextFile","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setNoMemory","setImportMemory","setSourceMap","setMemoryBase","decompile","decompiler","decompiler_1","Decompiler","formatDiagnostic","nativeTypeToType","Unreachable","Auto","functionId","decompileFunction","_BinaryenFunctionGetName","_BinaryenFunctionGetNumParams","_BinaryenFunctionGetParam","_BinaryenFunctionGetResult","Block","decompileExpression","nested","string","_BinaryenBlockGetName","_BinaryenBlockGetNumChildren","_BinaryenBlockGetChild","If","_BinaryenIfGetCondition","_BinaryenIfGetIfTrue","_BinaryenIfGetIfFalse","Loop","_BinaryenLoopGetName","_BinaryenLoopGetBody","Break","_BinaryenBreakGetCondition","_BinaryenBreakGetName","Switch","Call","CallImport","CallIndirect","SetLocal","_BinaryenSetLocalGetIndex","_BinaryenSetLocalGetValue","SetGlobal","Store","_BinaryenStoreGetOffset","_BinaryenStoreGetPtr","_BinaryenStoreGetValue","Select","_BinaryenSelectGetIfTrue","_BinaryenSelectGetIfFalse","_BinaryenSelectGetCondition","Drop","_BinaryenDropGetValue","Return","_BinaryenReturnGetValue","Host","_BinaryenHostGetOp","_BinaryenHostGetOperand","Nop","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","determinePrecedenceStart","determinePrecedence","isRightAssociative","backlog","seenlog","tn","parseTopLevelStatement","isNamespaceMember","parseDecorator","Line_break_not_permitted_here","parseEnum","parseVariable","parseFunction","parseClass","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","parseStatement","Decorators_are_not_valid_here","clear","parseType","acceptParenthesized","suppressErrors","startPos","innerType","Identifier_expected","nullable","bracketStart","bracketRange","parseArguments","isDeclare","parseVariableDeclaration","parentModifiers","parentDecorators","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","Type_parameter_list_cannot_be_empty","typeParameter","parseTypeParameter","parseParameters","seenRest","seenOptional","reportedRest","param","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","OPTIONAL","REST","isRest","isOptional","startRange","A_rest_parameter_cannot_be_optional","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","parseFunctionExpressionCommon","parseClassMember","parentIsDeclare","isConstructor","Type_parameters_cannot_appear_on_a_constructor_declaration","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseExpressionStatement","elseStatement","parseSwitchCase","_case_or_default_expected","parseExpressionStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","precedence","nextPrecedence","commaExprs","propertyCall","Precedence"],"mappings":"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3X,KAAK63C,cAId/xB,EAAAtkB,UAAAg5B,eAAA,SAAe9kB,GACb,GAAIuiC,GACAC,EACA/a,EACAgb,CACJ,IAAIn4C,KAAKi3C,aACP,GAAIvhC,EAAOuhC,YACT,GAAIgB,EAAej4C,KAAK4yB,WACtB,GAAIslB,EAAcxiC,EAAOkd,UACvB,MAAOqlB,GAAazd,eAAe0d,OAEhC,KAAI/a,EAAkBn9B,KAAK2X,gBAC5BwgC,EAAiBziC,EAAOiC,cAC1B,MAAOwlB,GAAgB3C,eAAe2d,OAIvC,KAAKziC,EAAOuhC,YACjB,OAAQj3C,KAAKknB,MAEX,OACE,OAAQxR,EAAOwR,MACb,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACE,OAAO,EAEX,KAEF,QACE,OAAQxR,EAAOwR,MACb,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACE,OAAO,EAEX,KAEF,QACE,OAAQxR,EAAOwR,MACb,OACA,OACA,OACA,OACA,OACA,OACA,QACE,OAAO,EAEX,KAEF,QACE,OAAQxR,EAAOwR,MACb,OACA,OACE,OAAO,CACT,QACA,OACE,MAAsB,KAAfxR,EAAO8oB,KAElB,KAEF,QACE,OAAQ9oB,EAAOwR,MACb,OACA,OACE,MAAoB,KAAblnB,KAAKw+B,IACd,QACA,OACA,OACA,OACE,OAAO,CACT,SACE,MAAsB,KAAf9oB,EAAO8oB,KAElB,KAEF,QACE,OAAQ9oB,EAAOwR,MACb,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACE,OAAO,EAEX,KAEF,QACE,OAAQxR,EAAOwR,MACb,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACE,OAAO,EAEX,KAEF,QACE,OAAQxR,EAAOwR,MACb,OACA,OACA,OACA,OACA,QACE,OAAO,EAEX,KAEF,QACE,OAAQxR,EAAOwR,MACb,OACE,OAAO,CACT,QACE,MAAsB,KAAfxR,EAAO8oB,KAElB,KAEF,QACE,OAAQ9oB,EAAOwR,MACb,OACE,MAAoB,KAAblnB,KAAKw+B,IACd,QACA,OACE,OAAO,CACT,SACE,MAAsB,KAAf9oB,EAAO8oB,KAElB,KAEF,SACE,OAAQ9oB,EAAOwR,MACb,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACE,OAAO,EAEX,KAEF,SACE,OAAQxR,EAAOwR,MACb,QACA,QACE,OAAO,EAEX,KAEF,SACE,MAAkB,KAAXxR,EAAOwR,KAGpB,OAAO,GAITpB,EAAAtkB,UAAA6f,SAAA,SAAS+2B,GACP,WADO,KAAAA,OAAA,GACCp4C,KAAKknB,MACX,OAAkB,MAAO,IACzB,QAAmB,MAAO,KAC1B,QAAmB,MAAO,KAC1B,QAAmB,MAAO,KAC1B,QAAqB,MAAO,OAC5B,QAAkB,MAAO,IACzB,QAAmB,MAAO,KAC1B,QAAmB,MAAO,KAC1B,QAAmB,MAAO,KAC1B,QACE,MAAIkxB,GAAiB,QACdp4C,KAAK4yB,UACR5yB,KAAK4yB,UAAUvR,WACfrhB,KAAK2X,aACH3X,KAAK2X,aAAa8iB,eAClB,OACR,SAAoB,MAAO,MAC3B,SAAmB,MAAO,KAC1B,SAAmB,MAAO,KAC1B,SAAoB,MAAO,MAC3B,SAAwB,MAAfzQ,SAAO,GAAe,KAOnClE,EAAAtkB,UAAAq4B,aAAA,WACE,OAAQ75B,KAAKknB,MAEX,QACE,MAAO3C,GAAAxgB,WAAW2Y,GAEpB,QACA,OACE,MAAO6H,GAAAxgB,WAAW6Y,GAEpB,QACA,OACE,MAAoB,KAAb5c,KAAKw+B,KAAaja,EAAAxgB,WAAW6Y,IAAM2H,EAAAxgB,WAAW2Y,GAEvD,SACE,MAAO6H,GAAAxgB,WAAWgZ,GAEpB,SACE,MAAOwH,GAAAxgB,WAAWkZ,GAEpB,SACE,MAAOsH,GAAAxgB,WAAWgQ,OAKxB+R,EAAAtkB,UAAAwhC,aAAA,SAAarjC,GACX,OAAQK,KAAKknB,MAEX,QACE8C,QAAO,EAET,SACE,MAAOrqB,GAAOwQ,UAAU,EAE1B,QACA,OACE,GAAiB,IAAbnQ,KAAKw+B,KAAY,MAAO7+B,GAAOwQ,UAAU,EAG/C,QACA,OACE,MAAOxQ,GAAO2Q,UAAU,EAE1B,SACE,MAAO3Q,GAAO+Q,UAAU,EAE1B,SACE,MAAO/Q,GAAOiR,UAAU,KAK9BkV,EAAAtkB,UAAA01C,YAAA,SAAYv3C,GACV,OAAQK,KAAKknB,MAEX,QACE8C,QAAO,EAET,SACE,MAAOrqB,GAAOwQ,UAAU,EAE1B,QACA,OACE,GAAiB,IAAbnQ,KAAKw+B,KAAY,MAAO7+B,GAAOwQ,UAAU,EAG/C,QACA,OACE,MAAOxQ,GAAO2Q,UAAU,EAE1B,SACE,MAAO3Q,GAAO+Q,UAAU,EAE1B,SACE,MAAO/Q,GAAOiR,UAAU,KAK9BkV,EAAAtkB,UAAAi2C,eAAA,SAAe93C,GACb,OAAQK,KAAKknB,MAEX,QACE8C,QAAO,EAET,SACE,MAAOrqB,GAAOwQ,WAAW,EAE3B,QACA,OACE,GAAiB,IAAbnQ,KAAKw+B,KAAY,MAAO7+B,GAAOwQ,WAAW,EAGhD,QACA,OACE,MAAOxQ,GAAO2Q,WAAW,GAAI,EAE/B,SACE,MAAO3Q,GAAO+Q,WAAW,EAE3B,SACE,MAAO/Q,GAAOiR,WAAW,KAK/BkV,EAAAtkB,UAAAgjC,kBAAA,WACE,OAAQxkC,KAAKknB,MAEX,QACE,MAAO,GAET,QACA,OACE,MAAO,GAET,QACA,OACE,MAAoB,KAAblnB,KAAKw+B,KAAa,IAAM,GAEjC,SACE,MAAO,GAET,SACE,MAAO,GAET,SACE,MAAO,MAOG1Y,EAAAC,GAAY,GAAID,GAAI,EAClC,IAGmB,GAILA,EAAAE,IAAY,GAAIF,GAAI,EAClC,IAGkB,IAIJA,EAAA3J,IAAY,GAAI2J,GAAI,EAClC,IAEkB,IAIJA,EAAAG,IAAY,GAAIH,GAAI,EAClC,IAGkB,IAIJA,EAAAga,QAAgB,GAAIha,GAAI,EACtC,IAGkB,IAIJA,EAAA+Z,QAAgB,GAAI/Z,GAAI,EACtC,IAIkB,IAIJA,EAAAK,GAAW,GAAIL,GAAI,EACjC,IAGmB,GAILA,EAAAM,IAAY,GAAIN,GAAI,EAClC,IAGkB,IAIJA,EAAAO,IAAY,GAAIP,GAAI,EAClC,IAEkB,IAIJA,EAAAQ,IAAY,GAAIR,GAAI,EAClC,IAGkB,IAIJA,EAAA8Z,QAAgB,GAAI9Z,GAAI,EACtC,IAGkB,IAIJA,EAAA6Z,QAAgB,GAAI7Z,GAAI,EACtC,IAIkB,IAIJA,EAAAU,KAAa,GAAIV,GAAI,GACnC,IAGmB,GAILA,EAAAW,IAAY,GAAIX,GAAI,GAClC,IAEkB,IAIJA,EAAAY,IAAY,GAAIZ,GAAI,GAClC,IAGkB,IAIJA,EAAAa,KAAa,GAAIb,GAAI,KAAgC,GACvEA,IA1iBapmB,GAAAomB,OA6iBbpmB,EAAAuhC,qBAUAvhC,EAAA0xB,iBPipOM,SAAUzxB,EAAQD,EAASS,GAEjC,YQtnMA,SAAAk4C,GAAqC9rB,GACnC+rB,GAAoB/rB,EAItB,QAAAgsB,KACE,GAAIv1C,EAQJ,OAPyB,OAArBs1C,IACFt1C,EAAMs1C,GACNA,GAAoB,MAEpBt1C,KAEFA,EAAIhB,OAAS,EACNgB,EAMT,QAAAw1C,GAA4BC,EAAoBlsB,GAG9C,MAFiB,OAAbA,IAAmBA,EAAYgsB,KACnChsB,EAAU5oB,KAAK80C,GACRlsB,EAIT,QAAAmsB,GAA4BxxB,EAAoBqF,GAC9C,GAAIA,EACF,IAAK,GAAIjsB,GAAI,EAAG4B,EAAIqqB,EAAUvqB,OAAQ1B,EAAI4B,IAAK5B,EAC7C,GAAIisB,EAAUjsB,GAAGo0B,cAAgBxN,EAC/B,MAAOqF,GAAUjsB,EAIvB,OAAO,MAIT,QAAA8rB,GAA4BlF,EAAoBqF,GAC9C,MAAuC,OAAhCmsB,EAAYxxB,EAAMqF,GAI3B,QAAAosB,GAAkC/3C,EAAc+pB,GAC9C,GAAIA,EACF,IAAK,GAAIrqB,GAAI,EAAG4B,EAAIyoB,EAAW3oB,OAAQ1B,EAAI4B,IAAK5B,EAAG,CACjD,GAAIotB,GAAY/C,EAAWrqB,GACvB+T,EAAaqZ,EAAU9sB,IAC3B,IAAIyT,EAAW6S,MAAQC,EAAS6M,YAAqC3f,EAAYsN,MAAQ/gB,EACvF,MAAO8sB,GAIb,MAAO,MAIT,QAAAhD,GAA6B9pB,EAAc+pB,GACzC,MAA8C,OAAvCguB,EAAkB/3C,EAAM+pB,GAIjC,QAAAiuB,GAAmC9vB,EAAmC+vB,OAAA,KAAAA,OAAA,EACpE,IAAIj4C,GAAOkoB,EAAYloB,KAAK+gB,KACxBoH,EAASD,EAAYC,MACzB,OAAKA,KAEHD,EAAY5B,MAAQC,EAAS2xB,qBAC7B/vB,EAAO7B,MAAQC,EAASiB,WAElBW,EAASA,EAAOA,SAEpBA,EAAO7B,MAAQC,EAASC,iBACnBwxB,EAAqC7vB,EAAQ8vB,IAClDzsB,EAAYC,EAAaU,OAAQjE,EAAYyD,WACzCyS,EAAAna,iBACAma,EAAApa,oBACFhkB,EAGJmoB,EAAO7B,MAAQC,EAASa,sBACxBe,EAAO7B,MAAQC,EAASG,gBAEjBsxB,EAAyC7vB,EAAQ8vB,GACjD7Z,EAAAna,iBAAmBjkB,EAErBi4C,EACHj4C,EACAkoB,EAAY7H,MAAMK,OAAOoO,aAAesP,EAAAxa,eAAiB5jB,EAvBzCA,EA2BtB,QAAAm4C,GAAmC/vB,GAEjC,MADIA,GAAKoH,SAAS,SAAQpH,EAAOA,EAAKhH,UAAU,EAAGgH,EAAKhnB,OAAS,IAC1DgnB,EAKT,QAAAgwB,GAAmBC,EAAelwB,GAChC,IAAK,GAAIzoB,GAAI,EAAG4B,EAAI+2C,EAAMj3C,OAAQ1B,EAAI4B,IAAK5B,EACzC24C,EAAM34C,GAAGyoB,OAASA,EAItB,QAAAmwB,GAAsBD,EAAwBlwB,GAC5C,IAAK,GAAIzoB,GAAI,EAAG4B,EAAI+2C,EAAMj3C,OAAQ1B,EAAI4B,IAAK5B,EAAG,CAC5C,GAAIswB,GAAOqoB,EAAM34C,EACbswB,KAAMA,EAAK7H,OAASA,IR2gM5B,GAAI3F,GAAapjB,MAAQA,KAAKojB,WAAc,WACxC,GAAIC,GAAgBtiB,OAAOuiB,iBACpBC,uBAA2B7f,QAAS,SAAU/C,EAAG6iB,GAAK7iB,EAAE4iB,UAAYC,IACvE,SAAU7iB,EAAG6iB,GAAK,IAAK,GAAI9hB,KAAK8hB,GAAOA,EAAE/hB,eAAeC,KAAIf,EAAEe,GAAK8hB,EAAE9hB,IACzE,OAAO,UAAUf,EAAG6iB,GAEhB,QAASC,KAAOzjB,KAAK0jB,YAAc/iB,EADnC0iB,EAAc1iB,EAAG6iB,GAEjB7iB,EAAEa,UAAkB,OAANgiB,EAAaziB,OAAOgO,OAAOyU,IAAMC,EAAGjiB,UAAYgiB,EAAEhiB,UAAW,GAAIiiB,OAGvF1iB,QAAOC,eAAetB,EAAS,cAAgBoE,OAAO,GQrxPtD,IAAAk7B,GAAA7+B,EAAA,GAMA8+B,EAAA9+B,EAAA,EAWST,GAAAktC,MAVP3N,EAAA2N,MAUcltC,EAAAisB,MARdsT,EAAAtT,KAGF,IAQYxE,GARZgyB,EAAAh5C,EAAA,KAQA,SAAYgnB,GAEVA,IAAA,mBAGAA,IAAA,eACAA,IAAA,iCAGAA,IAAA,2BACAA,IAAA,yBACAA,IAAA,mBACAA,IAAA,eACAA,IAAA,iBACAA,IAAA,iCACAA,IAAA,iBACAA,IAAA,wBACAA,IAAA,kCACAA,IAAA,sBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,kCACAA,IAAA,oCACAA,IAAA,sBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,gBACAA,IAAA,8BACAA,IAAA,gCACAA,IAAA,8BAGAA,IAAA,kBACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,YACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,gCACAA,IAAA,4BACAA,IAAA,cACAA,IAAA,YACAA,IAAA,oBACAA,IAAA,oBACAA,IAAA,oBACAA,IAAA,kBACAA,IAAA,cACAA,IAAA,wBACAA,IAAA,kBAGAA,IAAA,wCACAA,IAAA,sCACAA,IAAA,gDACAA,IAAA,wCACAA,IAAA,8CACAA,IAAA,0CACAA,IAAA,gDACAA,IAAA,0CACAA,IAAA,gDACAA,IAAA,sCACAA,IAAA,8CAGAA,IAAA,0BACAA,IAAA,gCACAA,IAAA,wBACAA,IAAA,0BACAA,IAAA,6BApEUA,EAAAznB,EAAAynB,WAAAznB,EAAAynB,aAwEZ,IAAAiyB,GAAA,mBAAAA,KAOEp5C,KAAA+oB,OAAsB,KA2yBxB,MAvyBSqwB,GAAAC,WAAP,SACE1pB,EACAsB,EACAqoB,EACAr4B,GAEA,GAAItP,GAAO,GAAI4nC,EAKf,OAJA5nC,GAAKsP,MAAQA,EACbtP,EAAK/Q,KAAO+uB,EACZhe,EAAKsf,cAAgBA,EACrBtf,EAAK2nC,WAAaA,EACX3nC,GAKFynC,EAAAI,2BAAP,SACE54C,EACAqgB,GAEA,GAAIjQ,GAAO,GAAIyoC,EAGf,OAFAzoC,GAAKiQ,MAAQA,EACbjQ,EAAK2Q,KAAO/gB,EACLoQ,GAGFooC,EAAAM,6BAAP,SACEl0B,EACAvE,GAEA,GAAIjQ,GAAO,GAAI2oC,EAGf,OAFA3oC,GAAKiQ,MAAQA,EACbjQ,EAAK4jC,mBAAqBpvB,EAAU0zB,EAAa1zB,EAAUxU,GACpDA,GAGFooC,EAAAQ,0BAAP,SACEC,EACAxlC,EACAof,EACAxS,GAEA,GAAIjQ,GAAO,GAAI8oC,EAKf,OAJA9oC,GAAKiQ,MAAQA,EACbjQ,EAAK6oC,cAAgBA,EACrB7oC,EAAKqD,WAAaA,EAAYA,EAAW0U,OAAS/X,EAClDA,EAAKyiB,OAASA,EAAQA,EAAO1K,OAAS/X,EAC/BA,GAGFooC,EAAAW,uBAAP,SACEpN,EACAx7B,EACAC,EACA6P,GAEA,GAAIjQ,GAAO,GAAIgpC,EAKf,OAJAhpC,GAAKiQ,MAAQA,EACbjQ,EAAK27B,SAAWA,EAChB37B,EAAKG,KAAOA,EAAMA,EAAK4X,OAAS/X,EAChCA,EAAKI,MAAQA,EAAOA,EAAM2X,OAAS/X,EAC5BA,GAGFooC,EAAAa,qBAAP,SACE5lC,EACA6lC,EACAlG,EACA/yB,GAEA,GAAIjQ,GAAO,GAAImpC,EAKf,OAJAnpC,GAAKiQ,MAAQA,EACbjQ,EAAKqD,WAAaA,EAAYA,EAAW0U,OAAS/X,EAClDA,EAAKigB,cAAgBipB,EAAcA,GAAUlB,EAAUkB,EAAUlpC,GACjEA,EAAK8c,UAAYkmB,EAAMgF,EAAUhF,EAAMhjC,GAChCA,GAGFooC,EAAAgB,sBAAP,SACE/F,EACApzB,GAEA,GAAIjQ,GAAO,GAAIqpC,EAGf,OAFArpC,GAAKiQ,MAAQA,EACbjQ,EAAKqjC,YAAcA,EAAa2E,EAAU3E,EAAarjC,GAChDA,GAGFooC,EAAAkB,4BAAP,SACEr5B,GAEA,GAAIjQ,GAAO,GAAIupC,EAEf,OADAvpC,GAAKiQ,MAAQA,EACNjQ,GAGFooC,EAAAoB,8BAAP,SACEnmC,EACAiU,EACArH,GAEA,GAAIjQ,GAAO,GAAIypC,EAIf,OAHAzpC,GAAKiQ,MAAQA,EACbjQ,EAAKqD,WAAaA,EAAYA,EAAW0U,OAAS/X,EAClDA,EAAKwiC,kBAAoBlrB,EAASA,EAAQS,OAAS/X,EAC5CA,GAGFooC,EAAAsB,sBAAP,SACEz5B,GAEA,GAAIjQ,GAAO,GAAI2pC,EAEf,OADA3pC,GAAKiQ,MAAQA,EACNjQ,GAGFooC,EAAAwB,6BAAP,SACE92C,EACAmd,GAEA,GAAIjQ,GAAO,GAAI6pC,EAGf,OAFA7pC,GAAKiQ,MAAQA,EACbjQ,EAAKlN,MAAQA,EACNkN,GAGFooC,EAAA0B,yBAAP,SACEhyB,EACAiyB,OAAA,KAAAA,OAAA,EAEA,IAAI/pC,GAAO+pC,EACP,GAAIC,GACJ,GAAIC,EAGR,OAFAjqC,GAAKiQ,MAAQ6H,EAAY7H,MACzBjQ,EAAK8X,YAAcA,EACZ9X,GAGFooC,EAAA8B,+BAAP,SACEp3C,EACAmd,GAEA,GAAIjQ,GAAO,GAAImqC,EAGf,OAFAnqC,GAAKiQ,MAAQA,EACbjQ,EAAKlN,MAAQA,EACNkN,GAGFooC,EAAAgC,oBAAP,SACE/mC,EACA6lC,EACAlG,EACA/yB,GAEA,GAAIjQ,GAAO,GAAIqqC,EAKf,OAJArqC,GAAKiQ,MAAQA,EACbjQ,EAAKqD,WAAaA,EAAYA,EAAW0U,OAAS/X,EAClDA,EAAKigB,cAAgBipB,EAAcA,GAAUlB,EAAUkB,EAAUlpC,GACjEA,EAAK8c,UAAYkmB,EAAMgF,EAAUhF,EAAMhjC,GAChCA,GAGFooC,EAAAkC,qBAAP,SACEr6B,GAEA,GAAIjQ,GAAO,GAAIuqC,EAEf,OADAvqC,GAAKiQ,MAAQA,EACNjQ,GAGFooC,EAAAoC,8BAAP,SACEnnC,EACA4M,GAEA,GAAIjQ,GAAO,GAAIyqC,EAGf,OAFAzqC,GAAKiQ,MAAQA,EACbjQ,EAAKqD,WAAaA,EAAYA,EAAW0U,OAAS/X,EAC3CA,GAGFooC,EAAAsC,+BAAP,SACErnC,EACA9S,EACA0f,GAEA,GAAIjQ,GAAO,GAAI2qC,EAIf,OAHA3qC,GAAKiQ,MAAQA,EACbjQ,EAAKqD,WAAaA,EAAYA,EAAW0U,OAAS/X,EAClDA,EAAKzP,SAAWA,EAAUA,EAASwnB,OAAS/X,EACrCA,GAGFooC,EAAAwC,8BAAP,SACEC,EACAvnB,EACArT,GAEA,GAAIjQ,GAAO,GAAI8qC,EAIf,OAHA9qC,GAAKiQ,MAAQA,EACbjQ,EAAK6qC,QAAUA,EACf7qC,EAAK+qC,aAAeznB,EACbtjB,GAGFooC,EAAA4C,wBAAP,SACE9nC,EACAyiC,EACAC,EACA31B,GAEA,GAAIjQ,GAAO,GAAIirC,EAKf,OAJAjrC,GAAKiQ,MAAQA,EACbjQ,EAAKkD,UAAYA,EAAWA,EAAU6U,OAAS/X,EAC/CA,EAAK2lC,OAASA,EAAQA,EAAO5tB,OAAS/X,EACtCA,EAAK4lC,OAASA,EAAQA,EAAO7tB,OAAS/X,EAC/BA,GAGFooC,EAAA8C,8BAAP,SACEp4C,EACAmd,GAEA,GAAIjQ,GAAO,GAAImrC,EAGf,OAFAnrC,GAAKiQ,MAAQA,EACbjQ,EAAKlN,MAAQA,EACNkN,GAGFooC,EAAAgD,sBAAP,SACEn7B,GAEA,GAAIjQ,GAAO,GAAIqrC,EAEf,OADArrC,GAAKiQ,MAAQA,EACNjQ,GAGFooC,EAAAkD,qBAAP,SACEr7B,GAEA,GAAIjQ,GAAO,GAAIurC,EAEf,OADAvrC,GAAKiQ,MAAQA,EACNjQ,GAGFooC,EAAAoD,qBAAP,SACEv7B,GAEA,GAAIjQ,GAAO,GAAIyrC,EAEf,OADAzrC,GAAKiQ,MAAQA,EACNjQ,GAGFooC,EAAAsD,6BAAP,SACE/P,EACAoK,EACA91B,GAEA,GAAIjQ,GAAO,GAAI2rC,EAIf,OAHA3rC,GAAKiQ,MAAQA,EACbjQ,EAAK27B,SAAWA,EAChB37B,EAAK+lC,QAAUA,EAASA,EAAQhuB,OAAS/X,EAClCA,GAGFooC,EAAAwD,4BAAP,SACEjQ,EACAoK,EACA91B,GAEA,GAAIjQ,GAAO,GAAI6rC,EAIf,OAHA7rC,GAAKiQ,MAAQA,EACbjQ,EAAK27B,SAAWA,EAChB37B,EAAK+lC,QAAUA,EAASA,EAAQhuB,OAAS/X,EAClCA,GAKFooC,EAAA0D,qBAAP,SACE/1B,EACA9F,GAEA,GAAI8iB,GAAO,GAAIgZ,GAGf,OAFAhZ,GAAK9iB,MAAQA,EACb8iB,EAAKhd,WAAaA,EAAYiyB,EAAUjyB,EAAYgd,GAC7CA,GAGFqV,EAAA4D,qBAAP,SACEnpC,EACAoN,GAEA,GAAI8iB,GAAO,GAAIkZ,GAGf,OAFAlZ,GAAK9iB,MAAQA,EACb8iB,EAAKlwB,MAAQA,EAAWA,IAAOA,EAAMkV,OAASgb,GACvCA,GAGFqV,EAAA8D,uBAAP,SACEvtB,EACA4B,EACAtH,EACAwB,EACAG,EACAW,EACA5B,EACA1J,GAEA,GAAI8iB,GAAO,GAAIoZ,GASf,OARApZ,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAO+uB,EAAYA,EAAW5G,OAASgb,EAC5CA,EAAKxS,eAAiBA,EAAgBynB,EAAUznB,EAAgBwS,GAChEA,EAAK9Z,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASgb,GACtEA,EAAKtY,gBAAkBA,EAAiButB,EAAUvtB,EAAiBsY,GACnEA,EAAKnY,QAAUA,EAASotB,EAAUptB,EAASmY,GAC3CA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GAChEA,EAAKpZ,WAAaA,EAAgBA,GAAYquB,EAAUruB,EAAYoZ,GAC7DA,GAGFqV,EAAAgE,wBAAP,SACEvpC,EACAoN,GAEA,GAAI8iB,GAAO,GAAIsZ,GAGf,OAFAtZ,GAAK9iB,MAAQA,EACb8iB,EAAKlwB,MAAQA,EAAWA,IAAOA,EAAMkV,OAASgb,GACvCA,GAGFqV,EAAAkE,gBAAP,SACEjpC,EACA2/B,EACA/yB,GAEA,GAAI8iB,GAAO,GAAIwZ,GAIf,IAHAxZ,EAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOyT,EAAYA,EAAW0U,OAASgb,EAC5CA,EAAKjW,UAAYkmB,EAAUA,GAAMgF,EAAUhF,EAAMjQ,GAC7C1vB,EAAW6S,MAAQC,EAAS6M,WAC9B,OAA+B3f,EAAYsN,MACzC,IAAK,SAAUoiB,EAAKpW,cAAa,CAAyB,MAC1D,KAAK,WAAYoW,EAAKpW,cAAa,CAA2B,MAC9D,KAAK,YAAaoW,EAAKpW,cAAa,CAA4B,MAChE,KAAK,SAAUoW,EAAKpW,cAAa,CAAyB,MAC1D,SAASoW,EAAKpW,cAAa,MAG7BoW,GAAKpW,cAAa,CAEpB,OAAOoW,IAGFqV,EAAAoE,kBAAP,SACEv2B,EACA/S,EACA+M,GAEA,GAAI8iB,GAAO,GAAI0Z,GAIf,OAHA1Z,GAAK9iB,MAAQA,EACb8iB,EAAK9c,UAAYA,EAAWA,EAAU8B,OAASgb,EAC/CA,EAAK7vB,UAAYA,EAAWA,EAAU6U,OAASgb,EACxCA,GAGFqV,EAAAsE,qBAAP,SACEz8B,GAEA,GAAI8iB,GAAO,GAAI4Z,GAEf,OADA5Z,GAAK9iB,MAAQA,EACN8iB,GAGFqV,EAAAwE,sBAAP,SACEh9C,EACAgrB,EACAW,EACA5B,EACA1J,GAEA,GAAI8iB,GAAO,GAAI8Z,GAMf,OALA9Z,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAKzU,OAAS1D,EAASotB,EAAUptB,EAASmY,GAC1CA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GAChEA,EAAKpZ,WAAaA,EAAgBA,GAAYquB,EAAUruB,EAAYoZ,GAC7DA,GAGFqV,EAAA0E,2BAAP,SACEl9C,EACAkD,EACAmd,GAEA,GAAI8iB,GAAO,GAAIga,GAIf,OAHAha,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAKjgC,MAAQA,EAAWA,IAAOA,EAAMilB,OAASgb,GACvCA,GAGFqV,EAAA4E,sBAAP,SACEpyB,EACA5C,EACAuD,EACAtL,GAEA,GAAI8iB,GAAO,GAAIka,GAIf,IAHAla,EAAK9iB,MAAQA,EACb8iB,EAAKnY,QAAUA,EAASotB,EAAUptB,EAASmY,GAC3CA,EAAK/a,KAAOA,EACRA,EAAM,CACR,GAAIzH,GAAiB43B,EAAA+E,UAAcl1B,EAAKllB,MACpCklB,GAAKllB,MAAMq6C,WAAW,KACxBpa,EAAKxiB,eAAiB43B,EAAAtsB,QACpBtL,EACAN,EAAMK,OAAOC,gBAGfwiB,EAAKxiB,eAAiBA,EAExBwiB,EAAKrU,aAAeqpB,EAAmBhV,EAAKxiB,oBAE5CwiB,GAAKxiB,eAAiB,KACtBwiB,EAAKrU,aAAe,IAGtB,OADAqU,GAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GACzDA,GAGFqV,EAAAgF,4BAAP,SACEx9C,EACAgW,EACAqK,GAEA,GAAI8iB,GAAO,GAAIsa,GAIf,OAHAta,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAKntB,aAAeA,EAAcA,EAAamS,OAASgb,EACjDA,GAGFqV,EAAAkF,mBAAP,SACE19C,EACAgW,EACAqK,GAEA,GAAIs9B,GAAO,GAAIC,GASf,OARAD,GAAKt9B,MAAQA,EACbs9B,EAAK39C,KAAOA,EAAMA,EAAKmoB,OAASw1B,EAC3B3nC,EAGHA,EAAamS,OAASw1B,EAFtB3nC,EAAehW,EAIjB29C,EAAK3nC,aAAeA,EACb2nC,GAGFnF,EAAAqF,0BAAP,SACEpqC,GAEA,GAAI0vB,GAAO,GAAI2a,GAGf,OAFA3a,GAAK9iB,MAAQ5M,EAAW4M,MACxB8iB,EAAK1vB,WAAaA,EAAYA,EAAW0U,OAASgb,EAC3CA,GAGFqV,EAAAuF,kBAAP,SACEzqC,EACAS,EACAC,EACAqM,GAEA,GAAI8iB,GAAO,GAAI6a,GAKf,OAJA7a,GAAK9iB,MAAQA,EACb8iB,EAAK7vB,UAAYA,EAAWA,EAAU6U,OAASgb,EAC/CA,EAAKpvB,OAASA,EAAQA,EAAOoU,OAASgb,EACtCA,EAAKnvB,QAAUA,EAAaA,IAASA,EAAQmU,OAASgb,GAC/CA,GAGFqV,EAAAyF,sBAAP,SACEC,EACA91B,EACA/H,GAEA,GAAI8iB,GAAO,GAAIgb,GACfhb,GAAK9iB,MAAQA,EACb8iB,EAAK/T,aAAe8uB,EAAWA,GAAO9F,EAAU8F,EAAO/a,GACvDA,EAAK7T,cAAgB,KACrB6T,EAAK/a,KAAOA,CACZ,IAAIzH,GAAiB43B,EAAA+E,UAAcl1B,EAAKllB,MAUxC,OATIklB,GAAKllB,MAAMq6C,WAAW,KACxBpa,EAAKxiB,eAAiB43B,EAAAtsB,QACpBtL,EACAN,EAAMK,OAAOC,gBAGfwiB,EAAKxiB,eAAiBA,EAExBwiB,EAAKrU,aAAeqpB,EAAmBhV,EAAKxiB,gBACrCwiB,GAGFqV,EAAA4F,kCAAP,SACErvB,EACA3G,EACA/H,GAEA,GAAI8iB,GAAO,GAAIgb,GAUf,OATAhb,GAAK9iB,MAAQA,EACb8iB,EAAK/T,aAAe,KACpB+T,EAAK7T,cAAgBP,EACrBoU,EAAK/a,KAAOA,EACZ+a,EAAKxiB,eAAiB43B,EAAAtsB,QACpBssB,EAAA+E,UAAcl1B,EAAKllB,OACnBmd,EAAMK,OAAOC,gBAEfwiB,EAAKrU,aAAeqpB,EAAmBhV,EAAKxiB,gBACrCwiB,GAGFqV,EAAA6F,wBAAP,SACEroC,EACAhW,EACAqgB,GAEA,GAAIs9B,GAAO,GAAIW,GASf,OARAX,GAAKt9B,MAAQA,EACbs9B,EAAK3nC,aAAeA,EAAcA,EAAamS,OAASw1B,EACnD39C,EAGHA,EAAKmoB,OAASw1B,EAFd39C,EAAOgW,EAIT2nC,EAAK39C,KAAOA,EACL29C,GAGFnF,EAAA+F,2BAAP,SACEv+C,EACAqpB,EACA2B,EACAW,EACAtL,GAEA,GAAI8iB,GAAO,GAAIqb,GAMf,OALArb,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAK9Z,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASgb,GACtEA,EAAKnY,QAAUA,EAASotB,EAAUptB,EAASmY,GAC3CA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GACzDA,GAGFqV,EAAAiG,uBAAP,SACEz+C,EACA+Q,EACAwE,EACAoW,EACA5B,EACA1J,GAEA,GAAI8iB,GAAO,GAAIub,GAOf,OANAvb,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAKpyB,KAAOA,EAAUA,IAAMA,EAAKoX,OAASgb,GAC1CA,EAAK5tB,YAAcA,EAAiBA,IAAaA,EAAY4S,OAASgb,GACtEA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GAChEA,EAAKpZ,WAAaA,EAAgBA,GAAYquB,EAAUruB,EAAYoZ,GAC7DA,GAGFqV,EAAAmG,mBAAP,SACEppC,EACAjC,EACAuzB,EACAxgB,EACAhG,GAEA,GAAI8iB,GAAO,GAAIyb,GAMf,OALAzb,GAAK9iB,MAAQA,EACb8iB,EAAK5tB,YAAcA,EAAiBA,IAAaA,EAAY4S,OAASgb,GACtEA,EAAK7vB,UAAYA,EAAeA,IAAWA,EAAU6U,OAASgb,GAC9DA,EAAK0D,YAAcA,EAAiBA,IAAaA,EAAY1e,OAASgb,GACtEA,EAAK9c,UAAYA,EAAWA,EAAU8B,OAASgb,EACxCA,GAGFqV,EAAAqG,oBAAP,SACE7+C,EACAqpB,EACAhJ,GAEA,GAAIs9B,GAAO,GAAImB,EAIf,OAHAnB,GAAKt9B,MAAQA,EACbs9B,EAAK39C,KAAOA,EAAMA,EAAKmoB,OAASw1B,EAChCA,EAAKt0B,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASw1B,GAC/DA,GAGFnF,EAAAuG,gBAAP,SACE/+C,EACA+Q,EACAwE,EACA+Q,EACAjG,GAEA,GAAIs9B,GAAO,GAAIloB,GAMf,OALAkoB,GAAKt9B,MAAQA,EACbs9B,EAAK39C,KAAOA,EAAMA,EAAKmoB,OAASw1B,EAChCA,EAAK5sC,KAAOA,EAAUA,IAAMA,EAAKoX,OAASw1B,GAC1CA,EAAKpoC,YAAcA,EAAiBA,IAAaA,EAAY4S,OAASw1B,GACtEA,EAAKqB,cAAgB14B,EACdq3B,GAGFnF,EAAAyG,0BAAP,SACEj/C,EACA2wB,EACAmG,EACA/hB,EACAnB,EACA+X,EACA5B,EACA1J,GAEA,GAAI8iB,GAAO,GAAI+b,GASf,OARA/b,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAKxS,eAAiBA,EAAoBA,GAAgBynB,EAAUznB,EAAgBwS,GACpFA,EAAKrM,WAAaA,EAAYshB,EAAUthB,EAAYqM,GACpDA,EAAKpuB,WAAaA,EAAgBA,IAAYA,EAAWoT,OAASgb,GAClEA,EAAKvvB,KAAOA,EAAUA,IAAMA,EAAKuU,OAASgb,GAC1CA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GAChEA,EAAKpZ,WAAaA,EAAgBA,GAAYquB,EAAUruB,EAAYoZ,GAC7DA,GAGFqV,EAAA2G,wBAAP,SACEn/C,EACA2wB,EACAmG,EACA/hB,EACAnB,EACA+X,EACA5B,EACA1J,GAEA,GAAI8iB,GAAO,GAAIic,GASf,OARAjc,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAKxS,eAAiBA,EAAoBA,GAAgBynB,EAAUznB,EAAgBwS,GACpFA,EAAKrM,WAAaA,EAAYshB,EAAUthB,EAAYqM,GACpDA,EAAKpuB,WAAaA,EAAgBA,IAAYA,EAAWoT,OAASgb,GAClEA,EAAKvvB,KAAOA,EAAUA,IAAMA,EAAKuU,OAASgb,GAC1CA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GAChEA,EAAKpZ,WAAaA,EAAgBA,GAAYquB,EAAUruB,EAAYoZ,GAC7DA,GAGFqV,EAAA6G,eAAP,SAAsB/4B,EAAoBjG,GACxC,GAAIs9B,GAAO,GAAI2B,GAGf,OAFA3B,GAAKt9B,MAAQA,EACbs9B,EAAK7pB,aAAexN,EACbq3B,GAGFnF,EAAA+G,2BAAP,SACEv/C,EACAgrB,EACAW,EACA5B,EACA1J,GAEA,GAAI8iB,GAAO,GAAIqc,GAMf,OALArc,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAKnY,QAAUA,EAASotB,EAAUptB,EAASmY,GAC3CA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GAChEA,EAAKpZ,WAAaA,EAAgBA,GAAYquB,EAAUruB,EAAYoZ,GAC7DA,GAGFqV,EAAAiH,sBAAP,SACEv8C,EACAmd,GAEA,GAAI8iB,GAAO,GAAIuc,GAGf,OAFAvc,GAAK9iB,MAAQA,EACb8iB,EAAKjgC,MAAQA,EAAWA,IAAOA,EAAMilB,OAASgb,GACvCA,GAGFqV,EAAAmH,sBAAP,SACErsC,EACA4zB,EACA7mB,GAEA,GAAI8iB,GAAO,GAAIyc,GAIf,OAHAzc,GAAK9iB,MAAQA,EACb8iB,EAAK7vB,UAAYA,EAAWA,EAAU6U,OAASgb,EAC/CA,EAAK+D,MAAQA,EAAOkR,EAAUlR,EAAO/D,GAC9BA,GAGFqV,EAAAqH,iBAAP,SACE5sC,EACAkT,EACA9F,GAEA,GAAIs9B,GAAO,GAAImC,GAIf,OAHAnC,GAAKt9B,MAAQA,EACbs9B,EAAK1qC,MAAQA,EAAWA,IAAOA,EAAMkV,OAASw1B,GAC9CA,EAAKx3B,WAAaA,EAAYiyB,EAAUjyB,EAAYw3B,GAC7CA,GAGFnF,EAAAuH,qBAAP,SACE78C,EACAmd,GAEA,GAAI8iB,GAAO,GAAI6c,GAGf,OAFA7c,GAAK9iB,MAAQA,EACb8iB,EAAKjgC,MAAQA,EAAOA,EAAMilB,OAASgb,EAC5BA,GAGFqV,EAAAyH,mBAAP,SACE95B,EACA+5B,EACAC,EACAC,EACA//B,GAEA,GAAI8iB,GAAO,GAAIkd,GASf,OARAld,GAAK9iB,MAAQA,EACb8iB,EAAKhd,WAAaA,EAAYiyB,EAAUjyB,EAAYgd,GACpDA,EAAK+c,cAAgBA,EACjBA,IAAeA,EAAc/3B,OAASgb,GAC1CA,EAAKgd,gBAAkBA,EACnBA,GAAiB/H,EAAU+H,EAAiBhd,GAChDA,EAAKid,kBAAoBA,EACrBA,GAAmBhI,EAAUgI,EAAmBjd,GAC7CA,GAGFqV,EAAA8H,sBAAP,SACEtgD,EACA6vB,EACAlE,EACA5B,EACA1J,GAEA,GAAI8iB,GAAO,GAAIod,GAMf,OALApd,GAAK9iB,MAAQA,EACb8iB,EAAKnjC,KAAOA,EAAMA,EAAKmoB,OAASgb,EAChCA,EAAKtT,MAAQA,EAAOA,EAAM1H,OAASgb,EACnCA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GAChEA,EAAKpZ,WAAaA,EAAgBA,GAAYquB,EAAUruB,EAAYoZ,GAC7DA,GAGFqV,EAAAgI,wBAAP,SACEpxB,EACAzD,EACA5B,EACA1J,GAEA,GAAI8iB,GAAO,GAAIsd,GAKf,OAJAtd,GAAK9iB,MAAQA,EACb8iB,EAAK/T,aAAeA,EAAcgpB,EAAUhpB,EAAc+T,GAC1DA,EAAKxX,UAAYA,EAAeA,GAAWysB,EAAUzsB,EAAWwX,GAChEA,EAAKpZ,WAAaA,EAAgBA,GAAYquB,EAAUruB,EAAYoZ,GAC7DA,GAGFqV,EAAAkI,0BAAP,SACE1gD,EACA+Q,EACAwE,EACAoW,EACA5B,EACA1J,GAEA,GAAIs9B,GAAO,GAAIgD,GAOf,OANAhD,GAAKt9B,MAAQA,EACbs9B,EAAK39C,KAAOA,EAAMA,EAAKmoB,OAASw1B,EAChCA,EAAK5sC,KAAOA,EAAUA,IAAMA,EAAKoX,OAASw1B,GAC1CA,EAAKpoC,YAAcA,EAAiBA,IAAaA,EAAY4S,OAASw1B,GACtEA,EAAKhyB,UAAYA,EACjBgyB,EAAK5zB,WAAaA,EACX4zB,GAGFnF,EAAAoI,qBAAP,SACEttC,EACA+S,EACAhG,GAEA,GAAI8iB,GAAO,GAAI0d,GAIf,OAHA1d,GAAK9iB,MAAQA,EACb8iB,EAAK7vB,UAAYA,EAAWA,EAAU6U,OAASgb,EAC/CA,EAAK9c,UAAYA,EAAWA,EAAU8B,OAASgb,EACxCA,GAEXqV,IAlzBsB15C,GAAA05C,MAuzBtB,IAAAG,GAAA,SAAAl0B,GAAA,QAAAk0B,KAAA,GAAAj0B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR+mPQ,OQ9mPNslB,GAAA4B,KAAOC,EAASu6B,KR8mPHp8B,EQtmPf,MAT8BlC,GAAAm2B,EAAAl0B,GAS9Bk0B,GAT8BH,EAAjB15C,GAAA65C,UAYb,IAAAmG,GAAA,SAAAr6B,GAAA,QAAAq6B,KAAA,GAAAp6B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR8mPQ,OQ7mPNslB,GAAA4B,KAAOC,EAASw6B,cR6mPHr8B,EQvmPf,MAPmClC,GAAAs8B,EAAAr6B,GAOnCq6B,GAPmCtG,EAAtB15C,GAAAggD,eAYb,IAAAkC,GAAA,SAAAv8B,GAAA,QAAAu8B,KR4mPQ,MAAkB,QAAXv8B,GAAmBA,EAAOgQ,MAAMr1B,KAAM8tB,YAAc9tB,KQ5mPnB,MAAPojB,GAAAw+B,EAAAv8B,GAAOu8B,GAAPxI,EAAnB15C,GAAAkiD,YAGtB,IAAAnI,GAAA,SAAAp0B,GAAA,QAAAo0B,KAAA,GAAAn0B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRonPQ,OQnnPNslB,GAAA4B,KAAOC,EAAS6M,WRmnPH1O,EQ/mPf,MAL0ClC,GAAAq2B,EAAAp0B,GAK1Co0B,GAL0CmI,EAA7BliD,GAAA+5C,wBAQb,SAAkBoI,GAChBA,IAAA,iBACAA,IAAA,qBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,iBACAA,IAAA,oBANgBniD,EAAAmiD,cAAAniD,EAAAmiD,gBAUlB,IAAAC,GAAA,SAAAz8B,GAAA,QAAAy8B,KAAA,GAAAx8B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRunPQ,OQtnPNslB,GAAA4B,KAAOC,EAAS6G,QRsnPH1I,EQlnPf,MALgDlC,GAAA0+B,EAAAz8B,GAKhDy8B,GALgDF,EAA1BliD,GAAAoiD,mBAQtB,IAAAnI,GAAA,SAAAt0B,GAAA,QAAAs0B,KAAA,GAAAr0B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR0nPQ,OQznPNslB,GAAA2I,YAAW,ERynPE3I,EQrnPf,MAL4ClC,GAAAu2B,EAAAt0B,GAK5Cs0B,GAL4CmI,EAA/BpiD,GAAAi6C,0BAQb,SAAkBoI,GAChBA,IAAA,mBACAA,IAAA,YAFgBriD,EAAAqiD,gBAAAriD,EAAAqiD,kBAMlB,IAAAjI,GAAA,SAAAz0B,GAAA,QAAAy0B,KAAA,GAAAx0B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR6nPQ,OQ5nPNslB,GAAA4B,KAAOC,EAASqM,UR4nPHlO,EQpnPf,MATyClC,GAAA02B,EAAAz0B,GASzCy0B,GATyC8H,EAA5BliD,GAAAo6C,qBAYb,IAAAE,GAAA,SAAA30B,GAAA,QAAA20B,KAAA,GAAA10B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR4nPQ,OQ3nPNslB,GAAA4B,KAAOC,EAASuM,OR2nPHpO,EQnnPf,MATsClC,GAAA42B,EAAA30B,GAStC20B,GATsC4H,EAAzBliD,GAAAs6C,kBAYb,IAAAG,GAAA,SAAA90B,GAAA,QAAA80B,KAAA,GAAA70B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR2nPQ,OQ1nPNslB,GAAA4B,KAAOC,EAASgN,KR0nPH7O,EQlnPf,MAToClC,GAAA+2B,EAAA90B,GASpC80B,GAToCyH,EAAvBliD,GAAAy6C,gBAYb,IAAAE,GAAA,SAAAh1B,GAAA,QAAAg1B,KAAA,GAAA/0B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR0nPQ,OQznPNslB,GAAA4B,KAAOC,EAASmiB,MRynPHhkB,EQrnPf,MALqClC,GAAAi3B,EAAAh1B,GAKrCg1B,GALqCuH,EAAxBliD,GAAA26C,iBAQb,IAAAE,GAAA,SAAAl1B,GAAA,QAAAk1B,KAAA,GAAAj1B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR8nPQ,OQ7nPNslB,GAAA4B,KAAOC,EAASkG,YAChB/H,EAAA3D,KAAO,cR4nPM2D,EQ3nPf,MAH2ClC,GAAAm3B,EAAAl1B,GAG3Ck1B,GAH2Cd,EAA9B/5C,GAAA66C,uBAMb,IAAAE,GAAA,SAAAp1B,GAAA,QAAAo1B,KAAA,GAAAn1B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRmoPQ,OQloPNslB,GAAA4B,KAAOC,EAAS+M,cRkoPH5O,EQ5nPf,MAP6ClC,GAAAq3B,EAAAp1B,GAO7Co1B,GAP6CmH,EAAhCliD,GAAA+6C,yBAUb,IAAAI,GAAA,SAAAx1B,GAAA,QAAAw1B,KAAA,GAAAv1B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRooPQ,OQnoPNslB,GAAA2I,YAAW,ERmoPE3I,EQ/nPf,MAL4ClC,GAAAy3B,EAAAx1B,GAK5Cw1B,GAL4CiH,EAA/BpiD,GAAAm7C,wBAQb,IAAAI,GAAA,SAAA51B,GAAA,QAAA41B,KAAA,GAAA31B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRuoPQ,OQtoPNslB,GAAA4B,KAAOC,EAASkR,SRsoPH/S,EQloPf,MALwClC,GAAA63B,EAAA51B,GAKxC41B,GALwC2G,EAA3BliD,GAAAu7C,oBAQb,IAAAD,GAAA,SAAA31B,GAAA,QAAA21B,KAAA,GAAA11B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR0oPQ,OQzoPNslB,GAAA4B,KAAOC,EAASsiB,cRyoPHnkB,EQxoPf,MAF6ClC,GAAA43B,EAAA31B,GAE7C21B,GAF6CC,EAAhCv7C,GAAAs7C,yBAKb,IAAAG,GAAA,SAAA91B,GAAA,QAAA81B,KAAA,GAAA71B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRgpPQ,OQ/oPNslB,GAAA2I,YAAW,ER+oPE3I,EQ3oPf,MAL8ClC,GAAA+3B,EAAA91B,GAK9C81B,GAL8C2G,EAAjCpiD,GAAAy7C,0BAQb,IAAAE,GAAA,SAAAh2B,GAAA,QAAAg2B,KAAA,GAAA/1B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRmpPQ,OQlpPNslB,GAAA4B,KAAOC,EAAS6iB,IRkpPH1kB,EQjpPf,MAFmClC,GAAAi4B,EAAAh2B,GAEnCg2B,GAFmClB,EAAtBz6C,GAAA27C,eAKb,IAAAE,GAAA,SAAAl2B,GAAA,QAAAk2B,KAAA,GAAAj2B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR0pPQ,OQzpPNslB,GAAA4B,KAAOC,EAASyiB,KAChBtkB,EAAA3D,KAAO,ORwpPM2D,EQvpPf,MAHoClC,GAAAm4B,EAAAl2B,GAGpCk2B,GAHoC9B,EAAvB/5C,GAAA67C,gBAMb,IAAAE,GAAA,SAAAp2B,GAAA,QAAAo2B,KAAA,GAAAn2B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR+pPQ,OQ9pPNslB,GAAA4B,KAAOC,EAASoM,cR8pPHjO,EQ1pPf,MAL6ClC,GAAAq4B,EAAAp2B,GAK7Co2B,GAL6CmG,EAAhCliD,GAAA+7C,yBAQb,IAAAE,GAAA,SAAAt2B,GAAA,QAAAs2B,KAAA,GAAAr2B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRkqPQ,OQjqPNslB,GAAA4B,KAAOC,EAAS8M,eRiqPH3O,EQ3pPf,MAP8ClC,GAAAu4B,EAAAt2B,GAO9Cs2B,GAP8CiG,EAAjCliD,GAAAi8C,0BAUb,IAAAG,GAAA,SAAAz2B,GAAA,QAAAy2B,KAAA,GAAAx2B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRmqPQ,OQlqPNslB,GAAA2I,YAAW,ERkqPE3I,EQ5pPf,MAP6ClC,GAAA04B,EAAAz2B,GAO7Cy2B,GAP6CgG,EAAhCpiD,GAAAo8C,yBAUb,IAAAG,GAAA,SAAA52B,GAAA,QAAA42B,KAAA,GAAA32B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRoqPQ,OQnqPNslB,GAAA4B,KAAOC,EAASijB,QRmqPH9kB,EQ3pPf,MATuClC,GAAA64B,EAAA52B,GASvC42B,GATuC2F,EAA1BliD,GAAAu8C,mBAYb,IAAAE,GAAA,SAAA92B,GAAA,QAAA82B,KAAA,GAAA72B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRmqPQ,OQlqPNslB,GAAA2I,YAAW,ERkqPE3I,EQ9pPf,MAL6ClC,GAAA+4B,EAAA92B,GAK7C82B,GAL6C2F,EAAhCpiD,GAAAy8C,yBAQb,IAAAE,GAAA,SAAAh3B,GAAA,QAAAg3B,KAAA,GAAA/2B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRuqPQ,OQtqPNslB,GAAA4B,KAAOC,EAAS2M,MAChBxO,EAAA3D,KAAO,QRqqPM2D,EQpqPf,MAHqClC,GAAAi5B,EAAAh3B,GAGrCg3B,GAHqC5C,EAAxB/5C,GAAA28C,iBAMb,IAAAE,GAAA,SAAAl3B,GAAA,QAAAk3B,KAAA,GAAAj3B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR6qPQ,OQ5qPNslB,GAAA4B,KAAOC,EAASwM,KAChBrO,EAAA3D,KAAO,OR2qPM2D,EQ1qPf,MAHoClC,GAAAm5B,EAAAl3B,GAGpCk3B,GAHoC9C,EAAvB/5C,GAAA68C,gBAMb,IAAAE,GAAA,SAAAp3B,GAAA,QAAAo3B,KAAA,GAAAn3B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRmrPQ,OQlrPNslB,GAAA4B,KAAOC,EAAS0iB,KAChBvkB,EAAA3D,KAAO,ORirPM2D,EQhrPf,MAHoClC,GAAAq5B,EAAAp3B,GAGpCo3B,GAHoChD,EAAvB/5C,GAAA+8C,gBAMb,IAAA9B,GAAA,SAAAt1B,GAAA,QAAAs1B,KAAA,GAAAr1B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRyrPQ,OQxrPNslB,GAAA4B,KAAOC,EAASwiB,MAChBrkB,EAAA3D,KAAO,QRurPM2D,EQtrPf,MAHqClC,GAAAu3B,EAAAt1B,GAGrCs1B,GAHqClB,EAAxB/5C,GAAAi7C,iBAMb,IAAAqH,GAAA,SAAA38B,GAAA,QAAA28B,KR4rPQ,MAAkB,QAAX38B,GAAmBA,EAAOgQ,MAAMr1B,KAAM8tB,YAAc9tB,KQtrPnE,MAN8CojB,GAAA4+B,EAAA38B,GAM9C28B,GAN8CJ,EAAxBliD,GAAAsiD,iBAStB,IAAArF,GAAA,SAAAt3B,GAAA,QAAAs3B,KAAA,GAAAr3B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR8rPQ,OQ7rPNslB,GAAA4B,KAAOC,EAASmjB,aR6rPHhlB,EQ5rPf,MAF4ClC,GAAAu5B,EAAAt3B,GAE5Cs3B,GAF4CqF,EAA/BtiD,GAAAi9C,wBAKb,IAAAE,GAAA,SAAAx3B,GAAA,QAAAw3B,KAAA,GAAAv3B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRosPQ,OQnsPNslB,GAAA4B,KAAOC,EAASqjB,YRmsPHllB,EQlsPf,MAF2ClC,GAAAy5B,EAAAx3B,GAE3Cw3B,GAF2CmF,EAA9BtiD,GAAAm9C,uBAOb,IAAYxwB,IAAZ,SAAYA,GACVA,IAAA,iBACAA,IAAA,iBACAA,IAAA,aACAA,IAAA,qBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,uBACAA,IAAA,mBACAA,IAAA,qBACAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,cACAA,IAAA,eAdUA,EAAA3sB,EAAA2sB,eAAA3sB,EAAA2sB,iBAkBZ,IAAA41B,GAAA,SAAA58B,GAAA,QAAA48B,KRusPQ,MAAkB,QAAX58B,GAAmBA,EAAOgQ,MAAMr1B,KAAM8tB,YAAc9tB,KQvsPpB,MAAPojB,GAAA6+B,EAAA58B,GAAO48B,GAAP7I,EAAlB15C,GAAAuiD,WAGtB,IAAYC,IAAZ,SAAYA,GAEVA,IAAA,qBAEAA,IAAA,iBAEAA,IAAA,sBANUA,EAAAxiD,EAAAwiD,aAAAxiD,EAAAwiD,eAUZ,IAAAC,GAAA,SAAA98B,GAoBE,QAAA88B,GAAY5gC,EAAwBI,EAAcuF,GAAlD,GAAA5B,GACED,EAAA7kB,KAAAR,OAAOA,IRssPH,OQ1tPNslB,GAAA4B,KAAOC,EAAS8D,OAChB3F,EAAAyD,OAAS,KAaTzD,EAAA88B,UAA8B,KAE9B98B,EAAAiV,gBAAuB,EAKrBjV,EAAK+8B,WAAan7B,EAClB5B,EAAK/D,eAAiBA,EACtB+D,EAAKoK,aAAeqpB,EAAmBzzB,EAAK/D,gBAC5C+D,EAAKyB,WAAa,GAAIrjB,OACtB4hB,EAAKrE,MAAQ,GAAIge,GAAAtT,MAAMrG,EAAM,EAAG3D,EAAK3f,QACrCsjB,EAAK3D,KAAOA,ERgsPD2D,EQzrPf,MAlC4BlC,GAAA++B,EAAA98B,GA+B1BtkB,OAAAC,eAAImhD,EAAA3gD,UAAA,WRgsPEL,IQhsPN,WAAsB,MAAOnB,MAAKqiD,YAAcH,EAAWI,ORisPrDphD,YAAY,EACZD,cAAc,IQhsPpBF,OAAAC,eAAImhD,EAAA3gD,UAAA,aRosPEL,IQpsPN,WAAwB,MAAOnB,MAAKqiD,YAAcH,EAAWK,SRqsPvDrhD,YAAY,EACZD,cAAc,IQrsPtBkhD,GAlC4B/I,EAAf15C,GAAAyiD,QAqCb,IAAAK,IAAA,SAAAn9B,GAAA,QAAAm9B,KAAA,GAAAl9B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRgtPQ,OQzsPNslB,GAAAqF,WAAiC,KAEvBrF,EAAAm9B,+BAAgD,KAChDn9B,EAAAo9B,4BAA6C,KRssP1Cp9B,EQroPf,MA3EmDlC,GAAAo/B,EAAAn9B,GAajDtkB,OAAAC,eAAIwhD,EAAAhhD,UAAA,4BRusPEL,IQvsPN,WAIE,MAHKnB,MAAKyiD,iCACRziD,KAAKyiD,+BAAiC7J,EAAmB54C,MAAM,IAE1DA,KAAKyiD,gCRysPRvhD,YAAY,EACZD,cAAc,IQtsPpBF,OAAAC,eAAIwhD,EAAAhhD,UAAA,yBR0sPEL,IQ1sPN,WAIE,MAHKnB,MAAK0iD,8BACR1iD,KAAK0iD,4BAA8B9J,EAAmB54C,MAAM,IAEvDA,KAAK0iD,6BR4sPRxhD,YAAY,EACZD,cAAc,IQzsPpBF,OAAAC,eAAIwhD,EAAAhhD,UAAA,cR6sPEL,IQ7sPN,WACE,GAAI4nB,GAAS/oB,KAAK+oB,MAClB,SAAKA,MAGDA,EAAO7B,MAAQC,EAASiB,YAAcW,EAASA,EAAOA,UAGnDA,EAAO7B,MAAQC,EAAS8D,SR+sP3B/pB,YAAY,EACZD,cAAc,IQ5sPpBF,OAAAC,eAAIwhD,EAAAhhD,UAAA,oBRgtPEL,IQhtPN,WACE,GAAI4nB,GAAS/oB,KAAK+oB,MAClB,UAAKA,GAAWA,EAAO7B,MAAQC,EAASiB,YAAcW,EAASA,EAAOA,WAGlEA,EAAO7B,MAAQC,EAASa,qBAExBoE,EAAYC,EAAa7E,OAAQxnB,KAAKusB,YACfxD,EAAQqa,iBAG/Bra,EAAO7B,MAAQC,EAASC,iBAExBgF,EAAYC,EAAaU,OAAQ/sB,KAAKusB,YACnBxD,EAAQqa,iBAI7Bra,EAAO7B,MAAQC,EAAS8D,QACxBmB,EAAYC,EAAa7E,OAAQxnB,KAAKusB,aR6sPpCrrB,YAAY,EACZD,cAAc,IQzsPpBuhD,EAAAhhD,UAAAwjC,oBAAA,SAAoBzb,GAIlB,MACEA,GAAO3oB,KAAK+gB,MAAQ4H,EAAO3S,aAAa+K,MACxC3hB,KAAKihB,MAAMK,QAAUiI,EAAOtI,MAAMK,SACjCthB,KAAKojC,kBAGZof,GA3EmDP,EAA7BviD,GAAA8iD,uBA8EtB,IAAAG,IAAA,SAAAt9B,GAAA,QAAAs9B,KR+sPQ,MAAkB,QAAXt9B,GAAmBA,EAAOgQ,MAAMr1B,KAAM8tB,YAAc9tB,KQzsPnE,MAN+DojB,GAAAu/B,EAAAt9B,GAM/Ds9B,GAN+DH,GAAzC9iD,GAAAijD,mCAStB,IAAA5F,IAAA,SAAA13B,GAAA,QAAA03B,KAAA,GAAAz3B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRitPQ,OQhtPNslB,GAAA4B,KAAOC,EAASoe,MRgtPHjgB,EQ5sPf,MALoClC,GAAA25B,EAAA13B,GAKpC03B,GALoCkF,EAAvBviD,GAAAq9C,iBAQb,IAAAE,IAAA,SAAA53B,GAAA,QAAA43B,KAAA,GAAA33B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRotPQ,OQntPNslB,GAAA4B,KAAOC,EAASse,MRmtPHngB,EQ/sPf,MALoClC,GAAA65B,EAAA53B,GAKpC43B,GALoCgF,EAAvBviD,GAAAu9C,iBAQb,IAAAE,IAAA,SAAA93B,GAAA,QAAA83B,KAAA,GAAA73B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRutPQ,OQttPNslB,GAAA4B,KAAOC,EAASC,iBRstPH9B,EQ5sPf,MAXsClC,GAAA+5B,EAAA93B,GAWtC83B,GAXsCqF,GAAzB9iD,GAAAy9C,mBAcb,IAAAE,IAAA,SAAAh4B,GAAA,QAAAg4B,KAAA,GAAA/3B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRotPQ,OQntPNslB,GAAA4B,KAAOC,EAASwe,SRmtPHrgB,EQ/sPf,MALuClC,GAAAi6B,EAAAh4B,GAKvCg4B,GALuC4E,EAA1BviD,GAAA29C,sBAQb,SAAkBuF,GAChBA,IAAA,mBACAA,IAAA,mBACAA,IAAA,uBACAA,IAAA,yBACAA,IAAA,oBALgBljD,EAAAkjD,gBAAAljD,EAAAkjD,kBASlB,IAAArF,IAAA,SAAAl4B,GAAA,QAAAk4B,KAAA,GAAAj4B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRutPQ,OQttPNslB,GAAA4B,KAAOC,EAAS07B,URstPHv9B,EQ9sPf,MAT+BlC,GAAAm6B,EAAAl4B,GAS/Bk4B,GAT+B0E,EAAlBviD,GAAA69C,YAYb,IAAAE,IAAA,SAAAp4B,GAAA,QAAAo4B,KAAA,GAAAn4B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRstPQ,OQrtPNslB,GAAA4B,KAAOC,EAAS0e,GRqtPHvgB,EQ/sPf,MAPiClC,GAAAq6B,EAAAp4B,GAOjCo4B,GAPiCwE,EAApBviD,GAAA+9C,cAUb,IAAAE,IAAA,SAAAt4B,GAAA,QAAAs4B,KAAA,GAAAr4B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRutPQ,OQttPNslB,GAAA4B,KAAOC,EAAS4e,MRstPHzgB,EQrtPf,MAFoClC,GAAAu6B,EAAAt4B,GAEpCs4B,GAFoCsE,EAAvBviD,GAAAi+C,iBAKb,IAAAE,IAAA,SAAAx4B,GAAA,QAAAw4B,KAAA,GAAAv4B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR6tPQ,OQ5tPNslB,GAAA4B,KAAOC,EAASG,gBR4tPHhC,EQxtPf,MALqClC,GAAAy6B,EAAAx4B,GAKrCw4B,GALqC2E,GAAxB9iD,GAAAm+C,kBAQb,IAAAE,IAAA,SAAA14B,GAAA,QAAA04B,KAAA,GAAAz4B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRiuPQ,OQhuPNslB,GAAA4B,KAAOC,EAAS27B,qBAChBx9B,EAAAiH,UAAY,KR+tPCjH,EQ1tPf,MAP0ClC,GAAA26B,EAAA14B,GAO1C04B,GAP0CyE,GAA7B9iD,GAAAq+C,uBAUb,IAAAM,IAAA,SAAAh5B,GAAA,QAAAg5B,KAAA,GAAA/4B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRkuPQ,OQjuPNslB,GAAA4B,KAAOC,EAAS47B,aRiuPHz9B,EQ3tPf,MAP2ClC,GAAAi7B,EAAAh5B,GAO3Cg5B,GAP2CjF,EAA9B15C,GAAA2+C,wBAUb,IAAAG,IAAA,SAAAn5B,GAAA,QAAAm5B,KAAA,GAAAl5B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRmuPQ,OQluPNslB,GAAA4B,KAAOC,EAAS67B,aRkuPH19B,EQ5tPf,MAPkClC,GAAAo7B,EAAAn5B,GAOlCm5B,GAPkCpF,EAArB15C,GAAA8+C,eAUb,IAAAP,IAAA,SAAA54B,GAAA,QAAA44B,KAAA,GAAA34B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRouPQ,OQnuPNslB,GAAA4B,KAAOC,EAASK,ORmuPHlC,EQvtPf,MAbqClC,GAAA66B,EAAA54B,GAarC44B,GAbqCgE,EAAxBviD,GAAAu+C,kBAgBb,IAAAS,IAAA,SAAAr5B,GAAA,QAAAq5B,KAAA,GAAAp5B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR+tPQ,OQ9tPNslB,GAAA4B,KAAOC,EAAS8e,WR8tPH3gB,EQ1tPf,MALyClC,GAAAs7B,EAAAr5B,GAKzCq5B,GALyCuD,EAA5BviD,GAAAg/C,sBAQb,IAAAY,IAAA,SAAAj6B,GAAA,QAAAi6B,KAAA,GAAAh6B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRkuPQ,OQjuPNslB,GAAA4B,KAAOC,EAAS6E,iBRiuPH1G,EQhuPf,MAFsClC,GAAAk8B,EAAAj6B,GAEtCi6B,GAFsCqD,GAAzBjjD,GAAA4/C,mBAKb,IAAAE,IAAA,SAAAn6B,GAAA,QAAAm6B,KAAA,GAAAl6B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRwuPQ,OQvuPNslB,GAAA4B,KAAOC,EAASgf,IRuuPH7gB,EQ1tPf,MAdkClC,GAAAo8B,EAAAn6B,GAclCm6B,GAdkCyC,EAArBviD,GAAA8/C,eAiBb,IAAAM,IAAA,SAAAz6B,GAAA,QAAAy6B,KAAA,GAAAx6B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRkuPQ,OQjuPNslB,GAAA4B,KAAOC,EAASO,oBRiuPHpC,EQntPf,MAfyClC,GAAA08B,EAAAz6B,GAYvCtkB,OAAAC,eAAI8+C,EAAAt+C,UAAA,aRytPEL,IQztPN,WACE,MAA8B,OAAvBnB,KAAKuxB,gBAA0BvxB,KAAKuxB,eAAevvB,OAAS,GR2tP/Dd,YAAY,EACZD,cAAc,IQ1tPtB6+C,GAfyC0C,GAA5B9iD,GAAAogD,sBAkBb,IAAAlB,IAAA,SAAAv5B,GAAA,QAAAu5B,KAAA,GAAAt5B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRkuPQ,OQjuPNslB,GAAA4B,KAAOC,EAASkf,GRiuPH/gB,EQztPf,MATiClC,GAAAw7B,EAAAv5B,GASjCu5B,GATiCqD,EAApBviD,GAAAk/C,cAYb,IAAAM,IAAA,SAAA75B,GAAA,QAAA65B,KAAA,GAAA55B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRkuPQ,OQjuPNslB,GAAA4B,KAAOC,EAAS87B,kBAChB39B,EAAAiH,UAAY,KRguPCjH,EQ5tPf,MANuClC,GAAA87B,EAAA75B,GAMvC65B,GANuCsD,GAA1B9iD,GAAAw/C,oBASb,IAAAH,IAAA,SAAA15B,GAAA,QAAA05B,KAAA,GAAAz5B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRouPQ,OQnuPNslB,GAAA4B,KAAOC,EAASS,ORmuPHtC,EQvtPf,MAbqClC,GAAA27B,EAAA15B,GAarC05B,GAbqCkD,EAAxBviD,GAAAq/C,kBAgBb,IAAAK,IAAA,SAAA/5B,GAAA,QAAA+5B,KAAA,GAAA95B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR+tPQ,OQ9tPNslB,GAAA4B,KAAOC,EAASW,qBR8tPHxC,EQ7tPf,MAF0ClC,GAAAg8B,EAAA/5B,GAE1C+5B,GAF0CjC,GAA7Bz9C,GAAA0/C,uBAKb,IAAAY,IAAA,SAAA36B,GAAA,QAAA26B,KAAA,GAAA16B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRquPQ,OQpuPNslB,GAAA4B,KAAOC,EAAS+E,kBRouPH5G,EQnuPf,MAFuClC,GAAA48B,EAAA36B,GAEvC26B,GAFuCF,GAA1BpgD,GAAAsgD,oBAKb,IAAAI,IAAA,SAAA/6B,GAAA,QAAA+6B,KAAA,GAAA96B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR2uPQ,OQ1uPNslB,GAAA4B,KAAOC,EAASa,qBR0uPH1C,EQtuPf,MAL0ClC,GAAAg9B,EAAA/6B,GAK1C+6B,GAL0CoC,GAA7B9iD,GAAA0gD,yBAQb,SAAY8C,GAEVA,IAAA,qBAEAA,IAAA,uBAEAA,IAAA,gBANUxjD,EAAAwjD,gBAAAxjD,EAAAwjD,kBAUZ,IAAA7sB,IAAA,SAAAhR,GAAA,QAAAgR,KAAA,GAAA/Q,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR8uPQ,OQ7uPNslB,GAAA4B,KAAOC,EAASg8B,UR6uPH79B,EQnuPf,MAX+BlC,GAAAiT,EAAAhR,GAW/BgR,GAX+B+iB,EAAlB15C,GAAA22B,YAcb,IAAA6pB,IAAA,SAAA76B,GAAA,QAAA66B,KAAA,GAAA56B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR2uPQ,OQ1uPNslB,GAAA4B,KAAOC,EAASi8B,SR0uPH99B,EQtuPf,MAL8BlC,GAAA88B,EAAA76B,GAK9B66B,GAL8B9G,EAAjB15C,GAAAwgD,WAQb,IAAAI,IAAA,SAAAj7B,GAAA,QAAAi7B,KAAA,GAAAh7B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IR8uPQ,OQ7uPNslB,GAAA4B,KAAOC,EAASof,OR6uPHjhB,EQzuPf,MALqClC,GAAAk9B,EAAAj7B,GAKrCi7B,GALqC2B,EAAxBviD,GAAA4gD,kBAQb,IAAAI,IAAA,SAAAr7B,GAAA,QAAAq7B,KAAA,GAAAp7B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRivPQ,OQhvPNslB,GAAA4B,KAAOC,EAASk8B,WRgvPH/9B,EQ1uPf,MAPgClC,GAAAs9B,EAAAr7B,GAOhCq7B,GAPgCtH,EAAnB15C,GAAAghD,aAUb,IAAAF,IAAA,SAAAn7B,GAAA,QAAAm7B,KAAA,GAAAl7B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRkvPQ,OQjvPNslB,GAAA4B,KAAOC,EAASsf,ORivPHnhB,EQ3uPf,MAPqClC,GAAAo9B,EAAAn7B,GAOrCm7B,GAPqCyB,EAAxBviD,GAAA8gD,kBAUb,IAAAI,IAAA,SAAAv7B,GAAA,QAAAu7B,KAAA,GAAAt7B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRmvPQ,OQlvPNslB,GAAA4B,KAAOC,EAASwf,MRkvPHrhB,EQ9uPf,MALoClC,GAAAw9B,EAAAv7B,GAKpCu7B,GALoCqB,EAAvBviD,GAAAkhD,iBAQb,IAAAK,IAAA,SAAA57B,GAAA,QAAA47B,KAAA,GAAA37B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRsvPQ,OQrvPNslB,GAAA4B,KAAOC,EAAS0f,IRqvPHvhB,EQ3uPf,MAXkClC,GAAA69B,EAAA57B,GAWlC47B,GAXkCgB,EAArBviD,GAAAuhD,eAcb,IAAAE,IAAA,SAAA97B,GAAA,QAAA87B,KAAA,GAAA77B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRmvPQ,OQlvPNslB,GAAA4B,KAAOC,EAASe,gBRkvPH5C,EQ9uPf,MALqClC,GAAA+9B,EAAA97B,GAKrC87B,GALqCqB,GAAxB9iD,GAAAyhD,kBAQb,IAAAI,IAAA,SAAAl8B,GAAA,QAAAk8B,KAAA,GAAAj8B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRsvPQ,OQrvPNslB,GAAA4B,KAAOC,EAAS2xB,oBRqvPHxzB,EQjvPf,MALyClC,GAAAm+B,EAAAl8B,GAKzCk8B,GALyCoB,GAA5BjjD,GAAA6hD,sBAQb,IAAAF,IAAA,SAAAh8B,GAAA,QAAAg8B,KAAA,GAAA/7B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRyvPQ,OQxvPNslB,GAAA4B,KAAOC,EAASiB,SRwvPH9C,EQhvPf,MATuClC,GAAAi+B,EAAAh8B,GASvCg8B,GATuCY,EAA1BviD,GAAA2hD,oBAYb,IAAAI,IAAA,SAAAp8B,GAAA,QAAAo8B,KAAA,GAAAn8B,GAAA,OAAAD,KAAAgQ,MAAAr1B,KAAA8tB,YAAA9tB,IRwvPQ,OQvvPNslB,GAAA4B,KAAOC,EAAS4f,MRuvPHzhB,EQjvPf,MAPoClC,GAAAq+B,EAAAp8B,GAOpCo8B,GAPoCQ,EAAvBviD,GAAA+hD,iBAUb,IAAInJ,IAAuC,IAE3C54C,GAAA24C,uBAKA34C,EAAA64C,kBAeA74C,EAAA84C,cAOA94C,EAAAg5C,cAYAh5C,EAAA0sB,cAKA1sB,EAAAi5C,oBAcAj5C,EAAAgrB,eAKAhrB,EAAAk5C,qBA8BAl5C,EAAAq5C,sBRwwPM,SAAUp5C,EAAQD,EAASS,GAEjC,YAqBA,IAAIijB,GAAapjB,MAAQA,KAAKojB,WAAc,WACxC,GAAIC,GAAgBtiB,OAAOuiB,iBACpBC,uBAA2B7f,QAAS,SAAU/C,EAAG6iB,GAAK7iB,EAAE4iB,UAAYC,IACvE,SAAU7iB,EAAG6iB,GAAK,IAAK,GAAI9hB,KAAK8hB,GAAOA,EAAE/hB,eAAeC,KAAIf,EAAEe,GAAK8hB,EAAE9hB,IACzE,OAAO,UAAUf,EAAG6iB,GAEhB,QAASC,KAAOzjB,KAAK0jB,YAAc/iB,EADnC0iB,EAAc1iB,EAAG6iB,GAEjB7iB,EAAEa,UAAkB,OAANgiB,EAAaziB,OAAOgO,OAAOyU,IAAMC,EAAGjiB,UAAYgiB,EAAEhiB,UAAW,GAAIiiB,OAGvF1iB,QAAOC,eAAetB,EAAS,cAAgBoE,OAAO,GSrgTtD,IAsBY8oC,GAtBZxoB,EAAAjkB,EAAA,GAUA2hB,EAAA3hB,EAAA,IAYA,SAAYysC,GAKVA,IAAA,uBACAA,IAAA,WACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,eACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,uBACAA,IAAA,8BACAA,IAAA,wBACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,oBACAA,IAAA,YACAA,IAAA,gBACAA,IAAA,gBACAA,IAAA,oBACAA,IAAA,sBACAA,IAAA,kBACAA,IAAA,sBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,cACAA,IAAA,YACAA,IAAA,4BACAA,IAAA,oBACAA,IAAA,YACAA,IAAA,4BACAA,IAAA,0BACAA,IAAA,YACAA,IAAA,kBACAA,IAAA,cACAA,IAAA,oBACAA,IAAA,0BACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,YACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,0BACAA,IAAA,oBACAA,IAAA,wBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,oBACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,kBAIAA,IAAA,0BACAA,IAAA,4BACAA,IAAA,0BACAA,IAAA,4BACAA,IAAA,8BACAA,IAAA,gCACAA,IAAA,cACAA,IAAA,8BACAA,IAAA,0BACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,8BACAA,IAAA,sCACAA,IAAA,4CACAA,IAAA,kCACAA,IAAA,4CACAA,IAAA,gDACAA,IAAA,0DACAA,IAAA,4CACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,0CACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,sBACAA,IAAA,0BACAA,IAAA,8BACAA,IAAA,0CACAA,IAAA,sDACAA,IAAA,8EACAA,IAAA,0BACAA,IAAA,cACAA,IAAA,kBACAA,IAAA,8BACAA,IAAA,kBACAA,IAAA,8CACAA,IAAA,sBACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,qBACAA,IAAA,+BACAA,IAAA,iCACAA,IAAA,uCACAA,IAAA,yDACAA,IAAA,iCACAA,IAAA,qCACAA,IAAA,yDACAA,IAAA,qEACAA,IAAA,6FACAA,IAAA,yCACAA,IAAA,6BACAA,IAAA,iCACAA,IAAA,aAIAA,IAAA,6BACAA,IAAA,mCACAA,IAAA,qCACAA,IAAA,iCAIAA,IAAA,uBACAA,IAAA,4BArIUA,EAAAltC,EAAAktC,QAAAltC,EAAAktC,WAwIZ,SAAiBA,GAEf,QAAA0W,GAA4B3hC,GAC1B,OAAQA,GACN,IAAK,WAAY,MAAOirB,GAAMjW,QAC9B,KAAK,KAAM,MAAOiW,GAAM2W,EACxB,KAAK,QAAS,MAAO3W,GAAM4W,KAC3B,KAAK,QAAS,MAAO5W,GAAM6W,KAC3B,KAAK,QAAS,MAAO7W,GAAMnH,KAC3B,KAAK,OAAQ,MAAOmH,GAAM8W,IAC1B,KAAK,QAAS,MAAO9W,GAAM+W,KAC3B,KAAK,QAAS,MAAO/W,GAAM9Z,KAC3B,KAAK,WAAY,MAAO8Z,GAAMjH,QAC9B,KAAK,QAAS,MAAOiH,GAAM7X,KAC3B,KAAK,cAAe,MAAO6X,GAAMvf,WACjC,KAAK,WAAY,MAAOuf,GAAMgX,QAC9B,KAAK,UAAW,MAAOhX,GAAMhY,OAC7B,KAAK,UAAW,MAAOgY,GAAMiX,OAC7B,KAAK,SAAU,MAAOjX,GAAMkX,MAC5B,KAAK,KAAM,MAAOlX,GAAM/G,EACxB,KAAK,OAAQ,MAAO+G,GAAMmX,IAC1B,KAAK,OAAQ,MAAOnX,GAAM9X,IAC1B,KAAK,SAAU,MAAO8X,GAAMplB,MAC5B,KAAK,UAAW,MAAOolB,GAAMoX,OAC7B,KAAK,QAAS,MAAOpX,GAAMjD,KAC3B,KAAK,UAAW,MAAOiD,GAAMqX,OAC7B,KAAK,MAAO,MAAOrX,GAAMzG,GACzB,KAAK,OAAQ,MAAOyG,GAAMsX,IAC1B,KAAK,WAAY,MAAOtX,GAAMvU,QAC9B,KAAK,MAAO,MAAOuU,GAAMtgB,GACzB,KAAK,KAAM,MAAOsgB,GAAMvG,EACxB,KAAK,aAAc,MAAOuG,GAAMuX,UAChC,KAAK,SAAU,MAAOvX,GAAMhlB,MAC5B,KAAK,KAAM,MAAOglB,GAAMwX,EACxB,KAAK,aAAc,MAAOxX,GAAMyX,UAChC,KAAK,YAAa,MAAOzX,GAAM5P,SAC/B,KAAK,KAAM,MAAO4P,GAAM0X,EACxB,KAAK,QAAS,MAAO1X,GAAM2X,KAC3B,KAAK,MAAO,MAAO3X,GAAM7W,GACzB,KAAK,SAAU,MAAO6W,GAAM4X,MAC5B,KAAK,YAAa,MAAO5X,GAAMnY,SAC/B,KAAK,MAAO,MAAOmY,GAAM5C,GACzB,KAAK,OAAQ,MAAO4C,GAAMhD,IAC1B,KAAK,KAAM,MAAOgD,GAAM6X,EACxB,KAAK,UAAW,MAAO7X,GAAM8X,OAC7B,KAAK,UAAW,MAAO9X,GAAMzW,OAC7B,KAAK,YAAa,MAAOyW,GAAMxW,SAC/B,KAAK,SAAU,MAAOwW,GAAM1W,MAC5B,KAAK,WAAY,MAAO0W,GAAM3W,QAC9B,KAAK,SAAU,MAAO2W,GAAMrG,MAC5B,KAAK,MAAO,MAAOqG,GAAMpgB,GACzB,KAAK,SAAU,MAAOogB,GAAM7f,MAC5B,KAAK,QAAS,MAAO6f,GAAM9Y,KAC3B,KAAK,SAAU,MAAO8Y,GAAMnG,MAC5B,KAAK,OAAQ,MAAOmG,GAAMjZ,IAC1B,KAAK,QAAS,MAAOiZ,GAAMjG,KAC3B,KAAK,OAAQ,MAAOiG,GAAM/C,IAC1B,KAAK,MAAO,MAAO+C,GAAM/F,GACzB,KAAK,OAAQ,MAAO+F,GAAM8U,IAC1B,KAAK,SAAU,MAAO9U,GAAM8K,MAC5B,KAAK,MAAO,MAAO9K,GAAM+X,GACzB,KAAK,OAAQ,MAAO/X,GAAMgY,IAC1B,KAAK,QAAS,MAAOhY,GAAM7F,KAC3B,KAAK,OAAQ,MAAO6F,GAAMiY,IAC1B,KAAK,QAAS,MAAOjY,GAAMkY,KAC3B,SAAS,MAAOlY,GAAMmY,SAI1B,QAAAC,GAAiCC,GAC/B,OAAQA,GACN,IAAKrY,GAAMjW,SACX,IAAKiW,GAAM2W,GACX,IAAK3W,GAAMvf,YACX,IAAKuf,GAAMhY,QACX,IAAKgY,GAAMkX,OACX,IAAKlX,GAAMsX,KACX,IAAKtX,GAAMtgB,IACX,IAAKsgB,GAAM0X,GACX,IAAK1X,GAAM2X,MACX,IAAK3X,GAAM4X,OACX,IAAK5X,GAAMnY,UACX,IAAKmY,GAAM3W,SACX,IAAK2W,GAAMpgB,IACX,IAAKogB,GAAM8U,KACT,OAAO,CACT,SACE,OAAO,GAIb,QAAAwD,GAAiCD,GAC/B,OAAQA,GACN,IAAKrY,GAAMkX,OAAQ,MAAO,QAC1B,KAAKlX,GAAMwX,GAAI,MAAO,IACtB,KAAKxX,GAAMyX,WAAY,MAAO,YAC9B,KAAKzX,GAAM5C,IAAK,MAAO,KACvB,KAAK4C,GAAM8K,OAAQ,MAAO,QAC1B,KAAK9K,GAAMgY,KAAM,MAAO,MACxB,KAAKhY,GAAMkY,MAAO,MAAO,OACzB,KAAKlY,GAAMuY,YAAa,MAAO,KAC/B,KAAKvY,GAAMtD,MAAO,MAAO,GACzB,KAAKsD,GAAMC,SAAU,MAAO,GAC5B,KAAKD,GAAMQ,YAAa,MAAO,GAC/B,KAAKR,GAAMe,gBAAiB,MAAO,IACnC,KAAKf,GAAMsB,mBAAoB,MAAO,IACtC,KAAKtB,GAAM8B,cAAe,MAAO,IACjC,KAAK9B,GAAMiC,mBAAoB,MAAO,IACtC,KAAKjC,GAAM6B,qBAAsB,MAAO,KACxC,KAAK7B,GAAMgC,0BAA2B,MAAO,KAC7C,KAAKhC,GAAMsC,KAAM,MAAO,GACxB,KAAKtC,GAAM2C,MAAO,MAAO,GACzB,KAAK3C,GAAMwY,kBAAmB,MAAO,IACrC,KAAKxY,GAAMiD,SAAU,MAAO,GAC5B,KAAKjD,GAAMuD,MAAO,MAAO,GACzB,KAAKvD,GAAM+D,QAAS,MAAO,GAC3B,KAAK/D,GAAMoK,UAAW,MAAO,IAC7B,KAAKpK,GAAMuK,YAAa,MAAO,IAC/B,KAAKvK,GAAMqE,kBAAmB,MAAO,IACrC,KAAKrE,GAAMwE,wBAAyB,MAAO,IAC3C,KAAKxE,GAAM6E,oCAAqC,MAAO,KACvD,KAAK7E,GAAM+E,UAAW,MAAO,GAC7B,KAAK/E,GAAMkF,IAAK,MAAO,GACvB,KAAKlF,GAAMsF,MAAO,MAAO,GACzB,KAAKtF,GAAM2K,YAAa,MAAO,GAC/B,KAAK3K,GAAM4K,MAAO,MAAO,GACzB,KAAK5K,GAAMyF,oBAAqB,MAAO,IACvC,KAAKzF,GAAM0F,QAAS,MAAO,IAC3B,KAAK1F,GAAMmC,OAAQ,MAAO,GAC1B,KAAKnC,GAAMqC,YAAa,MAAO,IAC/B,KAAKrC,GAAM0C,aAAc,MAAO,IAChC,KAAK1C,GAAMgD,gBAAiB,MAAO,IACnC,KAAKhD,GAAMyY,yBAA0B,MAAO,KAC5C,KAAKzY,GAAMsD,aAAc,MAAO,IAChC,KAAKtD,GAAM8D,eAAgB,MAAO,IAClC,KAAK9D,GAAMoE,yBAA0B,MAAO,KAC5C,KAAKpE,GAAMuE,+BAAgC,MAAO,KAClD,KAAKvE,GAAM4E,2CAA4C,MAAO,MAC9D,KAAK5E,GAAM8E,iBAAkB,MAAO,IACpC,KAAK9E,GAAMiF,WAAY,MAAO,IAC9B,KAAKjF,GAAMqF,aAAc,MAAO,IAChC,SAAwB,MAAfjoB,SAAO,GAAe,IA3InB4iB,EAAA0W,YAAWA,EAmEX1W,EAAAoY,iBAAgBA,EAsBhBpY,EAAAsY,iBAAgBA,GA3FjBtY,EAAAltC,EAAAktC,QAAAltC,EAAAktC,UAkJjB,IAAAjhB,GAAA,WAUE,QAAAA,GAAYrK,EAAgBM,EAAYC,GAgDxC7hB,KAAAs6B,aAAsB,EA/CpBt6B,KAAKshB,OAASA,EACdthB,KAAK4hB,MAAQA,EACb5hB,KAAK6hB,IAAMA,EA8Cf,MA3CS8J,GAAAjK,KAAP,SAAY4jC,EAAU9hC,GACpB,GAAI8hC,EAAEhkC,QAAUkC,EAAElC,OAAQ,KAAM,IAAI5F,OAAM,kBAC1C,OAAO,IAAIiQ,GAAM25B,EAAEhkC,OACjBgkC,EAAE1jC,MAAQ4B,EAAE5B,MAAQ0jC,EAAE1jC,MAAQ4B,EAAE5B,MAChC0jC,EAAEzjC,IAAM2B,EAAE3B,IAAMyjC,EAAEzjC,IAAM2B,EAAE3B,MAI9B9gB,OAAAC,eAAI2qB,EAAAnqB,UAAA,WTo+SEL,ISp+SN,WACE,MAAO,IAAIwqB,GAAM3rB,KAAKshB,OAAQthB,KAAK4hB,MAAO5hB,KAAK4hB,QTs+S3C1gB,YAAY,EACZD,cAAc,ISr+SpBF,OAAAC,eAAI2qB,EAAAnqB,UAAA,STw+SEL,ISx+SN,WACE,MAAO,IAAIwqB,GAAM3rB,KAAKshB,OAAQthB,KAAK6hB,IAAK7hB,KAAK6hB,MT0+SzC3gB,YAAY,EACZD,cAAc,ISx+SpBF,OAAAC,eAAI2qB,EAAAnqB,UAAA,QT2+SEL,IS3+SN,WAIE,IAHA,GAAIwgB,GAAO3hB,KAAKshB,OAAOK,KACnB4jC,EAAMvlD,KAAK4hB,MACXJ,EAAO,EACJ+jC,KAAQ,GACW,IAApB5jC,EAAKhf,WAAW4iD,IAClB/jC,GAGJ,OAAOA,IT6+SHtgB,YAAY,EACZD,cAAc,IS3+SpBF,OAAAC,eAAI2qB,EAAAnqB,UAAA,UT8+SEL,IS9+SN,WAIE,IAHA,GAAIwgB,GAAO3hB,KAAKshB,OAAOK,KACnB4jC,EAAMvlD,KAAK4hB,MACXH,EAAS,EACN8jC,KAAQ,GACW,IAApB5jC,EAAKhf,WAAW4iD,IACpB9jC,GAEF,OAAOA,ITi/SHvgB,YAAY,EACZD,cAAc,IS/+SpB0qB,EAAAnqB,UAAA6f,SAAA,WACE,MAAOrhB,MAAKshB,OAAOK,KAAKK,UAAUhiB,KAAK4hB,MAAO5hB,KAAK6hB,MAIvD8J,IA3DajsB,GAAAisB,OA+Db,IAAA65B,GAAA,SAAAngC,GAgBE,QAAAmgC,GAAYlkC,EAAgByB,OAAA,KAAAA,MAAA,KAA5B,IAAAuC,GACED,EAAA7kB,KAAAR,KAAM+iB,IAAY/iB,IAdpBslB,GAAAzD,IAAW,EAEXyD,EAAAigC,IAAW,EACXjgC,EAAA2/B,OAAgB,EAChB3/B,EAAAmgC,SAAgB,EAEhBngC,EAAAogC,UAAiB,EACjBpgC,EAAAqgC,aAAsB,EACtBrgC,EAAAsgC,eAAsB,EAEtBtgC,EAAAugC,WAAoB,EACpBvgC,EAAAwgC,oBAA2B,EAIzBxgC,EAAKhE,OAASA,EACdgE,EAAKigC,IAAM,EACXjgC,EAAKzD,IAAMP,EAAOK,KAAK3f,OACvBsjB,EAAKvC,YAAcA,GAA4B,GAAIrf,MAEnD,IAAIie,GAAOL,EAAOK,IAWlB,IAPE2D,EAAKigC,IAAMjgC,EAAKzD,KACS,OAAzBF,EAAKhf,WAAW2iB,EAAKigC,QAEnBjgC,EAAKigC,IAKPjgC,EAAKigC,IAAM,EAAIjgC,EAAKzD,KACK,IAAzBF,EAAKhf,WAAW2iB,EAAKigC,MACQ,IAA7B5jC,EAAKhf,WAAW2iB,EAAKigC,IAAM,GAG3B,IADAjgC,EAAKigC,KAAO,EAEVjgC,EAAKigC,IAAMjgC,EAAKzD,KACS,IAAzBF,EAAKhf,WAAW2iB,EAAKigC,QAEnBjgC,EAAKigC,GTq+SP,OAAOjgC,GSxiRf,MAz+B+BlC,GAAAoiC,EAAAngC,GAkD7BmgC,EAAAhkD,UAAAsiB,KAAA,SAAKiiC,GAEH,WAFG,KAAAA,OAAA,GACH/lD,KAAK6lD,WAAa,EACX7lD,KAAKilD,MAAQjlD,KAAKgmD,WAAWD,IAG9BP,EAAAhkD,UAAAwkD,WAAR,SAAmBD,EAAgCE,OAAhC,KAAAF,OAAA,OAAgC,KAAAE,MAAsB9pC,IAAIC,UAE3E,KADA,GAAIuF,GAAO3hB,KAAKshB,OAAOK,KAChB3hB,KAAKulD,IAAMvlD,KAAK6hB,KAAK,CAC1B7hB,KAAKylD,SAAWzlD,KAAKulD,GACrB,IAAI7kD,GAAIihB,EAAKhf,WAAW3C,KAAKulD,IAC7B,QAAQ7kD,GAEN,UAEMV,KAAKulD,IAAMvlD,KAAK6hB,KACO,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,GAET,MAEF,SACA,OACA,QACA,QACA,UACIvlD,KAAKulD,GACP,MAEF,SAEE,QADEvlD,KAAKulD,IAELU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,KACb,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IAELU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,KACb,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IACA3Y,EAAMgC,2BAERhC,EAAMiC,oBAERjC,EAAM2K,WAEf,SACA,QACA,QACE,MAAO3K,GAAMsZ,aAEf,SAEE,QADElmD,KAAKulD,IAELU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,KACb,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IACA3Y,EAAM8D,gBAER9D,EAAM+D,OAEf,SAEE,KADE3wC,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMyF,mBAEf,IAA6B,IAAzB1wB,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAM8E,iBAGjB,MAAO9E,GAAM+E,SAEf,SAEE,QADE3xC,KAAKulD,IACA3Y,EAAMuZ,SAEf,SAEE,QADEnmD,KAAKulD,IACA3Y,EAAMwZ,UAEf,SAEE,KADEpmD,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMgD,eAEf,IAA6B,IAAzBjuB,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IAELU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,KACb,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IACA3Y,EAAMyY,0BAERzY,EAAMwY,kBAGjB,MAAOxY,GAAMiD,QAEf,SAEE,KADE7vC,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMoK,SAEf,IAA6B,IAAzBr1B,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMqC,YAGjB,MAAOrC,GAAMsC,IAEf,SAEE,QADElvC,KAAKulD,IACA3Y,EAAMtD,KAEf,SAEE,KADEtpC,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMuK,WAEf,IAA6B,IAAzBx1B,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAM0C,aAGjB,MAAO1C,GAAM2C,KAEf,SAEE,KADEvvC,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAAIC,EAAAukC,eAAe1kC,EAAKhf,WAAW3C,KAAKulD,MAEtC,QADEvlD,KAAKulD,IACA3Y,EAAM0Z,YAEf,IACEL,EAAiB,GAAKjmD,KAAKulD,IAAM,EAAIvlD,KAAK6hB,KACjB,IAAzBF,EAAKhf,WAAW3C,KAAKulD,MACQ,IAA7B5jC,EAAKhf,WAAW3C,KAAKulD,IAAM,GAG3B,MADAvlD,MAAKulD,KAAO,EACL3Y,EAAMuY,YAGjB,MAAOvY,GAAM2Z,GAEf,SAEE,KADEvmD,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAAwB,CAO/C,OAASvlD,KAAKulD,IAAMvlD,KAAK6hB,MACnBC,EAAAC,YAAYJ,EAAKhf,WAAW3C,KAAKulD,QAEvC,SAEF,GAA6B,IAAzB5jC,EAAKhf,WAAW3C,KAAKulD,KAA2B,CAElD,IADA,GAAIiB,IAAS,IACJxmD,KAAKulD,IAAMvlD,KAAK6hB,KAEvB,GACG,KAFHnhB,EAAIihB,EAAKhf,WAAW3C,KAAKulD,OAGvBvlD,KAAKulD,IAAM,EAAIvlD,KAAK6hB,KACS,IAA7BF,EAAKhf,WAAW3C,KAAKulD,IAAM,GAC3B,CACAvlD,KAAKulD,KAAO,EACZiB,GAAS,CACT,OAGCA,GACHxmD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACfzmD,KAAKihB,MAAMjhB,KAAKulD,KAAM,KAG1B,UAEF,GAA6B,IAAzB5jC,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMsD,aAGjB,MAAOtD,GAAMuD,KAEf,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACE,MAAOnwC,MAAK0mD,cACR9Z,EAAM+Z,eACN/Z,EAAM0Z,YAEZ,SAEE,QADEtmD,KAAKulD,IACA3Y,EAAMga,KAEf,SAEE,QADE5mD,KAAKulD,IACA3Y,EAAMia,SAEf,SAEE,KADE7mD,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IAELU,EAAiB,GACjBjmD,KAAKulD,IAAMvlD,KAAK6hB,KACS,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IACA3Y,EAAMoE,0BAERpE,EAAMqE,iBAEf,IAA6B,IAAzBtvB,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMe,gBAGjB,MAAOf,GAAMC,QAEf,SAEE,KADE7sC,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IAELU,EAAiB,GACjBjmD,KAAKulD,IAAMvlD,KAAK6hB,KACS,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IACA3Y,EAAM6B,sBAER7B,EAAM8B,aAEf,IAA6B,IAAzB/sB,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMka,mBAGjB,MAAOla,GAAMmC,MAEf,SAEE,KADE/uC,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAA8B,CAErD,KADEvlD,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IAELU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,KACb,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IACA3Y,EAAM4E,4CAER5E,EAAM6E,mCAEf,IAA6B,IAAzB9vB,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMuE,+BAGjB,MAAOvE,GAAMwE,wBAEf,GAA6B,IAAzBzvB,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMsB,mBAGjB,MAAOtB,GAAMQ,WAEf,SAEE,QADEptC,KAAKulD,IACA3Y,EAAMma,QAEf,SAEE,QADE/mD,KAAKulD,IACA3Y,EAAMoa,WAEf,SAEE,QADEhnD,KAAKulD,IACA3Y,EAAMqa,YAEf,SAEE,QADEjnD,KAAKulD,IAELU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,KACb,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IACA3Y,EAAMqF,cAERrF,EAAMsF,KAEf,UAEE,QADElyC,KAAKulD,IACA3Y,EAAMsa,SAEf,UAEE,KADElnD,KAAKulD,IACHU,EAAiB,GAAKjmD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CAC7C,GAA6B,KAAzBF,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAM0F,OAEf,IAA6B,IAAzB3wB,EAAKhf,WAAW3C,KAAKulD,KAEvB,QADEvlD,KAAKulD,IACA3Y,EAAMiF,WAGjB,MAAOjF,GAAMkF,GAEf,UAEE,QADE9xC,KAAKulD,IACA3Y,EAAMua,UAEf,UAEE,QADEnnD,KAAKulD,IACA3Y,EAAM4K,KAEf,SAEE,QADEx3C,KAAKulD,IACA3Y,EAAMwa,EAEf,SACE,GAAItlC,EAAAulC,kBAAkB3mD,GAAI,CACxB,GAAIohB,EAAAwlC,mBAAmB5mD,GAAI,CAEzB,IADA,GAAI6mD,GAAYvnD,KAAKulD,MAEjBvlD,KAAKulD,IAAMvlD,KAAK6hB,KAClBC,EAAA0lC,iBAAiB9mD,EAAIihB,EAAKhf,WAAW3C,KAAKulD,OAE1C,IAAKzjC,EAAAwlC,mBAAmB5mD,GAEtB,MADAV,MAAKulD,IAAMgC,EACJ3a,EAAM5Y,UAGjB,IAAIyzB,GAAc9lC,EAAKK,UAAUulC,EAAWvnD,KAAKulD,KAC7CmC,EAAe9a,EAAM0W,YAAYmE,EACrC,MACEC,GAAgB9a,EAAMmY,SACpBgB,GAAoBnZ,EAAMoY,iBAAiB0C,IAE7C,MAAOA,EAET1nD,MAAKulD,IAAMgC,EAEb,MAAO3a,GAAM5Y,WACR,GAAIlS,EAAA6lC,aAAajnD,GAAI,GACxBV,KAAKulD,GACP,OAOF,MALAvlD,MAAKijB,MACHmB,EAAAjC,eAAeylC,kBACf5nD,KAAKihB,MAAMjhB,KAAKulD,IAAKvlD,KAAKulD,IAAM,MAEhCvlD,KAAKulD,IACA3Y,EAAMmY,SAGnB,MAAOnY,GAAMib,WAGfrC,EAAAhkD,UAAAsmD,KAAA,SACEC,EACAhC,EACAiC,OAFA,KAAAD,OAAA,OACA,KAAAhC,OAAA,OACA,KAAAiC,MAAyB7rC,IAAIC,UAE7B,IAAIuF,GAAO3hB,KAAKshB,OAAOK,IACvB,IAAI3hB,KAAK6lD,UAAY,EAAG,CACtB,GAAI0B,GAAYvnD,KAAKulD,IACjB0C,EAAcjoD,KAAKilD,MACnBiD,EAAiBloD,KAAKylD,QAE1B,IADAzlD,KAAK6lD,UAAY7lD,KAAKgmD,WAAWD,EAAkBiC,GAC/CD,EAEF,IADA/nD,KAAK8lD,oBAAqB,IACjB9lD,KAAKylD,SAAW8B,GACvB,GAAIzlC,EAAAC,YAAYJ,EAAKhf,WAAW3C,KAAKylD,WAAY,CAC/CzlD,KAAK8lD,oBAAqB,CAC1B,OAIN9lD,KAAKulD,IAAMgC,EACXvnD,KAAKilD,MAAQgD,EACbjoD,KAAKylD,SAAWyC,EAElB,MAAOloD,MAAK6lD,WAGdL,EAAAhkD,UAAA2mD,KAAA,SAAKlD,GACH,GAAIsC,GAAYvnD,KAAKulD,IACjB0C,EAAcjoD,KAAKilD,MACnBiD,EAAiBloD,KAAKylD,SACtBuC,EAAoB7rC,IAAIC,SAC5B,QAAQ6oC,GACN,IAAKrY,GAAMQ,YACT4a,EAAoB,EAIxB,MADAhoD,MAAKilD,MAAQjlD,KAAKgmD,WAAWf,GAASrY,EAAM5Y,WAAYg0B,GACpDhoD,KAAKilD,OAASA,GAChBjlD,KAAK6lD,WAAa,GACX,IAEP7lD,KAAKulD,IAAMgC,EACXvnD,KAAKilD,MAAQgD,EACbjoD,KAAKylD,SAAWyC,GACT,IAeX1C,EAAAhkD,UAAA4mD,KAAA,WACEpoD,KAAK0lD,UAAY1lD,KAAKulD,IACtBvlD,KAAK2lD,YAAc3lD,KAAKilD,MACxBjlD,KAAK4lD,eAAiB5lD,KAAKylD,UAG7BD,EAAAhkD,UAAA6mD,MAAA,WACEroD,KAAKulD,IAAMvlD,KAAK0lD,UAChB1lD,KAAKilD,MAAQjlD,KAAK2lD,YAClB3lD,KAAKylD,SAAWzlD,KAAK4lD,eACrB5lD,KAAK6lD,WAAa,GAGpBL,EAAAhkD,UAAAyf,MAAA,SAAMW,EAAiBC,GAOrB,WAPI,KAAAD,OAAc,OAAG,KAAAC,OAAY,GAC7BD,EAAQ,GACVA,EAAQ5hB,KAAKylD,SACb5jC,EAAM7hB,KAAKulD,KACF1jC,EAAM,IACfA,EAAMD,GAED,GAAI+J,GAAM3rB,KAAKshB,OAAQM,EAAOC,IAGvC2jC,EAAAhkD,UAAA8mD,eAAA,WAGE,IAFA,GAAI3mC,GAAO3hB,KAAKshB,OAAOK,KACnBC,EAAQ5hB,KAAKulD,MAEbvlD,KAAKulD,IAAMvlD,KAAK6hB,KAClBC,EAAA0lC,iBAAiB7lC,EAAKhf,WAAW3C,KAAKulD,QAExC,MAAO5jC,GAAKK,UAAUJ,EAAO5hB,KAAKulD,MAGpCC,EAAAhkD,UAAA0B,WAAA,WAKE,IAJA,GAAIye,GAAO3hB,KAAKshB,OAAOK,KACnB4mC,EAAQ5mC,EAAKhf,WAAW3C,KAAKulD,OAC7B3jC,EAAQ5hB,KAAKulD,IACb11C,EAAS,KACA,CACX,GAAI7P,KAAKulD,KAAOvlD,KAAK6hB,IAAK,CACxBhS,GAAU8R,EAAKK,UAAUJ,EAAO5hB,KAAKulD,KACrCvlD,KAAKijB,MACHmB,EAAAjC,eAAeqmC,4BACfxoD,KAAKihB,MAAMW,EAAQ,EAAG5hB,KAAK6hB,KAE7B,OAEF,GAAInhB,GAAIihB,EAAKhf,WAAW3C,KAAKulD,IAC7B,IAAI7kD,GAAK6nD,EAAO,CACd14C,GAAU8R,EAAKK,UAAUJ,EAAO5hB,KAAKulD,MACrC,OAEF,GAAK,IAAD7kD,EAAJ,CAMA,GAAIohB,EAAAC,YAAYrhB,GAAI,CAClBmP,GAAU8R,EAAKK,UAAUJ,EAAO5hB,KAAKulD,KACrCvlD,KAAKijB,MACHmB,EAAAjC,eAAeqmC,4BACfxoD,KAAKihB,MAAMW,EAAQ,EAAG5hB,KAAKulD,KAE7B,SAEAvlD,KAAKulD,QAbL11C,IAAU8R,EAAKK,UAAUJ,EAAO5hB,KAAKulD,KACrC11C,GAAU7P,KAAKyoD,qBACf7mC,EAAQ5hB,KAAKulD,IAajB,MAAO11C,IAGT21C,EAAAhkD,UAAAinD,mBAAA,WACE,KAAMzoD,KAAKulD,KAAOvlD,KAAK6hB,IAKrB,MAJA7hB,MAAKijB,MACHmB,EAAAjC,eAAeumC,uBACf1oD,KAAKihB,MAAMjhB,KAAK6hB,MAEX,EAGT,IAAIF,GAAO3hB,KAAKshB,OAAOK,KACnBjhB,EAAIihB,EAAKhf,WAAW3C,KAAKulD,MAC7B,QAAQ7kD,GAEN,QACE,MAAO,IAET,SACE,MAAO,IAET,UACE,MAAO,IAET,UACE,MAAO,IAET,UACE,MAAO,IAET,UACE,MAAO,IAET,UACE,MAAO,IAET,SACE,MAAO,GAET,SACE,MAAO,GAET,UACE,MACEV,MAAKulD,IAAMvlD,KAAK6hB,KACS,KAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,IACAvlD,KAAK2oD,6BAEP3oD,KAAK4oD,mBAGd,SAEI5oD,KAAKulD,IAAMvlD,KAAK6hB,KACS,IAAzBF,EAAKhf,WAAW3C,KAAKulD,QAEnBvlD,KAAKulD,GAIX,SACA,UACA,UACE,MAAO,EACT,SACE,MAAO3hD,QAAOilD,aAAanoD,KAIjC8kD,EAAAhkD,UAAAsnD,kBAAA,WAIE,IAHA,GAAInnC,GAAO3hB,KAAKshB,OAAOK,KACnBC,EAAQ5hB,KAAKulD,IACbwD,GAAU,IACD,CACX,GAAI/oD,KAAKulD,KAAOvlD,KAAK6hB,IAAK,CACxB7hB,KAAKijB,MACHmB,EAAAjC,eAAe6mC,wCACfhpD,KAAKihB,MAAMW,EAAO5hB,KAAK6hB,KAEzB,OAEF,GAA6B,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAAzB,CAKA,GAAI7kD,GAAIihB,EAAKhf,WAAW3C,KAAKulD,IAC7B,IAAK,IAAD7kD,IAAwBqoD,EAAS,KACrC,IAAIjnC,EAAAC,YAAYrhB,GAAI,CAClBV,KAAKijB,MACHmB,EAAAjC,eAAe6mC,wCACfhpD,KAAKihB,MAAMW,EAAO5hB,KAAKulD,KAEzB,SAEAvlD,KAAKulD,IACPwD,GAAU,QAdN/oD,KAAKulD,IACPwD,GAAU,EAed,MAAOpnC,GAAKK,UAAUJ,EAAO5hB,KAAKulD,MAGpCC,EAAAhkD,UAAAynD,gBAAA,WAIE,IAHA,GAAItnC,GAAO3hB,KAAKshB,OAAOK,KACnBC,EAAQ5hB,KAAKulD,IACbjxB,EAAQ,EACLt0B,KAAKulD,IAAMvlD,KAAK6hB,KAAK,CAC1B,GAAInhB,GAASihB,EAAKhf,WAAW3C,KAAKulD,IAClC,KAAKzjC,EAAA0lC,iBAAiB9mD,GAAI,KAI1B,UAHEV,KAAKulD,IAGC7kD,GAEN,SACE4zB,GAAiB,EAARA,GAAa,EAAI,CAC1B,MAEF,UACEA,GAAiB,EAARA,GAAa,EAAI,CAC1B,MAEF,UACEA,GAAiB,EAARA,GAAa,EAAI,CAC1B,MAEF,SACEA,GAAS,GAUf,OANc,GAAVA,GACFt0B,KAAKijB,MACHmB,EAAAjC,eAAe+mC,iCACflpD,KAAKihB,MAAMW,EAAO5hB,KAAKulD,MAGpB5jC,EAAKK,UAAUJ,EAAO5hB,KAAKulD,MAGpCC,EAAAhkD,UAAAklD,YAAA,WACE,GAAI/kC,GAAO3hB,KAAKshB,OAAOK,IACvB,IAA6B,IAAzBA,EAAKhf,WAAW3C,KAAKulD,MAAuBvlD,KAAKulD,IAAM,EAAIvlD,KAAK6hB,IAClE,OAAQF,EAAKhf,WAAW3C,KAAKulD,IAAM,IACjC,QACA,SACA,QACA,QACA,QACA,SACE,OAAO,EAIb,IADA,GAAIA,GAAMvlD,KAAKulD,IACRA,EAAMvlD,KAAK6hB,KAAK,CACrB,GAAInhB,GAAIihB,EAAKhf,WAAW4iD,EACxB,IAAK,IAAD7kD,GAAsB,IAADA,GAAoB,KAADA,EAC1C,OAAO,CAET,IAAIA,EAAC,IAAkBA,EAAC,GAAgB,KACxC6kD,KAEF,OAAO,GAGTC,EAAAhkD,UAAA2nD,YAAA,WACE,GAAIxnC,GAAO3hB,KAAKshB,OAAOK,IACvB,IAA6B,IAAzBA,EAAKhf,WAAW3C,KAAKulD,MAAuBvlD,KAAKulD,IAAM,EAAIvlD,KAAK6hB,IAAK,CACvE,OAAQF,EAAKhf,WAAW3C,KAAKulD,IAAM,IAEjC,QACA,SAEE,MADAvlD,MAAKulD,KAAO,EACLvlD,KAAKopD,gBAEd,SACA,QAEE,MADAppD,MAAKulD,KAAO,EACLvlD,KAAKqpD,mBAEd,SACA,SAEE,MADArpD,MAAKulD,KAAO,EACLvlD,KAAKspD,mBAEhB,GAAIxnC,EAAAynC,aAAa5nC,EAAKhf,WAAW3C,KAAKulD,IAAM,IAAK,CAC/C,GAAI3jC,GAAQ5hB,KAAKulD,MACfvlD,KAAKulD,GACP,IAAIzhD,GAAQ9D,KAAKspD,kBAKjB,OAJAtpD,MAAKijB,MACHmB,EAAAjC,eAAeqnC,8CACfxpD,KAAKihB,MAAMW,EAAO5hB,KAAKulD,MAElBzhD,GAGX,MAAO9D,MAAKypD,sBAGdjE,EAAAhkD,UAAA4nD,eAAA,WAKE,IAJA,GAAIznC,GAAO3hB,KAAKshB,OAAOK,KACnBC,EAAQ5hB,KAAKulD,IACbzhD,EAAQ6xB,QAAQ,EAAG,GACnB+zB,EAAS/zB,QAAQ,GAAI,GAClB31B,KAAKulD,IAAMvlD,KAAK6hB,KAAK,CAC1B,GAAInhB,GAAIihB,EAAKhf,WAAW3C,KAAKulD,IAC7B,IAAI7kD,GAAC,IAAmBA,GAAC,GAEvBoD,EAAQuhC,QACNskB,QAAQ7lD,EAAO4lD,GACf/zB,QAAQj1B,EAAC,GAAgB,QAErB,IAAIA,GAAC,IAAkBA,GAAC,GAE9BoD,EAAQuhC,QACNskB,QAAQ7lD,EAAO4lD,GACf/zB,QAAQ,GAAKj1B,EAAC,GAAe,QAE1B,MAAIA,GAAC,IAAkBA,GAAC,KAO7B,KALAoD,GAAQuhC,QACNskB,QAAQ7lD,EAAO4lD,GACf/zB,QAAQ,GAAKj1B,EAAC,GAAe,MAK/BV,KAAKulD,IAQT,MANIvlD,MAAKulD,KAAO3jC,GACd5hB,KAAKijB,MACHmB,EAAAjC,eAAeynC,2BACf5pD,KAAKihB,MAAMW,IAGR9d,GAGT0hD,EAAAhkD,UAAAioD,mBAAA,WAKE,IAJA,GAAI9nC,GAAO3hB,KAAKshB,OAAOK,KACnBC,EAAQ5hB,KAAKulD,IACbzhD,EAAQ6xB,QAAQ,EAAG,GACnBk0B,EAASl0B,QAAQ,GAAI,GAClB31B,KAAKulD,IAAMvlD,KAAK6hB,KAAK,CAC1B,GAAInhB,GAAIihB,EAAKhf,WAAW3C,KAAKulD,IAC7B,MAAI7kD,GAAC,IAAmBA,GAAC,IAOvB,KALAoD,GAAQuhC,QACNskB,QAAQ7lD,EAAO+lD,GACfl0B,QAAQj1B,EAAC,GAAgB,MAK3BV,KAAKulD,IAQT,MANIvlD,MAAKulD,KAAO3jC,GACd5hB,KAAKijB,MACHmB,EAAAjC,eAAe2nC,eACf9pD,KAAKihB,MAAMW,IAGR9d,GAGT0hD,EAAAhkD,UAAA8nD,iBAAA,WAKE,IAJA,GAAI3nC,GAAO3hB,KAAKshB,OAAOK,KACnBC,EAAQ5hB,KAAKulD,IACbzhD,EAAQ6xB,QAAQ,EAAG,GACnBo0B,EAAQp0B,QAAQ,EAAG,GAChB31B,KAAKulD,IAAMvlD,KAAK6hB,KAAK,CAC1B,GAAInhB,GAAIihB,EAAKhf,WAAW3C,KAAKulD,IAC7B,MAAI7kD,GAAC,IAAmBA,GAAC,IAOvB,KALAoD,GAAQuhC,QACNskB,QAAQ7lD,EAAOimD,GACfp0B,QAAQj1B,EAAC,GAAgB,MAK3BV,KAAKulD,IAQT,MANIvlD,MAAKulD,KAAO3jC,GACd5hB,KAAKijB,MACHmB,EAAAjC,eAAe6nC,qBACfhqD,KAAKihB,MAAMW,IAGR9d,GAGT0hD,EAAAhkD,UAAA6nD,kBAAA,WAME,IALA,GAAI1nC,GAAO3hB,KAAKshB,OAAOK,KACnBC,EAAQ5hB,KAAKulD,IACbzhD,EAAQ6xB,QAAQ,EAAG,GACnBs0B,EAAQt0B,QAAQ,EAAG,GACnBu0B,EAAQv0B,QAAQ,EAAG,GAChB31B,KAAKulD,IAAMvlD,KAAK6hB,KAAK,CAC1B,GAAInhB,GAAIihB,EAAKhf,WAAW3C,KAAKulD,IAC7B,IAAK,IAAD7kD,EAEFoD,EAAQ6lD,QACN7lD,EACAmmD,OAEG,IAAK,IAADvpD,EAOT,KALAoD,GAAQuhC,QACNskB,QAAQ7lD,EAAOmmD,GACfC,KAKFlqD,KAAKulD,IAQT,MANIvlD,MAAKulD,KAAO3jC,GACd5hB,KAAKijB,MACHmB,EAAAjC,eAAegoC,sBACfnqD,KAAKihB,MAAMW,IAGR9d,GAGT0hD,EAAAhkD,UAAA4oD,UAAA,WAGE,IAFA,GAAIxoC,GAAQ5hB,KAAKulD,IACb5jC,EAAO3hB,KAAKshB,OAAOK,KAChB3hB,KAAKulD,IAAMvlD,KAAK6hB,KAAOC,EAAAukC,eAAe1kC,EAAKhf,WAAW3C,KAAKulD,SAC9DvlD,KAAKulD,GAET,IAAIvlD,KAAKulD,IAAMvlD,KAAK6hB,KAAgC,IAAzBF,EAAKhf,WAAW3C,KAAKulD,KAE9C,MADEvlD,KAAKulD,IACAvlD,KAAKulD,IAAMvlD,KAAK6hB,KAAOC,EAAAukC,eAAe1kC,EAAKhf,WAAW3C,KAAKulD,SAC9DvlD,KAAKulD,GAGX,IAAIvlD,KAAKulD,IAAMvlD,KAAK6hB,IAAK,CACvB,GAAInhB,GAAIihB,EAAKhf,WAAW3C,KAAKulD,IAC7B,IAAK,IAAD7kD,GAAoB,KAADA,EAUrB,MARIV,KAAKulD,IAAMvlD,KAAK6hB,MACS,IAAzBF,EAAKhf,WAAW3C,KAAKulD,MACI,IAAzB5jC,EAAKhf,WAAW3C,KAAKulD,OAEvBzjC,EAAAukC,eAAe1kC,EAAKhf,WAAW3C,KAAKulD,IAAM,OAExCvlD,KAAKulD,IAEFvlD,KAAKulD,IAAMvlD,KAAK6hB,KAAOC,EAAAukC,eAAe1kC,EAAKhf,WAAW3C,KAAKulD,SAC9DvlD,KAAKulD,IAIb,MAAO8E,YAAW1oC,EAAKK,UAAUJ,EAAO5hB,KAAKulD,OAG/CC,EAAAhkD,UAAAonD,kBAAA,WAIE,IAHA,GAAI0B,GAAS,EACTxmD,EAAQ,EACR6d,EAAO3hB,KAAKshB,OAAOK,KAChB3hB,KAAKulD,IAAMvlD,KAAK6hB,KAAK,CAC1B,GAAInhB,GAAIihB,EAAKhf,WAAW3C,KAAKulD,MAC7B,IAAI7kD,GAAC,IAAmBA,GAAC,GACvBoD,EAAgB,GAARA,EAAapD,EAAC,OACjB,IAAIA,GAAC,IAAkBA,GAAC,GAC7BoD,EAAgB,GAARA,EAAa,GAAKpD,EAAC,OACtB,MAAIA,GAAC,IAAkBA,GAAC,KAO7B,MAJAV,MAAKijB,MACHmB,EAAAjC,eAAeynC,2BACf5pD,KAAKihB,MAAMjhB,KAAKulD,IAAM,EAAGvlD,KAAKulD,MAEzB,EANPzhD,GAAgB,GAARA,EAAa,GAAKpD,EAAC,GAQ7B,GAAgB,KAAV4pD,EAAa,MAErB,MAAIA,IACFtqD,KAAKijB,MACHmB,EAAAjC,eAAeumC,uBACf1oD,KAAKihB,MAAMjhB,KAAKulD,MAEX,IAEF3hD,OAAOilD,aAAa/kD,IAGrB0hD,EAAAhkD,UAAAmnD,0BAAR,WACE,GAAI/mC,GAAQ5hB,KAAKulD,IACbzhD,EAAQ9D,KAAKopD,iBACbmB,EAAUtxC,QAAQnV,GAClB0mD,GAAU,CAEdxgC,SAAQ9Q,SAASpV,IACbymD,EAAU,UACZvqD,KAAKijB,MACHmB,EAAAjC,eAAesoC,4EACfzqD,KAAKihB,MAAMW,EAAO5hB,KAAKulD,MAEzBiF,GAAU,EAGZ,IAAI7oC,GAAO3hB,KAAKshB,OAAOK,IAiBvB,OAhBI3hB,MAAKulD,KAAOvlD,KAAK6hB,KACnB7hB,KAAKijB,MACHmB,EAAAjC,eAAeumC,uBACf1oD,KAAKihB,MAAMW,EAAO5hB,KAAK6hB,MAEzB2oC,GAAU,GACwB,KAAzB7oC,EAAKhf,WAAW3C,KAAKulD,OAC5BvlD,KAAKulD,KAEPvlD,KAAKijB,MACHmB,EAAAjC,eAAeuoC,qCACf1qD,KAAKihB,MAAMW,EAAO5hB,KAAKulD,MAEzBiF,GAAU,GAGRA,EAAgB,GACbD,EAAU,MACb3mD,OAAOilD,aAAa0B,GACpB3mD,OAAOilD,aAC2B,QAA/B0B,EAAU,OAAS,KAAO,IAC1BA,EAAU,OAAS,KAAY,QAIxC/E,EAAAhkD,UAAAmpD,OAAA,aAEFnF,GAz+B+BphC,EAAAtB,kBAAlBpjB,GAAA8lD,aT6yUP,SAAU7lD,EAAQD,EAASS,GAEjC,YU7kVA,SAAAiiB,GAAuCjD,GACrC,OAAQA,GACN,IAAK,KAAK,MAAO,0BACjB,KAAK,KAAK,MAAO,sBACjB,KAAK,KAAK,MAAO,gEACjB,KAAK,KAAK,MAAO,qGACjB,KAAK,KAAK,MAAO,6CACjB,KAAK,KAAK,MAAO,mDACjB,KAAK,KAAK,MAAO,sCACjB,KAAK,KAAK,MAAO,iCACjB,KAAK,KAAK,MAAO,8DACjB,KAAK,KAAK,MAAO,+CACjB,KAAK,KAAK,MAAO,sCACjB,KAAK,KAAK,MAAO,mCACjB,KAAK,KAAK,MAAO,sDACjB,KAAK,MAAM,MAAO,8BAClB,KAAK,MAAM,MAAO,sBAClB,KAAK,MAAM,MAAO,iBAClB,KAAK,MAAM,MAAO,2CAClB,KAAK,MAAM,MAAO,6BAClB,KAAK,MAAM,MAAO,mBAClB,KAAK,MAAM,MAAO,oDAClB,KAAK,MAAM,MAAO,sDAClB,KAAK,MAAM,MAAO,2DAClB,KAAK,MAAM,MAAO,oCAClB,KAAK,MAAM,MAAO,iDAClB,KAAK,MAAM,MAAO,mDAClB,KAAK,MAAM,MAAO,qCAClB,KAAK,MAAM,MAAO,sCAClB,KAAK,MAAM,MAAO,8CAClB,KAAK,MAAM,MAAO,mDAClB,KAAK,MAAM,MAAO,wDAClB,KAAK,MAAM,MAAO,0CAClB,KAAK,MAAM,MAAO,6DAClB,KAAK,MAAM,MAAO,6DAClB,KAAK,MAAM,MAAO,0CAClB,KAAK,MAAM,MAAO,wDAClB,KAAK,MAAM,MAAO,sCAClB,KAAK,MAAM,MAAO,kFAClB,KAAK,MAAM,MAAO,yFAClB,KAAK,MAAM,MAAO,+DAClB,KAAK,MAAM,MAAO,sBAClB,KAAK,MAAM,MAAO,gBAClB,KAAK,MAAM,MAAO,0EAClB,KAAK,MAAM,MAAO,wBAClB,KAAK,MAAM,MAAO,gDAClB,KAAK,MAAM,MAAO,iBAClB,KAAK,MAAM,MAAO,6BAClB,KAAK,MAAM,MAAO,yBAClB,KAAK,MAAM,MAAO,oBAClB,KAAK,MAAM,MAAO,+BAClB,KAAK,MAAM,MAAO,yBAClB,KAAK,MAAM,MAAO,0BAClB,KAAK,MAAM,MAAO,gCAClB,KAAK,MAAM,MAAO,uBAClB,KAAK,MAAM,MAAO,2CAClB,KAAK,MAAM,MAAO,0CAClB,KAAK,MAAM,MAAO,wBAClB,KAAK,MAAM,MAAO,uBAClB,KAAK,MAAM,MAAO,2DAClB,KAAK,MAAM,MAAO,8EAClB,KAAK,MAAM,MAAO,uCAClB,KAAK,MAAM,MAAO,gCAClB,KAAK,MAAM,MAAO,kFAClB,KAAK,MAAM,MAAO,wCAClB,KAAK,MAAM,MAAO,6BAClB,KAAK,MAAM,MAAO,yBAClB,KAAK,MAAM,MAAO,4CAClB,KAAK,MAAM,MAAO,mDAClB,KAAK,MAAM,MAAO,4BAClB,KAAK,MAAM,MAAO,6CAClB,KAAK,MAAM,MAAO,2CAClB,KAAK,MAAM,MAAO,kDAClB,KAAK,MAAM,MAAO,oDAClB,KAAK,MAAM,MAAO,8CAClB,KAAK,MAAM,MAAO,8GAClB,KAAK,MAAM,MAAO,6EAClB,KAAK,MAAM,MAAO,mEAClB,KAAK,MAAM,MAAO,4FAClB,KAAK,MAAM,MAAO,yFAClB,KAAK,MAAM,MAAO,4DAClB,KAAK,MAAM,MAAO,mDAClB,KAAK,MAAM,MAAO,wCAClB,KAAK,MAAM,MAAO,kFAClB,KAAK,MAAM,MAAO,uDAClB,KAAK,MAAM,MAAO,oCAClB,KAAK,MAAM,MAAO,qDAClB,KAAK,MAAM,MAAO,kEAClB,KAAK,MAAM,MAAO,0EAClB,KAAK,MAAM,MAAO,sEAClB,KAAK,MAAM,MAAO,qDAClB,KAAK,MAAM,MAAO,sCAClB,KAAK,MAAM,MAAO,+CAClB,KAAK,MAAM,MAAO,2CAClB,KAAK,MAAM,MAAO,kIAClB,KAAK,MAAM,MAAO,+CAClB,KAAK,MAAM,MAAO,uBAClB,SAAS,MAAO,IVg/UpBpe,OAAOC,eAAetB,EAAS,cAAgBoE,OAAO,KUnrVtD,SAAYqe,GACVA,IAAA,uDACAA,IAAA,+CACAA,IAAA,mHACAA,IAAA,6LACAA,IAAA,6EACAA,IAAA,yFACAA,IAAA,uEACAA,IAAA,qEACAA,IAAA,+HACAA,IAAA,iGACAA,IAAA,+EACAA,IAAA,yEACAA,IAAA,+FACAA,IAAA,gEACAA,IAAA,gDACAA,IAAA,gCACAA,IAAA,0FACAA,IAAA,8DACAA,IAAA,0CACAA,IAAA,4GACAA,IAAA,gHACAA,IAAA,0HACAA,IAAA,4EACAA,IAAA,sGACAA,IAAA,0GACAA,IAAA,wEACAA,IAAA,gFACAA,IAAA,gGACAA,IAAA,sGACAA,IAAA,gHACAA,IAAA,oFACAA,IAAA,8HACAA,IAAA,8HACAA,IAAA,wFACAA,IAAA,gHACAA,IAAA,gFACAA,IAAA,oKACAA,IAAA,kLACAA,IAAA,8HACAA,IAAA,gDACAA,IAAA,oCACAA,IAAA,gJACAA,IAAA,4CACAA,IAAA,oGACAA,IAAA,sCACAA,IAAA,8DACAA,IAAA,sDACAA,IAAA,4CACAA,IAAA,4DACAA,IAAA,sDACAA,IAAA,wDACAA,IAAA,oEACAA,IAAA,kDACAA,IAAA,wFACAA,IAAA,wFACAA,IAAA,oDACAA,IAAA,kDACAA,IAAA,0HACAA,IAAA,gKACAA,IAAA,kFACAA,IAAA,oEACAA,IAAA,kKACAA,IAAA,oFACAA,IAAA,sDACAA,IAAA,8CACAA,IAAA,4EACAA,IAAA,4FACAA,IAAA,oDACAA,IAAA,8EACAA,IAAA,kFACAA,IAAA,sGACAA,IAAA,0GACAA,IAAA,gFACAA,IAAA,sNACAA,IAAA,0JACAA,IAAA,sIACAA,IAAA,4LACAA,IAAA,sLACAA,IAAA,oGACAA,IAAA,oGACAA,IAAA,oFACAA,IAAA,wKACAA,IAAA,kHACAA,IAAA,4EACAA,IAAA,8FACAA,IAAA,gIACAA,IAAA,gJACAA,IAAA,gJACAA,IAAA,sGACAA,IAAA,sEACAA,IAAA,wFACAA,IAAA,gFACAA,IAAA,sQACAA,IAAA,kFACAA,IAAA,2CA/FUziB,EAAAyiB,iBAAAziB,EAAAyiB,oBAkGZziB,EAAA0iB,0BV6xVM,SAAUziB,EAAQD,EAASS,GAEjC,YW5vVA,SAAA4hB,GAA4BrhB,GAC1B,OAAQA,GACN,QACA,QACA,UACA,UACE,OAAO,CACT,SACE,OAAO,GAKb,QAAAinD,GAA6BjnD,GAC3B,OAAQA,GACN,QACA,OACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,WACA,WACE,OAAO,CACT,SACE,MAAOA,IAAC,MAAuBA,GAAC,MAKtC,QAAA2lD,GAA+B3lD,GAC7B,MAAOA,IAAC,IAAmBA,GAAC,GAI9B,QAAA6oD,GAA6B7oD,GAC3B,MAAOA,IAAC,IAAmBA,GAAC,GAI9B,QAAA2mD,GAAkC3mD,GAChC,MAAOA,IAAC,IAAkBA,GAAC,IACpBA,GAAC,IAAkBA,GAAC,KACnB,IAADA,GACC,IAADA,GACAA,EAAI,KAAQkqD,EAAyBlqD,GAI9C,QAAA4mD,GAAmC5mD,GACjC,MAAOA,IAAC,IAAkBA,GAAC,IAI7B,QAAA8mD,GAAiC9mD,GAC/B,MAAOA,IAAC,IAAkBA,GAAC,IACpBA,GAAC,IAAkBA,GAAC,KACpBA,GAAC,IAAmBA,GAAC,IACpB,IAADA,GACC,IAADA,GACAA,EAAI,KAAQmqD,EAAwBnqD,GA4I7C,QAAAoqD,GAA4B3rC,EAAW4rC,GACrC,GAAI5rC,EAAO4rC,EAAI,GAAI,OAAO,CAM1B,KAJA,GAEIC,GAFAx1B,EAAK,EACLC,EAAKs1B,EAAI/oD,OAGNwzB,EAAK,EAAIC,GAAI,CAGlB,GAFAu1B,EAAMx1B,GAAMC,EAAKD,GAAM,EACvBw1B,GAAOA,EAAM,EACTD,EAAIC,IAAQ7rC,GAAQA,GAAQ4rC,EAAIC,EAAM,GACxC,OAAO,CAEL7rC,GAAO4rC,EAAIC,GACbv1B,EAAKu1B,EAELx1B,EAAKw1B,EAAM,EAGf,OAAO,EAGT,QAAAJ,GAAkCzrC,GAChC,QAAOA,EAAO,GAAKA,EAAO,QACnB2rC,EAAmB3rC,EAAa8rC,GAGzC,QAAAJ,GAAiC1rC,GAC/B,QAAOA,EAAO,GAAKA,EAAO,QACnB2rC,EAAmB3rC,EAAa+rC,GXshVzCnqD,OAAOC,eAAetB,EAAS,cAAgBoE,OAAO,KWr4VtD,SAAkBqnD,GAEhBA,IAAA,eACAA,IAAA,wBACAA,IAAA,oCACAA,IAAA,oCACAA,IAAA,8CACAA,IAAA,yBAEAA,IAAA,kBACAA,IAAA,yCACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,wBACAA,IAAA,wBACAA,IAAA,wCACAA,IAAA,sCACAA,IAAA,oCACAA,IAAA,gCACAA,IAAA,0CACAA,IAAA,4BACAA,IAAA,4BACAA,IAAA,sCACAA,IAAA,8CACAA,IAAA,2CACAA,IAAA,4CACAA,IAAA,oBAEAA,IAAA,UAEAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YAEAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WAEAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UAEAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,YACAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,eACAA,IAAA,kBACAA,IAAA,6BACAA,IAAA,gCACAA,IAAA,4BACAA,IAAA,kBACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,8BACAA,IAAA,oBACAA,IAAA,8BACAA,IAAA,8BACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,2BACAA,IAAA,8BACAA,IAAA,0BACAA,IAAA,sBACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,0BACAA,IAAA,8BACAA,IAAA,kBACAA,IAAA,mBAEAA,IAAA,yBACAA,IAAA,wBACAA,IAAA,qCACAA,IAAA,aACAA,IAAA,+BAnIgBzrD,EAAAyrD,WAAAzrD,EAAAyrD,cAuIlBzrD,EAAAqiB,cAaAriB,EAAAioD,eAoBAjoD,EAAA2mD,iBAKA3mD,EAAA6pD,eAKA7pD,EAAA2nD,oBASA3nD,EAAA4nD,qBAKA5nD,EAAA8nD,kBAUA,IAAMyD,IACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCC,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QXk6VpD,SAAUvrD,EAAQD,EAASS,GAEjC,YY1uWA,SAAA+9C,GAA0Bl1B,GAKxB,IAJA,GAAIu8B,GAAM,EACN9iD,EAAMumB,EAAKhnB,OAGRujD,EAAM,EAAI9iD,GACK,IAApBumB,EAAKrmB,WAAW4iD,IAChBv8B,EAAKrmB,WAAW4iD,EAAM,IAAM6F,GAE5B7F,GAAO,GAGLA,EAAM,GAAK9iD,EAAMumB,EAAKhnB,UACxBgnB,EAAOA,EAAKhH,UAAUujC,EAAK9iD,GAC3BA,GAAO8iD,EACPA,EAAM,EAIR,KADA,GAAI1zB,GACG0zB,EAAM,EAAI9iD,GAAK,CAIpB,GAHAovB,GAAQ,EAIN7I,EAAKrmB,WAAW4iD,IAAQ6F,GACA,IAAxBpiC,EAAKrmB,WAAW4iD,EAAM,GACtB,CAGA,IADA1zB,EAAQ0zB,EAAM,GAAK9iD,IAEjB8iD,EAAM,EAAI9iD,GACVumB,EAAKrmB,WAAW4iD,EAAM,IAAM6F,EAC5B,CACApiC,EAAO6I,EACH7I,EAAKhH,UAAU,EAAGujC,GAClBv8B,EAAKhH,UAAU,EAAGujC,GAAOv8B,EAAKhH,UAAUujC,EAAM,GAClD9iD,GAAO,CACP,UAKF,IADAovB,EAAQ0zB,EAAM,GAAK9iD,IACkB,IAAxBumB,EAAKrmB,WAAW4iD,EAAM,IACjCA,EAAM,EAAI9iD,GACc,IAAxBumB,EAAKrmB,WAAW4iD,EAAM,IACtBv8B,EAAKrmB,WAAW4iD,EAAM,IAAM6F,EAC5B,CAGA,IADA,GAAIC,GAAO9F,IACF8F,GAAQ,GACf,GAAIriC,EAAKrmB,WAAW0oD,IAASD,EAAW,CAClC7F,EAAM8F,GAAQ,GACS,IAAzBriC,EAAKrmB,WAAW0oD,EAAO,IACE,IAAzBriC,EAAKrmB,WAAW0oD,EAAO,KAEvBriC,EAAO6I,EACH7I,EAAKhH,UAAU,EAAGqpC,GAClBriC,EAAKhH,UAAU,EAAGqpC,GAAQriC,EAAKhH,UAAUujC,EAAM,GACnD9iD,GAAO8iD,EAAM,EAAI8F,EACjB9F,EAAM8F,EAAO,EAEf,OAKJ,GAAIA,EAAO,GAAK9F,EAAM,IACT,GAAPA,GACgB,IAAlBv8B,EAAKrmB,WAAW,IACE,IAAlBqmB,EAAKrmB,WAAW,IAChB,CACAqmB,EAAOA,EAAKhH,UAAUujC,EAAM,GAC5B9iD,EAAMumB,EAAKhnB,MACX,YAKRujD,IAEF,MAAO9iD,GAAM,EAAIumB,EAAO,IAI1B,QAAA6D,GAAwBtL,EAAwB+pC,GAC9C,MAAI/pC,GAAe48B,WAAW,QACrB58B,EAEF28B,EACLqN,EAAQD,GAAU1nD,OAAOilD,aAAauC,GAAa7pC,GAKvD,QAAAgqC,GAAwBhqC,GAEtB,IADA,GAAIgkC,GAAMhkC,EAAevf,SAChBujD,EAAM,GACb,GAAIhkC,EAAe5e,WAAW4iD,IAAQ6F,EACpC,MAAO7pC,GAAeS,UAAU,EAAGujC,EAGvC,OAAO,IZuoWTxkD,OAAOC,eAAetB,EAAS,cAAgBoE,OAAO,GYlvWtD,IAAMsnD,GAAS,EAMf1rD,GAAAw+C,YAoFAx+C,EAAAmtB,UAUAntB,EAAA6rD,WZivWM,SAAU5rD,EAAQD,EAASS,GAEjCA,EAAoB,IACpBR,EAAOD,QAAUS,EAAoB,KAK/B,SAAUR,EAAQD,EAASS,GAEjC,YAEAY,QAAOC,eAAetB,EAAS,cAAgBoE,OAAO,Iar2WtD3D,EAAA,IACAA,EAAA,IACAA,EAAA,Kb22WM,SAAUR,EAAQD,EAASS,Ic72WjC,SAAAuwB,GAwGA,QAAA86B,KACA9vC,MAAA+vC,kBACA/vC,MAAA+vC,kBAAAzrD,KAAAwrD,GAEAxrD,KAAA0rD,MAAA1rD,KAAAY,KAAA,KAAAZ,KAAA6gB,QAAA,SAAAnF,QAAAgwC,MAWA,QAAAC,GAAA9qC,GACA7gB,KAAA6gB,WAAA,mBACAnF,MAAA+vC,kBACA/vC,MAAA+vC,kBAAAzrD,KAAA2rD,GAEA3rD,KAAA0rD,MAAA1rD,KAAAY,KAAA,KAAAZ,KAAA6gB,QAAA,SAAAnF,QAAAgwC,MA5HA,GAAAE,GAAA,mBAAA5tB,qBAAA,KAAAtN,MAAA3wB,IAEAgB,QAAA8qD,iBACAD,EAAA,YAAA9nD,GAA0C,MAAAA,IAAA,SAE1CgoD,WAAgBhoD,OAAA,IAAAioD,UAAA,GAChB3vC,WAAgBtY,MAAA,IAAAioD,UAAA,KAGhBhrD,OAAA8qD,iBACAD,EAAA,aAAA9nD,GAA4C,MAAAA,IAAA,SAE5CgoD,WAAgBhoD,OAAA,MAAAioD,UAAA,GAChB3vC,WAAgBtY,MAAA,MAAAioD,UAAA,KAGhBhrD,OAAA8qD,iBACAD,EAAA,IAAAA,EAAA,eAAA9nD,GAAmE,SAAAA,IAEnEgoD,WAAgBhoD,OAAA,WAAAioD,UAAA,GAChB3vC,WAAgBtY,MAAA,WAAAioD,UAAA,KAGhBhrD,OAAA8qD,iBACAD,EAAA,YAAA9nD,GAA0C,WAAAA,IAE1CgoD,WAAgBhoD,MAAA,EAAAioD,UAAA,GAChB3vC,WAAgBtY,MAAA,IAAAioD,UAAA,KAGhBhrD,OAAA8qD,iBACAD,EAAA,aAAA9nD,GAA4C,aAAAA,IAE5CgoD,WAAgBhoD,MAAA,EAAAioD,UAAA,GAChB3vC,WAAgBtY,MAAA,MAAAioD,UAAA,KAGhBhrD,OAAA8qD,iBACAD,EAAA,IAAAA,EAAA,eAAA9nD,GAAmE,MAAAA,KAAA,IAEnEgoD,WAAgBhoD,MAAA,EAAAioD,UAAA,GAChB3vC,WAAgBtY,MAAA,WAAAioD,UAAA,KAGhBhrD,OAAA8qD,iBACAD,EAAA,cAAA9nD,GAA8C,QAAAA,IAE9CgoD,WAAgBhoD,MAAA,EAAAioD,UAAA,GAChB3vC,WAAgBtY,MAAA,EAAAioD,UAAA,KAGhBhrD,OAAA8qD,iBACAD,EAAA,aAAA9nD,GAA4C,MAAAkoD,MAAAC,OAAAnoD,KAE5CgoD,WAAgBhoD,MAAAkoD,KAAAC,QAAA,eAAAF,UAAA,GAChB3vC,WAAgBtY,MAAAkoD,KAAAC,OAAA,eAAAF,UAAA,GAChBG,kBAAuBpoD,OAAA,SAAAioD,UAAA,GACvBI,kBAAuBroD,MAAA,SAAAioD,UAAA,GACvBK,SAActoD,MAAAkoD,KAAAC,OAAA,cAAAF,UAAA,KAGdhrD,OAAA8qD,iBACAD,EAAA,aAAA9nD,GAA4C,OAAAA,IAE5CgoD,WAAgBhoD,OAAA,uBAAAioD,UAAA,GAChB3vC,WAAgBtY,MAAA,uBAAAioD,UAAA,GAChBG,kBAAuBpoD,OAAA,iBAAAioD,UAAA,GACvBI,kBAAuBroD,MAAA,iBAAAioD,UAAA,GACvBK,SAActoD,MAAA,sBAAAioD,UAAA,KAGdH,EAAA,IAAAI,KAAAK,MAEAT,EAAA,IAAAI,KAAAM,IAEAV,EAAA,IAAAI,KAAAxrB,IAEAorB,EAAA,IAAAI,KAAAO,IAEAX,EAAA,KAAAI,KAAAlU,KAEA8T,EAAA,MAAAI,KAAAQ,MAEAZ,EAAA,gBAAAj3C,EAAAC,EAAAV,GACA,MAAAA,GAAAS,EAAAC,GAGAg3C,EAAA,KAAAI,KAAAS,KAEAb,EAAA,MAAAI,KAAAU,MAEAd,EAAA,eAAA9nD,GACA,GAAAwhD,GAAAxhD,GAAA,WACA0f,GAAA,SAAA1f,IAAA,CAIA,OAHAA,GAAAwhD,EAAA9hC,EACA8hC,EAAAxhD,GAAA,SACA0f,GAAA,MAAA1f,IAAA,GACAwhD,EAAA9hC,GAGAooC,EAAA,iBAAA9nD,GACA,MAAAA,IAAA,QAAAA,GAAA,iBAAAA,GAUA0nD,EAAAhqD,UAAAT,OAAAgO,OAAA2M,MAAAla,WACAgqD,EAAAhqD,UAAAZ,KAAA,mBACA4qD,EAAAhqD,UAAAqf,QAAA,cAEA+qC,EAAA,uBACA,SAAAJ,IAWAG,EAAAnqD,UAAAT,OAAAgO,OAAA2M,MAAAla,WACAmqD,EAAAnqD,UAAAZ,KAAA,iBAEAgrD,EAAA,gBAAAe,EAAA9rC,GACA,GAAA8rC,EAAA,MAAAA,EACA,UAAAhB,GAAA9qC,IAGA+qC,EAAA,oBAAA9nD,GACA,MAAAA,IAGA8nD,EAAA,kBAAAppD,EAAAoqD,GACA,SAAAC,SAAArqD,MAAAsqD,KAGAlpD,OAAA,uBAAAH,GACA,MAAAG,QAAAilD,aAAAxzB,MAAAzxB,OAAAH,IAGAG,OAAA,wBAAAH,GACA,MAAAG,QAAAmpD,cAAA13B,MAAAzxB,OAAAH,Mdk3W6BjD,KAAKd,EAASS,EAAoB,KAIzD,SAAUR,EAAQD,EAASS,Ie1gXjC,SAAAuwB,GAEA,KAAAs8B,GAAAt8B,EAAAu8B,UAAA9sD,EAAA,GAEA,QAAA+sD,KAAAF,IACAE,EAAA/O,WAAA,cAAA+O,EAAA/O,WAAA,gBACAztB,EAAAw8B,GAAAF,EAAAE,GAIAx8B,GAAA3uB,gBAAA,SAAAy8B,GACA,MAAAA,GACAwuB,EAAAG,QAAA3uB,GADA,GAIA9N,EAAAhhB,YAAA,SAAA5N,GACAA,GAAAkrD,EAAAI,MAAAtrD,IAGA4uB,EAAA28B,YAAA,SAAAC,EAAAC,EAAAnsD,GACA,MAAA4rD,GAAAQ,SAAAF,EAAAC,EAAAnsD,IAGAsvB,EAAAvuB,MAAA,SAAAL,EAAAQ,GACA0qD,EAAAS,OAAA3rD,GAAAQ,GAGAouB,EAAA5tB,KAAA,SAAAhB,GACA,MAAAkrD,GAAAS,OAAA3rD,GAKA,MAAAqN,GAAAhP,EAAA,GAAAgP,MAEAA,GAAA3N,UAAAia,OAAA,WACA,GAAAiyC,GAAAV,EAAAW,MACA3qD,EAAA,EAIA,OAHAgqD,GAAAW,MAAA,SAAAC,GAAgC5qD,GAAA4qD,EAAA,MAChCC,qBAAA7tD,KAAAoP,KACA49C,EAAAW,MAAAD,EACA1qD,GAGAmM,EAAA3N,UAAAma,QAAA,WACA,GAAA+xC,GAAAV,EAAAW,MACA3qD,EAAA,EAIA,OAHAgqD,GAAAW,MAAA,SAAAC,GAAgC5qD,GAAA4qD,EAAA,MAChCE,0BAAA9tD,KAAAoP,KACA49C,EAAAW,MAAAD,EACA1qD,Kf+gX6BxC,KAAKd,EAASS,EAAoB,KAIzD,SAAUR,EAAQD,GgBrkXxBC,EAAAD,QAAAO,GhB2kXM,SAAUN,EAAQD,EAASS,GAEjC,YiBpiXA,SAAAq0C,GACEuZ,EACAr9B,EACAuH,GAEA,OAAQvH,EAAO/Z,cAEb,IAAK,MACH,MAAIo3C,GAAS5tB,aAAe9b,EAAAyB,KAAKW,IACxBsnC,EAASpuD,OAAO+Q,UAAUs9C,MAEjCD,EAAS5tB,YAAc9b,EAAAyB,KAAKY,IACrBqnC,EAASpuD,OAAOiR,UAAUo9C,KAGrC,KAAK,WACH,MAAID,GAAS5tB,aAAe9b,EAAAyB,KAAKW,IACxBsnC,EAASpuD,OAAO+Q,UAAUu9C,MAEjCF,EAAS5tB,YAAc9b,EAAAyB,KAAKY,IACrBqnC,EAASpuD,OAAOiR,UAAUq9C,KAGrC,KAAK,YAEH,MADAF,GAAS5tB,YAAc4tB,EAASloC,QAAQU,UACjCwnC,EAASpuD,OAAOoS,gBAAgB,YAAag8C,EAAS5tB,YAAYtG,gBAM7E,MAJAk0B,GAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEN8sC,EAASpuD,OAAOoW,oBAIzB,QAAA69B,GACEma,EACAvsD,EACAyvB,EACA1f,EACAq3B,EACA3Q,GAEA,GAEI3V,GACAC,EACAC,EACAxf,EAEAkrD,EACAC,EAEAx8C,EACA1C,EAXAtP,EAASouD,EAASpuD,MAiBtB,QAAQ6B,EAAUmV,cAIhB,IAAK,QAEH,GADAo3C,EAAS5tB,YAAc9b,EAAAyB,KAAKU,KACL,GAAnBjV,EAASvP,OAWX,MAVIivB,IAAyC,GAAxBA,EAAcjvB,QACjC+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAGzD0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAKhB,MAJA+rD,GAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAGzD,QAAQqnC,EAAS5tB,YAAYjZ,MAE3B,QACEgnC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKW,KAC/DzjB,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAASw1B,MACjCl/B,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAWgZ,KAErD,MAEF,SACEmxC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKY,KAC/D1jB,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAASy1B,MACjCn/B,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAWkZ,KAErD,MAEF,SACE8wC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,MAEF,SACE/S,EAAMrD,EAAOwQ,UAAU,GAK3B,MADA49C,GAAS5tB,YAAc9b,EAAAyB,KAAKU,KACrBxjB,CAET,KAAK,WAEH,GADA+qD,EAAS5tB,YAAc9b,EAAAyB,KAAKU,KACL,GAAnBjV,EAASvP,OAWX,MAVIivB,IAAyC,GAAxBA,EAAcjvB,QACjC+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAGzD0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAKhB,MAJA+rD,GAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAGzD,QAAQqnC,EAAS5tB,YAAYjZ,MAE3B,QACEgnC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKW,KAC/DzjB,EAAMrD,EAAOuV,aACXvV,EAAOuR,aAAaqT,EAAAlb,SAASw1B,MAC3Bl/B,EAAOmR,YAAYyT,EAAAle,QAAQ+nD,OACzBzuD,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,IAE1C3iB,EAAO+Q,UAAUu9C,MAEnBtuD,EAAOwQ,UAAU,GACjBxQ,EAAOuR,aAAaqT,EAAAlb,SAASo1B,MAC3B9+B,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAWgZ,KACnDpd,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAWgZ,MAGvD,MAEF,SACEmxC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKY,KAC/D1jB,EAAMrD,EAAOuV,aACXvV,EAAOuR,aAAaqT,EAAAlb,SAASy1B,MAC3Bn/B,EAAOmR,YAAYyT,EAAAle,QAAQgoD,OACzB1uD,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,IAE1C3iB,EAAOiR,UAAUq9C,MAEnBtuD,EAAOwQ,UAAU,GACjBxQ,EAAOuR,aAAaqT,EAAAlb,SAASq1B,MAC3B/+B,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAWkZ,KACnDtd,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAWkZ,MAGvD,MAEF,SACE8wC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,MAEF,SACE/S,EAAMrD,EAAOwQ,UAAU,GAI3B,MADA49C,GAAS5tB,YAAc9b,EAAAyB,KAAKU,KACrBxjB,CAET,KAAK,MACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,IAAG,EAGzD,QAAQ4xC,EAAS5tB,YAAYjZ,MAE3B,QACElkB,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQioD,OAAQhsC,EACzC,MAEF,QACE,GAAIyrC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,OACE/S,EAAMrD,EAAOmR,YACXi9C,EAASloC,QAAQsb,SACb5c,EAAAle,QAAQkoD,OACRhqC,EAAAle,QAAQioD,OACZhsC,EAEF,MAEF,QACA,OACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQkoD,OAAQjsC,EACzC,MAEF,SACA,QACA,QACEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,MACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,IAAG,EAGzD,QAAQ4xC,EAAS5tB,YAAYjZ,MAE3B,QACElkB,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQmoD,OAAQlsC,EACzC,MAEF,QACE,GAAIyrC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,OACE/S,EAAMrD,EAAOmR,YACXi9C,EAASloC,QAAQsb,SACb5c,EAAAle,QAAQooD,OACRlqC,EAAAle,QAAQmoD,OACZlsC,EAEF,MAEF,QACA,OACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQooD,OAAQnsC,EACzC,MAEF,SACA,QACA,QACEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,SACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,IAAG,EAGzD,QAAQ4xC,EAAS5tB,YAAYjZ,MAE3B,QACElkB,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQqoD,UAAWpsC,EAC5C,MAEF,QACE,GAAIyrC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,OACE/S,EAAMrD,EAAOmR,YACXi9C,EAASloC,QAAQsb,SACb5c,EAAAle,QAAQsoD,UACRpqC,EAAAle,QAAQqoD,UACZpsC,EAEF,MAEF,QACA,OACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQsoD,UAAWrsC,EAC5C,MAEF,SACA,QACA,QACEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,OACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,IAAG,EAIzD,QAFAoG,EAAOwrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAAS5tB,aAEhD4tB,EAAS5tB,YAAYjZ,MAE3B,OACA,OACA,OACA,OACA,QACElkB,EAAMgB,EAAAi6B,qBACJt+B,EAAOuR,aAAaqT,EAAAlb,SAASulD,QAAStsC,EAAMC,GAC5CwrC,EAAS5tB,YACTxgC,EAGJ,QACA,OACEqD,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAASulD,QAAStsC,EAAMC,EAClD,MAEF,QACE,GAAIwrC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,OACE/S,EAAMrD,EAAOuR,aACX68C,EAASloC,QAAQsb,SACb5c,EAAAlb,SAASwlD,QACTtqC,EAAAlb,SAASulD,QACbtsC,EACAC,EAEF,MAEF,QACA,OACEvf,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAASwlD,QAASvsC,EAAMC,EAClD,MAEF,SACEwrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,OACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,IAAG,EAIzD,QAFAoG,EAAOwrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAAS5tB,aAEhD4tB,EAAS5tB,YAAYjZ,MAE3B,OACA,OACA,OACA,OACA,QACElkB,EAAMgB,EAAAi6B,qBACJt+B,EAAOuR,aAAaqT,EAAAlb,SAASylD,QAASxsC,EAAMC,GAC5CwrC,EAAS5tB,YACTxgC,EAEF,MAEF,QACA,OACEqD,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAASylD,QAASxsC,EAAMC,EAClD,MAEF,QACE,GAAIwrC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,OACE/S,EAAMrD,EAAOuR,aACX68C,EAASloC,QAAQsb,SACb5c,EAAAlb,SAAS0lD,QACTxqC,EAAAlb,SAASylD,QACbxsC,EACAC,EAEF,MAEF,QACA,OACEvf,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAAS0lD,QAASzsC,EAAMC,EAClD,MAEF,SACEwrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,MACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAGzD,QAAQqnC,EAAS5tB,YAAYjZ,MAE3B,OACA,OAGA,OACEgnC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAK3J,KAC/DnZ,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOuR,aAAaqT,EAAAlb,SAASmmC,OAC3B7vC,EAAOwQ,UAAU,GACjBxQ,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW2Y,MAErD/c,EAAOuR,aAAaqT,EAAAlb,SAASgkC,MAC3B1tC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW2Y,KACnD/c,EAAOwQ,UAAU,IAGrB,MAEF,QACE+9C,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB+zB,EAASloC,QAAQU,WAC3EvjB,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOuR,aACL68C,EAASloC,QAAQsb,SACb5c,EAAAlb,SAASomC,OACTlrB,EAAAlb,SAASmmC,OACbue,EAASloC,QAAQU,UAAUyc,aAAarjC,GACxCA,EAAO8R,eAAey8C,EAAWx8C,MAAOq8C,EAASloC,QAAQ4wB,iBAE3D92C,EAAOuR,aACL68C,EAASloC,QAAQsb,SACb5c,EAAAlb,SAASikC,MACT/oB,EAAAlb,SAASgkC,MACb1tC,EAAO8R,eAAey8C,EAAWx8C,MAAOq8C,EAASloC,QAAQ4wB,gBACzDsX,EAASloC,QAAQU,UAAUyc,aAAarjC,IAG5C,MAEF,QACEuuD,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKG,KAC/DjjB,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOuR,aAAaqT,EAAAlb,SAASomC,OAC3B9vC,EAAO2Q,UAAU,EAAG,GACpB3Q,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW6Y,MAErDjd,EAAOuR,aAAaqT,EAAAlb,SAASikC,MAC3B3tC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW6Y,KACnDjd,EAAO2Q,UAAU,EAAG,IAGxB,MAEF,QACE,GAAIy9C,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,OACA,OACA,OACA,OACA,QACE/S,EAAMsf,CACN,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQ+nD,OAAQ9rC,EACzC,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQgoD,OAAQ/rC,EACzC,MAEF,SACEtf,EAAMrD,EAAOoW,mBACb,MAEF,SACEg4C,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,MACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAIzD,QAFAnE,EAAOwrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAAS5tB,aAEhD4tB,EAAS5tB,YAAYjZ,MAE3B,OACA,OACA,OACEgnC,EAAaH,EAAS5wB,gBAAgBxD,aAAatV,EAAAyB,KAAK3J,KACxDgyC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAK3J,KAC/D4xC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aAAaqT,EAAAlb,SAASgkC,MAC3B1tC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW2Y,KACnD/c,EAAO8R,eAAe08C,EAAWz8C,MAAO6S,EAAAxgB,WAAW2Y,MAGvD,MAEF,QACA,OACA,OACA,QACEwxC,EAAaH,EAAS5wB,gBAAgBxD,aAAatV,EAAAyB,KAAK3J,KACxDgyC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAK3J,KAC/D4xC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aAAaqT,EAAAlb,SAASkkC,MAC3B5tC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW2Y,KACnD/c,EAAO8R,eAAe08C,EAAWz8C,MAAO6S,EAAAxgB,WAAW2Y,MAGvD,MAEF,QACEwxC,EAAaH,EAAS5wB,gBAAgBxD,aAAatV,EAAAyB,KAAKG,KACxDkoC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKG,KAC/D8nC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aAAaqT,EAAAlb,SAASikC,MAC3B3tC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW6Y,KACnDjd,EAAO8R,eAAe08C,EAAWz8C,MAAO6S,EAAAxgB,WAAW6Y,MAGvD,MAEF,QACEsxC,EAAaH,EAAS5wB,gBAAgBxD,aAAatV,EAAAyB,KAAKG,KACxDkoC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKG,KAC/D8nC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aAAaqT,EAAAlb,SAASmkC,MAC3B7tC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW6Y,KACnDjd,EAAO8R,eAAe08C,EAAWz8C,MAAO6S,EAAAxgB,WAAW6Y,MAGvD,MAEF,QACEsxC,EAAaH,EAAS5wB,gBAAgBxD,aAAao0B,EAASloC,QAAQU,WACpE4nC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB+zB,EAASloC,QAAQU,WAC3EwnC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aACL68C,EAASloC,QAAQsb,SACb5c,EAAAlb,SAASikC,MACT/oB,EAAAlb,SAASgkC,MACb1tC,EAAO8R,eAAey8C,EAAWx8C,MAAOq8C,EAASloC,QAAQ4wB,gBACzD92C,EAAO8R,eAAe08C,EAAWz8C,MAAOq8C,EAASloC,QAAQ4wB,iBAG7D,MAEF,QACE,GAAIsX,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAEFm4C,EAAaH,EAAS5wB,gBAAgBxD,aAAao0B,EAASloC,QAAQU,WACpE4nC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB+zB,EAASloC,QAAQU,WAC3EwnC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aACL68C,EAASloC,QAAQsb,SACb5c,EAAAlb,SAASmkC,MACTjpB,EAAAlb,SAASkkC,MACb5tC,EAAO8R,eAAey8C,EAAWx8C,MAAOq8C,EAASloC,QAAQ4wB,gBACzD92C,EAAO8R,eAAe08C,EAAWz8C,MAAOq8C,EAASloC,QAAQ4wB,iBAG7D,MAEF,SACEzzC,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAAS2lD,OAAQ1sC,EAAMC,EACjD,MAEF,SACEvf,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAAS4lD,OAAQ3sC,EAAMC,EACjD,MAEF,SACEwrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,MACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAIzD,QAFAnE,EAAOwrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAAS5tB,aAEhD4tB,EAAS5tB,YAAYjZ,MAE3B,OACA,OACA,OACEgnC,EAAaH,EAAS5wB,gBAAgBxD,aAAatV,EAAAyB,KAAK3J,KACxDgyC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAK3J,KAC/D4xC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aAAaqT,EAAAlb,SAASyjC,MAC3BntC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW2Y,KACnD/c,EAAO8R,eAAe08C,EAAWz8C,MAAO6S,EAAAxgB,WAAW2Y,MAGvD,MAEF,QACA,OACA,OACA,QACEwxC,EAAaH,EAAS5wB,gBAAgBxD,aAAatV,EAAAyB,KAAK3J,KACxDgyC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAK3J,KAC/D4xC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aAAaqT,EAAAlb,SAAS2jC,MAC3BrtC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW2Y,KACnD/c,EAAO8R,eAAe08C,EAAWz8C,MAAO6S,EAAAxgB,WAAW2Y,MAGvD,MAEF,QACEwxC,EAAaH,EAAS5wB,gBAAgBxD,aAAatV,EAAAyB,KAAKG,KACxDkoC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKG,KAC/D8nC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aAAaqT,EAAAlb,SAAS0jC,MAC3BptC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW6Y,KACnDjd,EAAO8R,eAAe08C,EAAWz8C,MAAO6S,EAAAxgB,WAAW6Y,MAGvD,MAEF,QACEsxC,EAAaH,EAAS5wB,gBAAgBxD,aAAatV,EAAAyB,KAAKG,KACxDkoC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKG,KAC/D8nC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aAAaqT,EAAAlb,SAAS4jC,MAC3BttC,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW6Y,KACnDjd,EAAO8R,eAAe08C,EAAWz8C,MAAO6S,EAAAxgB,WAAW6Y,MAGvD,MAEF,QACEsxC,EAAaH,EAAS5wB,gBAAgBxD,aAAao0B,EAASloC,QAAQU,WACpE4nC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB+zB,EAASloC,QAAQU,WAC3EwnC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aACL68C,EAASloC,QAAQsb,SACb5c,EAAAlb,SAAS0jC,MACTxoB,EAAAlb,SAASyjC,MACbntC,EAAO8R,eAAey8C,EAAWx8C,MAAOq8C,EAASloC,QAAQ4wB,gBACzD92C,EAAO8R,eAAe08C,EAAWz8C,MAAOq8C,EAASloC,QAAQ4wB,iBAG7D,MAEF,QACE,GAAIsX,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAEFm4C,EAAaH,EAAS5wB,gBAAgBxD,aAAao0B,EAASloC,QAAQU,WACpE4nC,EAAaJ,EAAS5wB,gBAAgBnD,oBAAoB+zB,EAASloC,QAAQU,WAC3EwnC,EAAS5wB,gBAAgBpD,cAAcm0B,GACvClrD,EAAMrD,EAAOuV,aACXvV,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOkS,eAAes8C,EAAWz8C,MAAO6Q,GACxC5iB,EAAOuR,aACL68C,EAASloC,QAAQsb,SACb5c,EAAAlb,SAAS4jC,MACT1oB,EAAAlb,SAAS2jC,MACbrtC,EAAO8R,eAAey8C,EAAWx8C,MAAOq8C,EAASloC,QAAQ4wB,gBACzD92C,EAAO8R,eAAe08C,EAAWz8C,MAAOq8C,EAASloC,QAAQ4wB,iBAG7D,MAEF,SACEzzC,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAAS6lD,OAAQ5sC,EAAMC,EACjD,MAEF,SACEvf,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAAS8lD,OAAQ7sC,EAAMC,EACjD,MAEF,SACEwrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,OACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAGzD,QAAQqnC,EAAS5tB,YAAYjZ,MAE3B,OACE,GAAI6mC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,QACE/S,EAAMsf,CACN,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQ+oD,QAAS9sC,EAC1C,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQgpD,QAAS/sC,EAC1C,MAEF,SACEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,QACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAGzD,QAAQqnC,EAAS5tB,YAAYjZ,MAE3B,OACE,GAAI6mC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,QACE/S,EAAMsf,CACN,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQipD,SAAUhtC,EAC3C,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQkpD,SAAUjtC,EAC3C,MAEF,SACEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,WACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAIzD,QAFAnE,EAAOwrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAAS5tB,aAEhD4tB,EAAS5tB,YAAYjZ,MAI3B,QACElkB,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAASmmD,YAAaltC,EAAMC,EACtD,MAEF,SACEvf,EAAMrD,EAAOuR,aAAaqT,EAAAlb,SAASomD,YAAantC,EAAMC,EACtD,MAEF,SACEwrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,UACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAGzD,QAAQqnC,EAAS5tB,YAAYjZ,MAE3B,OACE,GAAI6mC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,QACE/S,EAAMsf,CACN,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQqpD,WAAYptC,EAC7C,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQspD,WAAYrtC,EAC7C,MAEF,SACEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,cACH,GAAuB,GAAnBuO,EAASvP,OAYX,MAXMivB,IAAyC,GAAxBA,EAAcjvB,SAC/BivB,GAAiBA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAChF88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAgBA,EAAcjvB,OAAOqf,SAAS,IAAM,MAG/E0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,KAAMkb,GAAyC,GAAxBA,EAAcjvB,OAMnC,MALIivB,IAAiBA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAChF88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAgBA,EAAcjvB,OAAOqf,SAAS,IAAM,KAEtE1hB,EAAOoW,mBAGhB,QAAQkb,EAAc,GAAG/J,MAEvB,OACA,OACE5E,EAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKW,KACpDzjB,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQupD,eAAgBttC,EACjD,MAEF,QACA,OACEA,EAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,KACpD1jB,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQwpD,eAAgBvtC,EACjD,MAEF,QACE,GAAI2O,EAAc,GAAGgmB,YAMnB,MALA8W,GAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEb8sC,EAAS5tB,YAAclP,EAAc,GAC9BtxB,EAAOoW,mBAGlB,QACEuM,EAAOyrC,EAASrrB,kBACdnxB,EAAS,GACTw8C,EAASloC,QAAQsb,SACb9c,EAAAyB,KAAKY,IACLrC,EAAAyB,KAAKW,KAEXzjB,EAAMrD,EAAOmR,YACXi9C,EAASloC,QAAQsb,SACb5c,EAAAle,QAAQwpD,eACRtrC,EAAAle,QAAQupD,eACZttC,EAEF,MAEF,SACEA,EAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKO,KACpDrjB,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQypD,eAAgBxtC,EACjD,MAEF,SACEA,EAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKQ,KACpDtjB,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQ0pD,eAAgBztC,EACjD,MAEF,SACEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAIjB,MADAg4C,GAAS5tB,YAAclP,EAAc,GAC9BjuB,CAET,KAAK,OACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAGzD,QAAQqnC,EAAS5tB,YAAYjZ,MAI3B,QACElkB,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQ2pD,QAAS1tC,EAC1C,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQ4pD,QAAS3tC,EAC1C,MAEF,SAEEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,QACH,GAAuB,GAAnBuO,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,GAAiBA,EAAcjvB,OAAQ,CAEzC,GADA+rD,EAAS5tB,YAAclP,EAAc,GACT,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,EAGzD,QAAQqnC,EAAS5tB,YAAYjZ,MAE3B,OACE,GAAI6mC,EAAS5tB,YAAY8W,YAAa,CACpC8W,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,mBACb,OAGJ,QACE/S,EAAMsf,CACN,MAIF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQ6pD,SAAU5tC,EAC3C,MAEF,SACEtf,EAAMrD,EAAOmR,YAAYyT,EAAAle,QAAQ8pD,SAAU7tC,EAC3C,MAEF,SACEyrC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAIT,KAAK,OACH,MAAIuO,GAASvP,OAAS,GAAKuP,EAASvP,OAAS,GACrCivB,GAAyC,GAAxBA,EAAcjvB,QACnC+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAgBA,EAAcjvB,OAAOqf,SAAS,IAAM,KAG3E9P,EAASvP,OAAS,EACpB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeiyB,wCACfnc,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAGlD0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAG7C1hB,EAAOoW,qBAEVkb,GAAyC,GAAxBA,EAAcjvB,QAQrCsgB,EAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAASloC,QAAQU,WAChEtX,EAA4B,GAAnBsC,EAASvP,OAAcouD,EAAuBrC,EAAUx8C,EAAS,IAAM,EAC5EtC,EAAS,EACJtP,EAAOoW,oBAETpW,EAAOsS,WACZgf,EAAc,GAAGiL,SACjBjL,EAAc,GAAGlG,GAAG,GACpBzI,EACA2O,EAAc,GAAGlG,GAAE,IACnB6d,EAAe7d,GAAE,IACjB6d,EAAepK,MAAQvN,EAAc,GAAGuN,MACnCuvB,EAAS5tB,YAAcyI,GAAgB/O,gBACvCk0B,EAAS5tB,YAAclP,EAAc,IAAI4I,eAC9C5qB,KArBIgiB,GAAiBA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAChF88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAgBA,EAAcjvB,OAAOqf,SAAS,IAAM,KAEtE1hB,EAAOoW,oBAmBlB,KAAK,QAEH,MADAg4C,GAAS5tB,YAAc9b,EAAAyB,KAAKa,KACxBpV,EAASvP,OAAS,GAAKuP,EAASvP,OAAS,GACrCivB,GAAyC,GAAxBA,EAAcjvB,QACnC+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAgBA,EAAcjvB,OAAOqf,SAAS,IAAM,KAG3E9P,EAASvP,OAAS,EACpB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeiyB,wCACfnc,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAGlD0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAG7C1hB,EAAOoW,qBAEVkb,GAAyC,GAAxBA,EAAcjvB,QAOrCsgB,EAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAASloC,QAAQU,WAChEhE,EAAOwrC,EAASrrB,kBACdnxB,EAAS,GACT0f,EAAc,GACdA,EAAc,GAAGlG,GAAE,GAChB,EACA,GAGHgjC,EAAS5tB,YAAYpV,GAAE,IACvBkG,EAAc,GAAGlG,GAAE,IACnBkG,EAAc,GAAGuN,KAAOuvB,EAAS5tB,YAAY3B,MAE7Cjc,EAAOwrC,EAASrjB,kBACdnoB,EACAwrC,EAAS5tB,YAAalP,EAAc,GAAE,EAEtC1f,EAAS,IAEXI,EAAOsf,EAAc,IAErBtf,EAAOo8C,EAAS5tB,aAElBlxB,EAA4B,GAAnBsC,EAASvP,OAAcouD,EAAuBrC,EAAUx8C,EAAS,IAAM,GACnE,EACJ5R,EAAOoW,qBAEhBg4C,EAAS5tB,YAAc9b,EAAAyB,KAAKa,KACrBhnB,EAAO0S,YAAY4e,EAAc,GAAGiL,SAAU5Z,EAAMC,EAAM5Q,EAAKkoB,eAAgB5qB,MAlCpF8+C,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAgBA,EAAcjvB,OAAOqf,SAAS,IAAM,KAEtE1hB,EAAOoW,oBAgClB,KAAK,SAEH,MADAg4C,GAAS5tB,YAAc4tB,EAASloC,QAAQU,UACjB,GAAnBhV,EAASvP,QACLivB,GAAyC,GAAxBA,EAAcjvB,QACnC+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAgBA,EAAcjvB,OAAOqf,SAAS,IAAM,KAG/E0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,qBAEZkb,EAC0B,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,qBAEhB/S,EAAM+qD,EAASloC,QAAQsb,SACnBxhC,EAAO2Q,UAAU2gB,EAAc,GAAGiL,SAAU,GAC5Cv8B,EAAOwQ,UAAU8gB,EAAc,GAAGiL,WAEtC6xB,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAK,KAElBthB,EAAOoW,oBAMlB,KAAK,SACH,GAAuB,GAAnBxE,EAASvP,OAcX,MAbIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IACnC,GAAxBA,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAI3D0sC,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAE3C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CACjB,GAA4B,GAAxBA,EAAcjvB,OAMhB,MALIivB,GAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAC/D88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,IAAG,EAMzD,QAJAoG,EAAOwrC,EAASrrB,kBAAkBnxB,EAAS,GAAII,EAAOo8C,EAAS5tB,aAC/D3d,EAAOurC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKU,MACpDunC,EAAS5tB,YAAcxuB,EAEfo8C,EAAS5tB,YAAYjZ,MAE3B,QACElkB,EAAMrD,EAAOuV,aAAaoN,EAAMC,EAAMC,EACtC,MAEF,SACEurC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMrD,EAAOoW,oBAGjB,MAAO/S,EAET,KAAK,cAaH,MAZuB,IAAnBuO,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAGhD4P,GACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGzBhX,EAAOoW,mBAIhB,KAAK,iBAcH,MAbAg4C,GAAS5tB,YAAc9b,EAAAyB,KAAK3J,IACL,GAAnB5K,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAGhD4P,GACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGzBhX,EAAO2R,WAAWiT,EAAArW,OAAOoiD,cAElC,KAAK,cAiBH,MAhBAvC,GAAS5tB,YAAc9b,EAAAyB,KAAK3J,IACL,GAAnB5K,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElDiB,EAAO3iB,EAAOoW,qBAEduM,EAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,KAElD8U,GACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGzBhX,EAAO2R,WAAWiT,EAAArW,OAAOqiD,WAAY,MAAQjuC,GAGtD,KAAK,cAOH,GANI2O,GACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,OAMX,MALA+rD,GAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKa,KACrBhnB,EAAOoW,mBAMhB,MAJAuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAASloC,QAAQU,WAChEhE,EAAOwrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAASloC,QAAQU,WAChE/D,EAAOurC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAASloC,QAAQU,WAChEwnC,EAAS5tB,YAAc9b,EAAAyB,KAAKa,KACtB,GAAIjL,OAAM,kBAGlB,KAAK,aAOH,GANIuV,GACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,OAMX,MALA+rD,GAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKa,KACrBhnB,EAAOoW,mBAMhB,MAJAuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAASloC,QAAQU,WAChEhE,EAAOwrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKO,KACpD7D,EAAOurC,EAASrrB,kBAAkBnxB,EAAS,GAAIw8C,EAASloC,QAAQU,WAChEwnC,EAAS5tB,YAAc9b,EAAAyB,KAAKa,KACtB,GAAIjL,OAAM,kBAKlB,KAAK,aACH,MAAMuV,IAAyC,GAAxBA,EAAcjvB,OAOL,GAArBivB,EAAc,GAAG/J,MAC1B6mC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEb8sC,EAAS5tB,YAAclP,EAAc,GAC9BtxB,EAAOoW,qBAEO,GAAnBxE,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAclP,EAAc,GAC9BtxB,EAAOoW,sBAEhBuM,EAAOyrC,EAASrrB,kBACdnxB,EAAS,GACTw8C,EAASloC,QAAQU,UAAS,GAG5BwnC,EAAS5tB,YAAclP,EAAc,GACR,GAAzB88B,EAAS5tB,YAAYjZ,MACvB6mC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAENthB,EAAOoW,qBAITuM,IArCD2O,GAAiBA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,IAChF88B,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAgBA,EAAcjvB,OAAOqf,SAAS,IAAM,KAEtE1hB,EAAOoW,oBAkClB,KAAK,SACH,GAAIxE,EAASvP,OAAS,GAAKuP,EAASvP,OAAS,EAqB3C,MApBIivB,KACEA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,GAAG8mB,iBACtC,GAAxB9mB,EAAcjvB,QAChB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,MAIvD9P,EAASvP,OAAS,EACpB+rD,EAAS9qC,MACPmB,EAAAjC,eAAeiyB,wCACfnc,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAEzC9P,EAASvP,OAAS,GAC3B+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAG7C1hB,EAAOoW,mBAEhB,IAAIkb,EAAe,CAEjB,GADIA,EAAcjvB,SAAQ+rD,EAAS5tB,YAAclP,EAAc,GAAG8mB,iBACtC,GAAxB9mB,EAAcjvB,OAKhB,MAJA+rD,GAAS9qC,MACPmB,EAAAjC,eAAeyP,oCACfqG,EAAWhX,MAAO,IAAKgQ,EAAcjvB,OAAOqf,SAAS,KAEhD1hB,EAAOoW,mBAEhBuM,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI0f,EAAc,QAE7D3O,GAAOyrC,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,IAAG,EAOzD,IAJAxK,EAAOo8C,EAAS5tB,YAChB4tB,EAAS5tB,YAAcxuB,EAAKomC,gBAGxBgW,EAASloC,QAAQwZ,SACnB,MAAIuJ,IAAkBvkB,EAAAyB,KAAKa,MACzBonC,EAAS5tB,YAAc9b,EAAAyB,KAAKa,KACrBhnB,EAAOmV,aAETwN,CAGT,IAAIkuC,GAAQC,EAAa1C,EAA6B,GAAnBx8C,EAASvP,OAAcuP,EAAS,GAAK,KAAM0mB,EAI9E,IAFA81B,EAAS5tB,YAAcxuB,EAAKomC,gBAExBnP,GAAkBvkB,EAAAyB,KAAKa,KAAM,CAC/B,OAAQonC,EAAS5tB,YAAYjZ,MAE3B,QACElkB,EAAMrD,EAAO+U,SACX/U,EAAOmR,YAAYyT,EAAAle,QAAQi4B,OACzBhc,GAEFkuC,EAEF,MAEF,QACA,OACExtD,EAAMrD,EAAO+U,SACX/U,EAAOmR,YAAYyT,EAAAle,QAAQk4B,OACzBjc,GAEFkuC,EAEF,MAEF,QACA,OACExtD,EAAMrD,EAAO+U,SACX/U,EAAOmR,YACLi9C,EAASloC,QAAQsb,SACb5c,EAAAle,QAAQk4B,OACRha,EAAAle,QAAQi4B,OACZhc,GAEFkuC,EAEF,MAIF,SACExtD,EAAMrD,EAAO+U,SACX/U,EAAOuR,aAAaqT,EAAAlb,SAASo1B,MAC3Bnc,EACA3iB,EAAO+Q,UAAU,IAEnB8/C,EAEF,MAEF,SACExtD,EAAMrD,EAAO+U,SACX/U,EAAOuR,aAAaqT,EAAAlb,SAASq1B,MAC3Bpc,EACA3iB,EAAOiR,UAAU,IAEnB4/C,EAEF,MAEF,SACEzC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMwtD,EAGVzC,EAAS5tB,YAAc9b,EAAAyB,KAAKa,SAE5B,QAAQonC,EAAS5tB,YAAYjZ,MAE3B,QACEgnC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAK3J,KAC/DnZ,EAAMrD,EAAO+U,SACX/U,EAAOmR,YAAYyT,EAAAle,QAAQi4B,OACzB3+B,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,IAE1CkuC,EACA7wD,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW2Y,KAErD,MAEF,QACA,OACEwxC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKG,KAC/DjjB,EAAMrD,EAAO+U,SACX/U,EAAOmR,YAAYyT,EAAAle,QAAQk4B,OACzB5+B,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,IAE1CkuC,EACA7wD,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAW6Y,KAErD,MAEF,QACA,OACEsxC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB+zB,EAASloC,QAAQU,WAC3EvjB,EAAMrD,EAAO+U,SACX/U,EAAOmR,YACLi9C,EAASloC,QAAQsb,SACb5c,EAAAle,QAAQk4B,OACRha,EAAAle,QAAQi4B,OACZ3+B,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,IAE1CkuC,EACA7wD,EAAO8R,eAAey8C,EAAWx8C,MAAOq8C,EAASloC,QAAQ4wB,gBAE3D,MAEF,SACEyX,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKW,KAC/DzjB,EAAMrD,EAAO+U,SACX/U,EAAOuR,aAAaqT,EAAAlb,SAASo1B,MAC3B9+B,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAO+Q,UAAU,IAEnB8/C,EACA7wD,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAWgZ,KAErD,MAEF,SACEmxC,EAAaH,EAAS5wB,gBAAgBnD,oBAAoB3V,EAAAyB,KAAKY,KAC/D1jB,EAAMrD,EAAO+U,SACX/U,EAAOuR,aAAaqT,EAAAlb,SAASq1B,MAC3B/+B,EAAOkS,eAAeq8C,EAAWx8C,MAAO4Q,GACxC3iB,EAAOiR,UAAU,IAEnB4/C,EACA7wD,EAAO8R,eAAey8C,EAAWx8C,MAAO6S,EAAAxgB,WAAWkZ,KAErD,MAEF,SACE8wC,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAEbje,EAAMwtD,EAIZ,MAAOxtD,EAIT,KAAK,KAOH,MANIiuB,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKC,GACrBpmB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKC,GAAE,EAExD,KAAK,MAOH,MANIkL,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKE,IACrBrmB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKE,IAAG,EAEzD,KAAK,MAOH,MANIiL,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAK3J,IACrBxc,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAK3J,IAAG,EAEzD,KAAK,MAOH,MANI8U,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKG,IACrBtmB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKG,IAAG,EAEzD,KAAK,QAOH,MANIgL,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc4tB,EAASloC,QAAQsb,SACpC9c,EAAAyB,KAAK+Z,QACLxb,EAAAyB,KAAKga,QACFngC,EAAOoW,qBAETg4C,EAASrrB,kBACdnxB,EAAS,GACTw8C,EAASloC,QAAQsb,SACb9c,EAAAyB,KAAK+Z,QACLxb,EAAAyB,KAAKga,QAAO,EAIpB,KAAK,KAOH,MANI7O,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKK,GACrBxmB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKK,GAAE,EAExD,KAAK,MAOH,MANI8K,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKM,IACrBzmB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKM,IAAG,EAEzD,KAAK,MAOH,MANI6K,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKO,IACrB1mB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKO,IAAG,EAEzD,KAAK,MAOH,MANI4K,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKQ,IACrB3mB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKQ,IAAG,EAEzD,KAAK,QAOH,MANI2K,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc4tB,EAASloC,QAAQU,UACjC5mB,EAAOoW,qBAETg4C,EAASrrB,kBACdnxB,EAAS,GACTw8C,EAASloC,QAAQU,UAAS,EAI9B,KAAK,OAOH,MANI0K,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKU,KACrB7mB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKU,KAAI,EAE1D,KAAK,MAOH,MANIyK,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKW,IACrB9mB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKW,IAAG,EAEzD,KAAK,MAOH,MANIwK,IACF88B,EAAS9qC,MACPmB,EAAAjC,eAAekuC,sBACfp4B,EAAWhX,MAAOzf,EAAUmV,cAGT,GAAnBpF,EAASvP,QACX+rD,EAAS9qC,MACPmB,EAAAjC,eAAeqM,+BACfyJ,EAAWhX,MAAO,IAAK1P,EAASvP,OAAOqf,SAAS,KAElD0sC,EAAS5tB,YAAc9b,EAAAyB,KAAKY,IACrB/mB,EAAOoW,qBAETg4C,EAASrrB,kBAAkBnxB,EAAS,GAAI8S,EAAAyB,KAAKY,IAAG,GAM3D,MAJAqnC,GAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfqK,EAAWhX,OAENthB,EAAOoW,oBAGhB,QAAAq6C,GAAgCrC,EAAoB15C,GAClD,GAAIrD,GACAlN,CA6BJ,OA5BIiqD,GAASloC,QAAQsb,UACnBnwB,EAAO+8C,EAASpjB,qBAAqBt2B,EAAYgQ,EAAAyB,KAAK6Z,UAEpDpjB,yBAAyBvL,IAASuT,EAAA/f,aAAagY,OAC/CC,2BAA2BzL,IAASuT,EAAAxgB,WAAW6Y,KACR,GAAvCE,8BAA8B9L,KAC7BlN,EAAQ+Y,6BAA6B7L,IAAS,KAE/C+8C,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfvZ,EAAW4M,OAEbnd,GAAS,KAGXkN,EAAO+8C,EAASpjB,qBAAqBt2B,EAAYgQ,EAAAyB,KAAK8Z,UAEpDrjB,yBAAyBvL,IAASuT,EAAA/f,aAAagY,OAC/CC,2BAA2BzL,IAASuT,EAAAxgB,WAAW2Y,MAC9C5Y,EAAQ6Y,0BAA0B3L,IAAS,KAE5C+8C,EAAS9qC,MACPmB,EAAAjC,eAAeyL,wBACfvZ,EAAW4M,OAEbnd,GAAS,IAGNA,EAIT,QAAAyyC,GACEwX,EACA2C,EACAz4B,GAEA,GAAI5D,GAAUq8B,EAAIr8B,QACd7yB,EAAY6yB,EAAQ7O,SAASrkB,IAAI4sD,EAASloC,QAAQ4Z,aACtD,IAAIj+B,EACF,GAAIA,EAAU0lB,MAAQ8X,EAAA5U,YAAYiJ,mBAAoB,CACpD,GAAIzG,GAA+BprB,EAAWqrB,SAC9C,IAAID,EACF,IACGA,EAAS7B,GAAGiU,EAAApU,aAAaiM,UAC1BjK,EAASjX,YAAco4C,EAASloC,QAAQU,WACxCqG,EAAS8K,YACqB,GAA9B9K,EAAS8K,WAAW11B,QACpB4qB,EAAS8K,WAAW,GAAG/lB,MAAQo8C,EAASloC,QAAQU,WAEhD,GAAIwnC,EAASnqB,gBAAgBhX,GAC3B,MAAOmhC,GAAS7a,SAAStmB,GACvBmhC,EAASloC,QAAQsb,SACb4sB,EAASpuD,OAAO2Q,UAAUogD,EAAIp1B,qBAC9ByyB,EAASpuD,OAAOwQ,UAAUugD,EAAIp1B,2BAItCjH,GAAQpR,MACNmB,EAAAjC,eAAewuC,4CACf14B,EAAWhX,MAAO8sC,EAASloC,QAAQ4Z,aAAc,4BAKvDpL,GAAQpR,MACNmB,EAAAjC,eAAeuxB,uGACfzb,EAAWhX,MAAOzf,EAAUmV,kBAIhC0d,GAAQpR,MACNmB,EAAAjC,eAAesH,mBACfwO,EAAWhX,MAAO8sC,EAASloC,QAAQ4Z,aAGvC,OAAOsuB,GAASpuD,OAAOoW,oBAIzB,QAAA06C,GACE1C,EACAltC,EACAoX,GAEA,GAAIt4B,GAASouD,EAASpuD,OAClB6wD,EAAuB7wD,EAAOoW,oBAC9B66C,EAAiB7C,EAAS15B,QAAQ7O,SAASrkB,IAAI,SAC/C80C,EAAa8X,EAAS15B,QAAQ5O,MAAMtkB,IAAI,SAC5C,IACEyvD,GACAA,EAAe1pC,MAAQ8X,EAAA5U,YAAYiJ,oBACnC4iB,EACA,CACA,GAAI4a,GAAoCD,EAAgB/jC,SAEtDgkC,IACA9C,EAASnqB,gBAAgBitB,KAEzB7mC,OAAO6mC,EAAcn5B,YAAiD,GAAnCm5B,EAAcn5B,WAAW11B,QAC5DwuD,EAAQ7wD,EAAOiU,YAAY,MACzBm6C,EAAS7a,SAAS2d,GACL,MAAXhwC,EACIktC,EAASrrB,kBAAkB7hB,EAASo1B,GACpC8X,EAASloC,QAAQU,UAAUyc,aAAarjC,GAC5CouD,EAASpY,oBAAoB1d,EAAWhX,MAAMK,OAAOC,gBACrD5hB,EAAOwQ,UAAU8nB,EAAWhX,MAAMO,MAClC7hB,EAAOwQ,UAAU8nB,EAAWhX,MAAMQ,UAEpC+uC,KAIN,MAAOA,GjB8tSTzvD,OAAOC,eAAetB,EAAS,cAAgBoE,OAAO,GiB/kXtD,IAAAE,GAAA7D,EAAA,GAOAikB,EAAAjkB,EAAA,GASAkkB,EAAAlkB,EAAA,GAMAokB,EAAApkB,EAAA,GASA6+B,EAAA7+B,EAAA,EAUAT,GAAA80C,qBAmCA90C,EAAAk0C,cAotEAl0C,EAAA62C,kBAgDA72C,EAAA+wD,gBjBmvVM,SAAU9wD,EAAQD,EAASS,IkBnkajC,SAAAuwB,GAAA,KAAAogC,GAAApgC,EAAAogC,MAAA3wD,EAAA,GAEAuwB,GAAAiF,QAAA,SAAAH,EAAAC,GACA,MAAAq7B,GAAAC,SAAAv7B,EAAAC,IAGA/E,EAAAzX,QAAA,SAAAnV,GACA,MAAAA,GAAAktD,KAGAtgC,EAAAxX,SAAA,SAAApV,GACA,MAAAA,GAAAmtD,MAGAvgC,EAAA2U,QAAA,SAAAl0B,EAAAC,GACA,MAAAD,GAAA4e,IAAA3e,IAGAsf,EAAAqkB,QAAA,SAAA5jC,EAAAC,GACA,MAAAD,GAAA+/C,IAAA9/C,IAGAsf,EAAAi5B,QAAA,SAAAx4C,EAAAC,GACA,MAAAD,GAAAggD,IAAA//C,IAGAsf,EAAA0gC,QAAA,SAAAjgD,EAAAC,GACA,MAAAD,GAAAkgD,IAAAjgD,IAGAsf,EAAA4gC,UAAA,SAAAngD,EAAAC,GACA,MAAAD,GAAAogD,aAAAF,IAAAjgD,EAAAmgD,cAAAC,YAGA9gC,EAAA+gC,QAAA,SAAAtgD,EAAAC,GACA,MAAAD,GAAA65B,IAAA55B,IAGAsf,EAAAghC,UAAA,SAAAvgD,EAAAC,GACA,MAAAD,GAAAogD,aAAAvmB,IAAA55B,EAAAmgD,cAAAC,YAGA9gC,EAAAihC,QAAA,SAAAxgD,EAAAC,GACA,MAAAD,GAAAygD,IAAAxgD,IAGAsf,EAAAmhC,OAAA,SAAA1gD,EAAAC,GACA,MAAAD,GAAA2gD,GAAA1gD,IAGAsf,EAAAqhC,QAAA,SAAA5gD,EAAAC,GACA,MAAAD,GAAA6gD,IAAA5gD,IAGAsf,EAAAuhC,QAAA,SAAA9gD,EAAAC,GACA,MAAAD,GAAA+gD,IAAA9gD,IAGAsf,EAAAyhC,QAAA,SAAAhhD,EAAAC,GACA,MAAAD,GAAAihD,IAAAhhD,IAGAsf,EAAA2Q,UAAA,SAAAlwB,EAAAC,GACA,MAAAD,GAAAkhD,KAAAjhD,IAGAsf,EAAA4hC,QAAA,SAAAxuD,GACA,MAAAA,GAAAyuD,OAGA7hC,EAAAwQ,UAAA,SAAAp9B,EAAAshC,GACApb,OAAAob,GAAA,IAAAA,IAAA,GACA,IAAA2D,GAAA+nB,EAAA0B,QAAAptB,EAAA,EACA,OAAAthC,GAAAisB,IAAAgZ,GAAA6oB,IAAA7oB,EAAAwpB,QAGA7hC,EAAAskB,UAAA,SAAAlxC,GACA,WAAAA,EAAAmtD,MAAAntD,EAAAktD,KAAA,GAAAltD,EAAAktD,KAAAjrC,GAAA3J,YACA,IAAAtY,EAAAmtD,MAAAntD,EAAAktD,KAAAjrC,GAAA+lC,WAAAhoD,EAAAktD,IAAA,GAGAtgC,EAAAukB,WAAA,SAAAnxC,GACA,WAAAA,EAAAmtD,MAAAntD,EAAAktD,KAAA,GAAAltD,EAAAktD,KAAAhrC,IAAA5J,YACA,IAAAtY,EAAAmtD,MAAAntD,EAAAktD,KAAAhrC,IAAA8lC,WAAAhoD,EAAAktD,IAAA,GAGAtgC,EAAAwkB,WAAA,SAAApxC,GACA,WAAAA,EAAAmtD,MAAAntD,EAAAktD,KAAA,IACA,IAAAltD,EAAAmtD,MAAAntD,EAAAktD,IAAA,GAGAtgC,EAAAykB,UAAA,SAAArxC,GACA,WAAAA,EAAAmtD,MAAAntD,EAAAktD,KAAA,GAAAltD,EAAAktD,KAAA7qC,GAAA/J,WAGAsU,EAAA0kB,WAAA,SAAAtxC,GACA,WAAAA,EAAAmtD,MAAAntD,EAAAktD,KAAA,GAAAltD,EAAAktD,KAAA5qC,IAAAhK,WAGAsU,EAAA2kB,WAAA,SAAAvxC,GACA,WAAAA,EAAAmtD,MAGAvgC,EAAA4kB,YAAA,SAAAxxC,GACA,WAAAA,EAAAmtD,OAAA,IAAAntD,EAAAktD,KAAA,IAAAltD,EAAAktD,KAGA,MAAAyB,GAAA3B,EAAA4B,WAAAjsC,IAAAylC,kBACAyG,EAAA7B,EAAA4B,WAAAjsC,IAAA0lC,iBAEAz7B,GAAA6kB,WAAA,SAAAzxC,GACA,MAAAA,GAAA8uD,IAAAH,IAAA3uD,EAAA+uD,IAAAF,GAGA,MAAAG,GAAAhC,EAAA4B,WAAAhsC,IAAAwlC,kBACA6G,EAAAjC,EAAA4B,WAAAhsC,IAAAylC,iBAEAz7B,GAAA+kB,WAAA,SAAA3xC,GACA,MAAAA,GAAA8uD,IAAAE,IAAAhvD,EAAA+uD,IAAAE,IAGAriC,EAAA8kB,WAAA,SAAA1xC,GACA,MAAA4sB,GAAAs7B,KAAAC,OAAAnoD,EAAAkvD,aAGAtiC,EAAAglB,WAAA,SAAA5xC,GACA,MAAAA,GAAAkvD,YAGAtiC,EAAAuiC,cAAA,SAAAnvD,EAAAovD,GACA,OAAAA,EAAApvD,EAAAytD,aAAAztD,GAAAud,SAAA,OlBwka6B7gB,KAAKd,EAASS,EAAoB,KAIzD,SAAUR,EAAQD,GmBrraxB,QAAAoxD,GAAAE,EAAAC,EAAAiC,GAMAlzD,KAAAgxD,IAAA,EAAAA,EAMAhxD,KAAAixD,KAAA,EAAAA,EAMAjxD,KAAAkzD,aAoCA,QAAAC,GAAAC,GACA,YAAAA,KAAA,YA+BA,QAAAZ,GAAA1uD,EAAAovD,GACA,GAAAE,GAAAC,EAAAC,CACA,OAAAJ,IACApvD,KAAA,GACAwvD,EAAA,GAAAxvD,KAAA,OACAuvD,EAAAE,EAAAzvD,IAEAuvD,GAEAD,EAAArC,EAAAjtD,GAAA,EAAAA,GAAA,WACAwvD,IACAC,EAAAzvD,GAAAsvD,GACAA,KAEAtvD,GAAA,GACAwvD,GAAA,KAAAxvD,KAAA,OACAuvD,EAAAG,EAAA1vD,IAEAuvD,GAEAD,EAAArC,EAAAjtD,IAAA,WACAwvD,IACAE,EAAA1vD,GAAAsvD,GACAA,IAmBA,QAAAV,GAAA5uD,EAAAovD,GACA,GAAAO,MAAA3vD,GACA,MAAAovD,GAAAQ,EAAAC,CACA,IAAAT,EAAA,CACA,GAAApvD,EAAA,EACA,MAAA4vD,EACA,IAAA5vD,GAAA8vD,EACA,MAAAC,OACK,CACL,GAAA/vD,IAAAgwD,EACA,MAAAhI,EACA,IAAAhoD,EAAA,GAAAgwD,EACA,MAAA13C,GAEA,MAAAtY,GAAA,EACA4uD,GAAA5uD,EAAAovD,GAAAa,MACAhD,EAAAjtD,EAAAkwD,EAAA,EAAAlwD,EAAAkwD,EAAA,EAAAd,GAmBA,QAAAnC,GAAAkD,EAAAC,EAAAhB,GACA,UAAApC,GAAAmD,EAAAC,EAAAhB,GA8BA,QAAAiB,GAAA3xD,EAAA0wD,EAAAtG,GACA,OAAApqD,EAAAR,OACA,KAAA0Z,OAAA,eACA,YAAAlZ,GAAA,aAAAA,GAAA,cAAAA,GAAA,cAAAA,EACA,MAAAmxD,EASA,IARA,gBAAAT,IAEAtG,EAAAsG,EACAA,GAAA,GAEAA,OAEAtG,KAAA,IACA,MAAAA,EACA,KAAAwH,YAAA,QAEA,IAAA1yD,EACA,KAAAA,EAAAc,EAAA6xD,QAAA,QACA,KAAA34C,OAAA,kBACA,QAAAha,EACA,MAAAyyD,GAAA3xD,EAAAwf,UAAA,GAAAkxC,EAAAtG,GAAAmH,KAQA,QAHAO,GAAA5B,EAAA6B,EAAA3H,EAAA,IAEA/8C,EAAA8jD,EACArzD,EAAA,EAAmBA,EAAAkC,EAAAR,OAAgB1B,GAAA,GACnC,GAAAk+B,GAAAwtB,KAAAO,IAAA,EAAA/pD,EAAAR,OAAA1B,GACAwD,EAAA+oD,SAAArqD,EAAAwf,UAAA1hB,IAAAk+B,GAAAouB,EACA,IAAApuB,EAAA,GACA,GAAAg2B,GAAA9B,EAAA6B,EAAA3H,EAAApuB,GACA3uB,KAAAshD,IAAAqD,GAAAzkC,IAAA2iC,EAAA5uD,QAEA+L,KAAAshD,IAAAmD,GACAzkD,IAAAkgB,IAAA2iC,EAAA5uD,IAIA,MADA+L,GAAAqjD,WACArjD,EAoBA,QAAA4kD,GAAAnyD,EAAA4wD,GACA,sBAAA5wD,GACAowD,EAAApwD,EAAA4wD,GACA,gBAAA5wD,GACA6xD,EAAA7xD,EAAA4wD,GAEAnC,EAAAzuD,EAAA0uD,IAAA1uD,EAAA2uD,KAAA,iBAAAiC,KAAA5wD,EAAA4wD,UA7RAvzD,EAAAD,QAAAoxD,CAKA,IAAA4D,GAAA,IAEA,KACAA,EAAA,GAAAC,aAAAC,SAAA,GAAAD,aAAAxlD,OAAA,GAAAlM,aACA,u2BACSvD,QACR,MAAAwkB,IA0DD4sC,EAAAtvD,UAAAqzD,WAEA9zD,OAAAC,eAAA8vD,EAAAtvD,UAAA,cAAqDsC,OAAA,IAkBrDgtD,EAAAqC,QAOA,IAAAK,MAOAD,IA0CAzC,GAAA0B,UAkCA1B,EAAA4B,aAsBA5B,EAAAC,UASA,IAAAwD,GAAAvI,KAAA8I,GA4DAhE,GAAAqD,aAyBArD,EAAA2D,WAUA,IAcAT,GAAAe,WAOAnB,EAAAI,IAOAF,EAAAF,EAAA,EAOAoB,EAAAxC,EA5BA,OAkCAmB,EAAAnB,EAAA,EAMA1B,GAAA6C,MAMA,IAAAD,GAAAlB,EAAA,KAMA1B,GAAA4C,OAMA,IAAAuB,GAAAzC,EAAA,EAMA1B,GAAAmE,KAMA,IAAAC,GAAA1C,EAAA,KAMA1B,GAAAoE,MAMA,IAAAC,GAAA3C,GAAA,EAMA1B,GAAAqE,SAMA,IAAA/4C,GAAA20C,GAAA,gBAMAD,GAAA10C,WAMA,IAAAy3C,GAAA9C,GAAA,QAMAD,GAAA+C,oBAMA,IAAA/H,GAAAiF,EAAA,iBAMAD,GAAAhF,WAMA,IAAAsJ,GAAAtE,EAAAtvD,SAMA4zD,GAAAC,MAAA,WACA,MAAAr1D,MAAAkzD,SAAAlzD,KAAAgxD,MAAA,EAAAhxD,KAAAgxD,KAOAoE,EAAApC,SAAA,WACA,MAAAhzD,MAAAkzD,UACAlzD,KAAAixD,OAAA,GAAA+C,GAAAh0D,KAAAgxD,MAAA,GACAhxD,KAAAixD,KAAA+C,GAAAh0D,KAAAgxD,MAAA,IAUAoE,EAAA/zC,SAAA,SAAAurC,GAEA,IADAA,KAAA,IACA,MAAAA,EACA,KAAAwH,YAAA,QACA,IAAAp0D,KAAAs1D,SACA,SACA,IAAAt1D,KAAAu1D,aAAA,CACA,GAAAv1D,KAAAw1D,GAAA1J,GAAA,CAGA,GAAA2J,GAAA/C,EAAA9F,GACAyE,EAAArxD,KAAAqxD,IAAAoE,GACAC,EAAArE,EAAAF,IAAAsE,GAAAvE,IAAAlxD,KACA,OAAAqxD,GAAAhwC,SAAAurC,GAAA8I,EAAAL,QAAAh0C,SAAAurC,GAEA,UAAA5sD,KAAA+zD,MAAA1yC,SAAAurC,GAQA,IAHA,GAAA0H,GAAA5B,EAAA6B,EAAA3H,EAAA,GAAA5sD,KAAAkzD,UACAyC,EAAA31D,KACA6P,EAAA,KACA,CACA,GAAA+lD,GAAAD,EAAAtE,IAAAiD,GACAuB,EAAAF,EAAAzE,IAAA0E,EAAAzE,IAAAmD,IAAAe,UAAA,EACAS,EAAAD,EAAAx0C,SAAAurC,EAEA,IADA+I,EAAAC,EACAD,EAAAL,SACA,MAAAQ,GAAAjmD,CAEA,MAAAimD,EAAA9zD,OAAA,GACA8zD,EAAA,IAAAA,CACAjmD,GAAA,GAAAimD,EAAAjmD,IASAulD,EAAAW,YAAA,WACA,MAAA/1D,MAAAixD,MAOAmE,EAAAY,oBAAA,WACA,MAAAh2D,MAAAixD,OAAA,GAOAmE,EAAAa,WAAA,WACA,MAAAj2D,MAAAgxD,KAOAoE,EAAAc,mBAAA,WACA,MAAAl2D,MAAAgxD,MAAA,GAOAoE,EAAAe,cAAA,WACA,GAAAn2D,KAAAu1D,aACA,MAAAv1D,MAAAw1D,GAAA1J,GAAA,GAAA9rD,KAAA+zD,MAAAoC,eAEA,QADA7zD,GAAA,GAAAtC,KAAAixD,KAAAjxD,KAAAixD,KAAAjxD,KAAAgxD,IACAoF,EAAA,GAAsBA,EAAA,GACtB,IAAA9zD,EAAA,GAAA8zD,GAD+BA,KAG/B,UAAAp2D,KAAAixD,KAAAmF,EAAA,GAAAA,EAAA,GAOAhB,EAAAE,OAAA,WACA,WAAAt1D,KAAAixD,MAAA,IAAAjxD,KAAAgxD,KAOAoE,EAAAiB,IAAAjB,EAAAE,OAMAF,EAAAG,WAAA,WACA,OAAAv1D,KAAAkzD,UAAAlzD,KAAAixD,KAAA,GAOAmE,EAAAkB,WAAA,WACA,MAAAt2D,MAAAkzD,UAAAlzD,KAAAixD,MAAA,GAOAmE,EAAAmB,MAAA,WACA,aAAAv2D,KAAAgxD,MAOAoE,EAAAoB,OAAA,WACA,aAAAx2D,KAAAgxD,MAQAoE,EAAAqB,OAAA,SAAAC,GAGA,MAFAvD,GAAAuD,KACAA,EAAAjC,EAAAiC,KACA12D,KAAAkzD,WAAAwD,EAAAxD,UAAAlzD,KAAAixD,OAAA,OAAAyF,EAAAzF,OAAA,SAEAjxD,KAAAixD,OAAAyF,EAAAzF,MAAAjxD,KAAAgxD,MAAA0F,EAAA1F,MASAoE,EAAAI,GAAAJ,EAAAqB,OAOArB,EAAAuB,UAAA,SAAAD,GACA,OAAA12D,KAAAw1D,GAAAkB,IASAtB,EAAAwB,IAAAxB,EAAAuB,UAQAvB,EAAAyB,GAAAzB,EAAAuB,UAOAvB,EAAA0B,SAAA,SAAAJ,GACA,MAAA12D,MAAA+2D,KAAAL,GAAA,GASAtB,EAAA4B,GAAA5B,EAAA0B,SAOA1B,EAAA6B,gBAAA,SAAAP,GACA,MAAA12D,MAAA+2D,KAAAL,IAAA,GASAtB,EAAAvC,IAAAuC,EAAA6B,gBAQA7B,EAAA8B,GAAA9B,EAAA6B,gBAOA7B,EAAA+B,YAAA,SAAAT,GACA,MAAA12D,MAAA+2D,KAAAL,GAAA,GASAtB,EAAAgC,GAAAhC,EAAA+B,YAOA/B,EAAAiC,mBAAA,SAAAX,GACA,MAAA12D,MAAA+2D,KAAAL,IAAA,GASAtB,EAAAxC,IAAAwC,EAAAiC,mBAQAjC,EAAAkC,GAAAlC,EAAAiC,mBAQAjC,EAAAmC,QAAA,SAAAb,GAGA,GAFAvD,EAAAuD,KACAA,EAAAjC,EAAAiC,IACA12D,KAAAw1D,GAAAkB,GACA,QACA,IAAAc,GAAAx3D,KAAAu1D,aACAkC,EAAAf,EAAAnB,YACA,OAAAiC,KAAAC,GACA,GACAD,GAAAC,EACA,EAEAz3D,KAAAkzD,SAGAwD,EAAAzF,OAAA,EAAAjxD,KAAAixD,OAAA,GAAAyF,EAAAzF,OAAAjxD,KAAAixD,MAAAyF,EAAA1F,MAAA,EAAAhxD,KAAAgxD,MAAA,OAFAhxD,KAAAkxD,IAAAwF,GAAAnB,cAAA,KAYAH,EAAA2B,KAAA3B,EAAAmC,QAMAnC,EAAAsC,OAAA,WACA,OAAA13D,KAAAkzD,UAAAlzD,KAAAw1D,GAAA1J,GACAA,EACA9rD,KAAAuyD,MAAAxiC,IAAAklC,IAQAG,EAAArB,IAAAqB,EAAAsC,OAOAtC,EAAArlC,IAAA,SAAA4nC,GACAxE,EAAAwE,KACAA,EAAAlD,EAAAkD,GAIA,IAAAC,GAAA53D,KAAAixD,OAAA,GACA4G,EAAA,MAAA73D,KAAAixD,KACA6G,EAAA93D,KAAAgxD,MAAA,GACA+G,EAAA,MAAA/3D,KAAAgxD,IAEAgH,EAAAL,EAAA1G,OAAA,GACAgH,EAAA,MAAAN,EAAA1G,KACAiH,EAAAP,EAAA3G,MAAA,GACAmH,EAAA,MAAAR,EAAA3G,IAEAoH,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,CAYA,OAXAA,IAAAR,EAAAI,EACAG,GAAAC,IAAA,GACAA,GAAA,MACAD,GAAAR,EAAAI,EACAG,GAAAC,IAAA,GACAA,GAAA,MACAD,GAAAR,EAAAI,EACAG,GAAAC,IAAA,GACAA,GAAA,MACAD,GAAAR,EAAAI,EACAI,GAAA,MACArH,EAAAuH,GAAA,GAAAC,EAAAH,GAAA,GAAAC,EAAAr4D,KAAAkzD,WAQAkC,EAAAoD,SAAA,SAAAC,GAGA,MAFAtF,GAAAsF,KACAA,EAAAhE,EAAAgE,IACAz4D,KAAA+vB,IAAA0oC,EAAA1E,QASAqB,EAAAlE,IAAAkE,EAAAoD,SAOApD,EAAAsD,SAAA,SAAAC,GACA,GAAA34D,KAAAs1D,SACA,MAAA3B,EAKA,IAJAR,EAAAwF,KACAA,EAAAlE,EAAAkE,IAGAjE,EAAA,CAKA,MAAA3D,GAJA2D,EAAAvD,IAAAnxD,KAAAgxD,IACAhxD,KAAAixD,KACA0H,EAAA3H,IACA2H,EAAA1H,MACAyD,EAAAkE,WAAA54D,KAAAkzD,UAGA,GAAAyF,EAAArD,SACA,MAAA3B,EACA,IAAA3zD,KAAAw1D,GAAA1J,GACA,MAAA6M,GAAApC,QAAAzK,EAAA6H,CACA,IAAAgF,EAAAnD,GAAA1J,GACA,MAAA9rD,MAAAu2D,QAAAzK,EAAA6H,CAEA,IAAA3zD,KAAAu1D,aACA,MAAAoD,GAAApD,aACAv1D,KAAA+zD,MAAA5C,IAAAwH,EAAA5E,OAEA/zD,KAAA+zD,MAAA5C,IAAAwH,GAAA5E,KACK,IAAA4E,EAAApD,aACL,MAAAv1D,MAAAmxD,IAAAwH,EAAA5E,YAGA,IAAA/zD,KAAAg3D,GAAAhC,IAAA2D,EAAA3B,GAAAhC,GACA,MAAAtC,GAAA1yD,KAAAgzD,WAAA2F,EAAA3F,WAAAhzD,KAAAkzD,SAKA,IAAA0E,GAAA53D,KAAAixD,OAAA,GACA4G,EAAA,MAAA73D,KAAAixD,KACA6G,EAAA93D,KAAAgxD,MAAA,GACA+G,EAAA,MAAA/3D,KAAAgxD,IAEAgH,EAAAW,EAAA1H,OAAA,GACAgH,EAAA,MAAAU,EAAA1H,KACAiH,EAAAS,EAAA3H,MAAA,GACAmH,EAAA,MAAAQ,EAAA3H,IAEAoH,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,CAqBA,OApBAA,IAAAR,EAAAI,EACAG,GAAAC,IAAA,GACAA,GAAA,MACAD,GAAAR,EAAAK,EACAE,GAAAC,IAAA,GACAA,GAAA,MACAA,GAAAP,EAAAG,EACAG,GAAAC,IAAA,GACAA,GAAA,MACAD,GAAAR,EAAAM,EACAC,GAAAC,IAAA,GACAA,GAAA,MACAA,GAAAP,EAAAI,EACAE,GAAAC,IAAA,GACAA,GAAA,MACAA,GAAAN,EAAAE,EACAG,GAAAC,IAAA,GACAA,GAAA,MACAD,GAAAR,EAAAO,EAAAN,EAAAK,EAAAJ,EAAAG,EAAAF,EAAAC,EACAI,GAAA,MACArH,EAAAuH,GAAA,GAAAC,EAAAH,GAAA,GAAAC,EAAAr4D,KAAAkzD,WASAkC,EAAAjE,IAAAiE,EAAAsD,SAQAtD,EAAAyD,OAAA,SAAAC,GAGA,GAFA3F,EAAA2F,KACAA,EAAArE,EAAAqE,IACAA,EAAAxD,SACA,KAAA55C,OAAA,mBAGA,IAAAg5C,EAAA,CAIA,IAAA10D,KAAAkzD,WACA,aAAAlzD,KAAAixD,OACA,IAAA6H,EAAA9H,MAAA,IAAA8H,EAAA7H,KAEA,MAAAjxD,KAQA,OAAA+wD,IANA/wD,KAAAkzD,SAAAwB,EAAAqE,MAAArE,EAAAsE,OACAh5D,KAAAgxD,IACAhxD,KAAAixD,KACA6H,EAAA9H,IACA8H,EAAA7H,MAEAyD,EAAAkE,WAAA54D,KAAAkzD,UAGA,GAAAlzD,KAAAs1D,SACA,MAAAt1D,MAAAkzD,SAAAQ,EAAAC,CACA,IAAAsF,GAAAtD,EAAAuD,CACA,IAAAl5D,KAAAkzD,SA6BK,CAKL,GAFA4F,EAAA5F,WACA4F,IAAAvH,cACAuH,EAAA1B,GAAAp3D,MACA,MAAA0zD,EACA,IAAAoF,EAAA1B,GAAAp3D,KAAAqyD,KAAA,IACA,MAAA6C,EACAgE,GAAAxF,MAtCA,CAGA,GAAA1zD,KAAAw1D,GAAA1J,GAAA,CACA,GAAAgN,EAAAtD,GAAAP,IAAA6D,EAAAtD,GAAAL,GACA,MAAArJ,EACA,IAAAgN,EAAAtD,GAAA1J,GACA,MAAAmJ,EAKA,OADAgE,GADAj5D,KAAAoyD,IAAA,GACAf,IAAAyH,GAAA5G,IAAA,GACA+G,EAAAzD,GAAA7B,GACAmF,EAAAvD,aAAAN,EAAAE,GAEAQ,EAAA31D,KAAAkxD,IAAA4H,EAAA3H,IAAA8H,IACAC,EAAAD,EAAAlpC,IAAA4lC,EAAAtE,IAAAyH,KAIS,GAAAA,EAAAtD,GAAA1J,GACT,MAAA9rD,MAAAkzD,SAAAQ,EAAAC,CACA,IAAA3zD,KAAAu1D,aACA,MAAAuD,GAAAvD,aACAv1D,KAAA+zD,MAAA1C,IAAAyH,EAAA/E,OACA/zD,KAAA+zD,MAAA1C,IAAAyH,GAAA/E,KACS,IAAA+E,EAAAvD,aACT,MAAAv1D,MAAAqxD,IAAAyH,EAAA/E,YACAmF,GAAAvF,EAmBA,IADAgC,EAAA31D,KACA21D,EAAA/C,IAAAkG,IAAA,CAGAG,EAAAjN,KAAAxrB,IAAA,EAAAwrB,KAAAQ,MAAAmJ,EAAA3C,WAAA8F,EAAA9F,YAWA,KAPA,GAAAmG,GAAAnN,KAAAlU,KAAAkU,KAAAoN,IAAAH,GAAAjN,KAAAqN,KACAC,EAAAH,GAAA,KAAA5E,EAAA,EAAA4E,EAAA,IAIAI,EAAA7G,EAAAuG,GACAO,EAAAD,EAAApI,IAAA2H,GACAU,EAAAjE,cAAAiE,EAAApC,GAAAzB,IACAsD,GAAAK,EACAC,EAAA7G,EAAAuG,EAAAj5D,KAAAkzD,UACAsG,EAAAD,EAAApI,IAAA2H,EAKAS,GAAAjE,WACAiE,EAAAtE,GAEAiE,IAAAnpC,IAAAwpC,GACA5D,IAAAzE,IAAAsI,GAEA,MAAAN,IASA9D,EAAA/D,IAAA+D,EAAAyD,OAOAzD,EAAAqE,OAAA,SAAAX,GAKA,GAJA3F,EAAA2F,KACAA,EAAArE,EAAAqE,IAGApE,EAAA,CAOA,MAAA3D,IANA/wD,KAAAkzD,SAAAwB,EAAAgF,MAAAhF,EAAAiF,OACA35D,KAAAgxD,IACAhxD,KAAAixD,KACA6H,EAAA9H,IACA8H,EAAA7H,MAEAyD,EAAAkE,WAAA54D,KAAAkzD,UAGA,MAAAlzD,MAAAkxD,IAAAlxD,KAAAqxD,IAAAyH,GAAA3H,IAAA2H,KASA1D,EAAApqB,IAAAoqB,EAAAqE,OAQArE,EAAAO,IAAAP,EAAAqE,OAMArE,EAAA7C,IAAA,WACA,MAAAxB,IAAA/wD,KAAAgxD,KAAAhxD,KAAAixD,KAAAjxD,KAAAkzD,WAQAkC,EAAAxD,IAAA,SAAA8E,GAGA,MAFAvD,GAAAuD,KACAA,EAAAjC,EAAAiC,IACA3F,EAAA/wD,KAAAgxD,IAAA0F,EAAA1F,IAAAhxD,KAAAixD,KAAAyF,EAAAzF,KAAAjxD,KAAAkzD,WAQAkC,EAAAtD,GAAA,SAAA4E,GAGA,MAFAvD,GAAAuD,KACAA,EAAAjC,EAAAiC,IACA3F,EAAA/wD,KAAAgxD,IAAA0F,EAAA1F,IAAAhxD,KAAAixD,KAAAyF,EAAAzF,KAAAjxD,KAAAkzD,WAQAkC,EAAApD,IAAA,SAAA0E,GAGA,MAFAvD,GAAAuD,KACAA,EAAAjC,EAAAiC,IACA3F,EAAA/wD,KAAAgxD,IAAA0F,EAAA1F,IAAAhxD,KAAAixD,KAAAyF,EAAAzF,KAAAjxD,KAAAkzD,WAQAkC,EAAAwE,UAAA,SAAAC,GAGA,MAFA1G,GAAA0G,KACAA,IAAAxE,SACA,IAAAwE,GAAA,IACA75D,KACA65D,EAAA,GACA9I,EAAA/wD,KAAAgxD,KAAA6I,EAAA75D,KAAAixD,MAAA4I,EAAA75D,KAAAgxD,MAAA,GAAA6I,EAAA75D,KAAAkzD,UAEAnC,EAAA,EAAA/wD,KAAAgxD,KAAA6I,EAAA,GAAA75D,KAAAkzD,WASAkC,EAAAlD,IAAAkD,EAAAwE,UAOAxE,EAAA0E,WAAA,SAAAD,GAGA,MAFA1G,GAAA0G,KACAA,IAAAxE,SACA,IAAAwE,GAAA,IACA75D,KACA65D,EAAA,GACA9I,EAAA/wD,KAAAgxD,MAAA6I,EAAA75D,KAAAixD,MAAA,GAAA4I,EAAA75D,KAAAixD,MAAA4I,EAAA75D,KAAAkzD,UAEAnC,EAAA/wD,KAAAixD,MAAA4I,EAAA,GAAA75D,KAAAixD,MAAA,OAAAjxD,KAAAkzD,WASAkC,EAAAhD,IAAAgD,EAAA0E,WAOA1E,EAAA2E,mBAAA,SAAAF,GAIA,GAHA1G,EAAA0G,KACAA,IAAAxE,SAEA,KADAwE,GAAA,IAEA,MAAA75D,KAEA,IAAAixD,GAAAjxD,KAAAixD,IACA,IAAA4I,EAAA,IAEA,MAAA9I,GADA/wD,KAAAgxD,MACA6I,EAAA5I,GAAA,GAAA4I,EAAA5I,IAAA4I,EAAA75D,KAAAkzD,UACS,YAAA2G,EACT9I,EAAAE,EAAA,EAAAjxD,KAAAkzD,UAEAnC,EAAAE,IAAA4I,EAAA,KAAA75D,KAAAkzD,WAUAkC,EAAA/C,KAAA+C,EAAA2E,mBAQA3E,EAAA4E,MAAA5E,EAAA2E,mBAMA3E,EAAA5D,SAAA,WACA,MAAAxxD,MAAAkzD,SAEAnC,EAAA/wD,KAAAgxD,IAAAhxD,KAAAixD,MAAA,GADAjxD,MAQAo1D,EAAA7D,WAAA,WACA,MAAAvxD,MAAAkzD,SACAlzD,KACA+wD,EAAA/wD,KAAAgxD,IAAAhxD,KAAAixD,MAAA,IAQAmE,EAAA6E,QAAA,SAAA/C,GACA,MAAAA,GAAAl3D,KAAAk6D,YAAAl6D,KAAAm6D,aAOA/E,EAAA8E,UAAA,WACA,GAAAzkC,GAAAz1B,KAAAixD,KACAz7B,EAAAx1B,KAAAgxD,GACA,QACA,IAAAx7B,EACAA,IAAA,MACAA,IAAA,OACAA,IAAA,GACA,IAAAC,EACAA,IAAA,MACAA,IAAA,OACAA,IAAA,KAQA2/B,EAAA+E,UAAA,WACA,GAAA1kC,GAAAz1B,KAAAixD,KACAz7B,EAAAx1B,KAAAgxD,GACA,QACAv7B,IAAA,GACAA,IAAA,OACAA,IAAA,MACA,IAAAA,EACAD,IAAA,GACAA,IAAA,OACAA,IAAA,MACA,IAAAA,IAWAs7B,EAAAsJ,UAAA,SAAAloD,EAAAghD,EAAAgE,GACA,MAAAA,GAAApG,EAAAuJ,YAAAnoD,EAAAghD,GAAApC,EAAAwJ,YAAApoD,EAAAghD,IASApC,EAAAuJ,YAAA,SAAAnoD,EAAAghD,GACA,UAAApC,GACA5+C,EAAA,GACAA,EAAA,MACAA,EAAA,OACAA,EAAA,OACAA,EAAA,GACAA,EAAA,MACAA,EAAA,OACAA,EAAA,OACAghD,IAUApC,EAAAwJ,YAAA,SAAApoD,EAAAghD,GACA,UAAApC,GACA5+C,EAAA,OACAA,EAAA,OACAA,EAAA,MACAA,EAAA,GACAA,EAAA,OACAA,EAAA,OACAA,EAAA,MACAA,EAAA,GACAghD,KnButaM,SAAUvzD,EAAQD,EAASS,GAEjC,YoBt+cA,SAAAo6D,GAA0B54C,EAAcqH,EAAc8X,EACpD05B,GAOA,WARoD,KAAA15B,OAAA,OACpD,KAAA05B,MAAA,MAEKA,IACHA,EAAS,GAAIC,GAAAC,OACb55B,GAAU,GAEZ05B,EAAOD,UAAU54C,EAAMqH,EAAM8X,GACtB05B,EAIT,QAAAG,GAAyBH,GACvB,MAAOA,GAAOG,WAIhB,QAAAC,GAA+BJ,GAC7B,GAAInmC,GAAUmmC,EAAOnmC,OACrB,OAAOA,GAAQ9O,kBAAoB8O,EAAQtR,YAAY/gB,OACnDqyB,EAAQtR,YAAYsR,EAAQ9O,qBAC5B,KAON,QAAAs1C,GAAuBh6C,GACrB,MAAOA,GAAQV,UAAYiE,EAAAhE,mBAAmBC,KAIhD,QAAAy6C,GAA0Bj6C,GACxB,MAAOA,GAAQV,UAAYiE,EAAAhE,mBAAmBE,QAIhD,QAAAy6C,GAAwBl6C,GACtB,MAAOA,GAAQV,UAAYiE,EAAAhE,mBAAmBG,MAIhD,QAAAy6C,KACE,MAAO,IAAIh3D,GAAAk7B,QAIb,QAAA+7B,GAA0Bp1C,EAAkBnQ,GAC1CmQ,EAAQnQ,OAASA,EAInB,QAAAwlD,GAAiCr1C,EAAkBuZ,GACjDvZ,EAAQuZ,cAAgBA,EAI1B,QAAA+7B,GAA4Bt1C,EAAkBwZ,GAC5CxZ,EAAQwZ,SAAWA,EAIrB,QAAA+7B,GAA4Bv1C,EAAkByZ,GAC5CzZ,EAAQyZ,SAAWA,EAIrB,QAAA+7B,GAAgCx1C,EAAkB0Z,GAChD1Z,EAAQ0Z,aAAeA,EAIzB,QAAA+7B,GAA6Bz1C,EAAkBrK,GAC7CqK,EAAQrK,UAAYA,EAItB,QAAA+/C,GAA8B11C,EAAkB2Z,GAC9C3Z,EAAQ2Z,WAAaA,EAIvB,QAAAiB,GAAwB+5B,EAAgB30C,OAAA,KAAAA,MAAA,KACtC,IAAIwO,GAAUmmC,EAAO7P,QAErB,OADe,IAAI3mD,GAAAg8B,SAAS3L,EAASxO,GACrB4a,UAIlB,QAAA+6B,GAA0B77D,GACxB,GAAI87D,GAAa,GAAIC,GAAAC,UAErB,OADAF,GAAWD,UAAU77D,GACd87D,EAAW9Q,SpB44cpB5pD,OAAOC,eAAetB,EAAS,cAAgBoE,OAAO,GoBlgdtD,IAAAE,GAAA7D,EAAA,GAMAu7D,EAAAv7D,EAAA,IAIAikB,EAAAjkB,EAAA,EAwCoCT,GAAAk8D,iBArClCx3C,EAAAxD,uBAOF,IAAA65C,GAAAt6D,EAAA,GAKAT,GAAA66D,YAYA76D,EAAAi7D,WAKAj7D,EAAAk7D,iBAWAl7D,EAAAm7D,SAKAn7D,EAAAo7D,YAKAp7D,EAAAq7D,UAKAr7D,EAAAs7D,gBAKAt7D,EAAAu7D,YAKAv7D,EAAAw7D,mBAKAx7D,EAAAy7D,cAKAz7D,EAAA07D,cAKA17D,EAAA27D,kBAKA37D,EAAA47D,eAKA57D,EAAA67D,gBAKA77D,EAAA+gC,UAOA/gC,EAAA87D,WAOA,IAAAx8B,GAAA7+B,EAAA,EAAST,GAAAqlB,eAAAia,EAAAja,gBpBo/cH,SAAUplB,EAAQD,EAASS,GAEjC,YqBhzbA,SAAA07D,GAA0BlqD,GACxB,OAAQA,GACN,IAAK4S,GAAAxgB,WAAWgQ,KAAM,MAAO,MAC7B,KAAKwQ,GAAAxgB,WAAW2Y,IAAK,MAAO,KAC5B,KAAK6H,GAAAxgB,WAAW6Y,IAAK,MAAO,KAC5B,KAAK2H,GAAAxgB,WAAWgZ,IAAK,MAAO,KAC5B,KAAKwH,GAAAxgB,WAAWkZ,IAAK,MAAO,KAC5B,KAAKsH,GAAAxgB,WAAW+3D,YAAa,KAAM,IAAIpgD,OAAM,mBAC7C,KAAK6I,GAAAxgB,WAAWg4D,KAAM,KAAM,IAAIrgD,OAAM,YACtC,SAAS,KAAM,IAAIA,OAAM,oBrByyb7B3a,OAAOC,eAAetB,EAAS,cAAgBoE,OAAO,GqBpndtD,IAAAygB,GAAApkB,EAAA,GAeAw7D,EAAA,WAWE,QAAAA,KAHA37D,KAAA2hB,QACA3hB,KAAAg8D,WAAkB,EAwyBpB,MA/yBSL,GAAAH,UAAP,SAAiB77D,GACf,GAAI87D,GAAa,GAAIE,EAErB,OADAF,GAAWD,UAAU77D,GACd87D,EAAW9Q,UASpBgR,EAAAn6D,UAAAg6D,UAAA,SAAU77D,GACR,KAAM,IAAI+b,OAAM,oBAGlBigD,EAAAn6D,UAAAy6D,kBAAA,SAAkBtiD,GAChB,GAAI/Y,GAAO2jB,EAAArhB,WAAWg5D,yBAAyBviD,KAAU,IAAM3Z,KAAKg8D,WAAW36C,SAAS,IACpF7M,EAAOq2B,yBAAyBlxB,EACpC3Z,MAAK2D,KAAK,aACV3D,KAAK2D,KAAK/C,GACVZ,KAAK2D,KAAK,IACT,KAAK,GAAIrD,GAAW,EAAG4B,EAAWi6D,8BAA8BxiD,GAAOrZ,EAAI4B,IAAK5B,EAC3EA,EAAI,GAAGN,KAAK2D,KAAK,MACrB3D,KAAK2D,KAAK,KACV3D,KAAK2D,KAAKrD,EAAE+gB,SAAS,KACrBrhB,KAAK2D,KAAK,MACV3D,KAAK2D,KAAKk4D,EAAiBO,0BAA0BziD,EAAMrZ,IAE7DN,MAAK2D,KAAK,OACV3D,KAAK2D,KAAKk4D,EAAiBQ,2BAA2B1iD,KACtD3Z,KAAK2D,KAAK,KACN4Y,yBAAyB/H,IAAS+P,EAAA/f,aAAa83D,OACjDt8D,KAAK2D,KAAK,OAEZ3D,KAAKu8D,oBAAoB/nD,GACrB+H,yBAAyB/H,IAAS+P,EAAA/f,aAAa83D,OACjDt8D,KAAK2D,KAAK,WAEV3D,KAAKg8D,YAGTL,EAAAn6D,UAAA+6D,oBAAA,SAAoBvrD,GAClB,GAGIwrD,GACAC,EACAn8D,EAAU4B,EALVg4B,EAAK3d,yBAAyBvL,GAC9BW,EAAO8K,2BAA2BzL,EAMtC,QAAQkpB,GAEN,IAAK3V,GAAA/f,aAAa83D,MAOhB,IAN0D,OAArDG,EAASl4C,EAAArhB,WAAWw5D,sBAAsB1rD,OAC7ChR,KAAK2D,KAAK84D,GACVz8D,KAAK2D,KAAK,OAEZ3D,KAAK2D,KAAK,OACVzB,EAAIy6D,6BAA6B3rD,GAC5B1Q,EAAI,EAAGA,EAAI4B,IAAK5B,EACnBN,KAAKu8D,oBAAoBK,uBAAuB5rD,EAAM1Q,GAGxD,YADAN,MAAK2D,KAAK,MAGZ,KAAK4gB,GAAA/f,aAAaq4D,GAiBhB,YAhBIlrD,GAAQ4S,EAAAxgB,WAAWgQ,MACrB/T,KAAK2D,KAAK,QACV3D,KAAKu8D,oBAAoBO,wBAAwB9rD,IACjDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBQ,qBAAqB/rD,KAC1CwrD,EAASQ,sBAAsBhsD,MACjChR,KAAK2D,KAAK,UACV3D,KAAKu8D,oBAAoBC,MAG3Bx8D,KAAKu8D,oBAAoBO,wBAAwB9rD,IACjDhR,KAAK2D,KAAK,OACV3D,KAAKu8D,oBAAoBQ,qBAAqB/rD,IAC9ChR,KAAK2D,KAAK,OACV3D,KAAKu8D,oBAAoBS,sBAAsBhsD,KAInD,KAAKuT,GAAA/f,aAAay4D,KACyC,OAApDR,EAASl4C,EAAArhB,WAAWg6D,qBAAqBlsD,OAC5ChR,KAAK2D,KAAK84D,GACVz8D,KAAK2D,KAAK,OAEZ3D,KAAK2D,KAAK,OACV3D,KAAKu8D,oBAAoBY,qBAAqBnsD,IAC9ChR,KAAK2D,KAAK,eAEZ,KAAK4gB,GAAA/f,aAAa44D,MAahB,OAZIZ,EAASa,2BAA2BrsD,MACtChR,KAAK2D,KAAK,QACV3D,KAAKu8D,oBAAoBC,GACzBx8D,KAAK2D,KAAK,YAE8C,OAArD84D,EAASl4C,EAAArhB,WAAWo6D,sBAAsBtsD,MAC7ChR,KAAK2D,KAAK,UACV3D,KAAK2D,KAAK84D,GACVz8D,KAAK2D,KAAK,QAEV3D,KAAK2D,KAAK,YAId,KAAK4gB,GAAA/f,aAAa+4D,OAElB,IAAKh5C,GAAA/f,aAAag5D,KAElB,IAAKj5C,GAAA/f,aAAai5D,WAElB,IAAKl5C,GAAA/f,aAAak5D,aAElB,IAAKn5C,GAAA/f,aAAa2Y,SAGhB,MAFAnd,MAAK2D,KAAK,SACV3D,MAAK2D,KAAKyZ,0BAA0BpM,GAAMqQ,SAAS,IAGrD,KAAKkD,GAAA/f,aAAam5D,SAKhB,MAJA39D,MAAK2D,KAAK,KACV3D,KAAK2D,KAAKi6D,0BAA0B5sD,GAAMqQ,SAAS,KACnDrhB,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBsB,0BAA0B7sD,GAGrD,KAAKuT,GAAA/f,aAAa6Y,UAElB,IAAKkH,GAAA/f,aAAas5D,UAElB,IAAKv5C,GAAA/f,aAAagZ,KAQhB,MAPAxd,MAAK2D,KAAK,SACV3D,KAAK2D,KAAKk4D,EAAiBlqD,IAC3B3R,KAAK2D,KAAK,MACV3D,KAAK2D,KAAKia,uBAAuB5M,GAAMqQ,SAAS,KAChDrhB,KAAK2D,KAAK,OACV3D,KAAKu8D,oBAAoB9+C,oBAAoBzM,QAC7ChR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAA/f,aAAau5D,MAUhB,MATA/9D,MAAK2D,KAAK,UACV3D,KAAK2D,KAAKk4D,EAAiBlqD,IAC3B3R,KAAK2D,KAAK,MACV3D,KAAK2D,KAAKq6D,wBAAwBhtD,GAAMqQ,SAAS,KACjDrhB,KAAK2D,KAAK,OACV3D,KAAKu8D,oBAAoB0B,qBAAqBjtD,IAC9ChR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoB2B,uBAAuBltD,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAA/f,aAAagY,MAChB,OAAQ7K,GAEN,IAAK4S,GAAAxgB,WAAW2Y,IAEd,WADA1c,MAAK2D,KAAKgZ,0BAA0B3L,GAAMqQ,SAAS,IAGrD,KAAKkD,GAAAxgB,WAAW6Y,IASd,WARA5c,MAAK2D,KACHsvD,cACEt9B,QACE9Y,6BAA6B7L,GAC7B8L,8BAA8B9L,KAMtC,KAAKuT,GAAAxgB,WAAWgZ,IAEd,WADA/c,MAAK2D,KAAKqZ,0BAA0BhM,GAAMqQ,SAAS,IAGrD,KAAKkD,GAAAxgB,WAAWkZ,IAEd,WADAjd,MAAK2D,KAAKuZ,0BAA0BlM,GAAMqQ,SAAS,KAGvD,KAEF,KAAKkD,GAAA/f,aAAauZ,MAChB,OAAQE,oBAAoBjN,IAE1B,IAAKuT,GAAAle,QAAQioD,OAIX,MAHAtuD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQmoD,OAIX,MAHAxuD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQqoD,UAIX,MAHA1uD,MAAK2D,KAAK,gBACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQgxC,OACb,IAAK9yB,GAAAle,QAAQixC,OAGX,MAFAt3C,MAAK2D,KAAK,SACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ+nD,OAIX,MAHApuD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQ+oD,QAIX,MAHApvD,MAAK2D,KAAK,cACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQipD,SAIX,MAHAtvD,MAAK2D,KAAK,eACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQ6pD,SAIX,MAHAlwD,MAAK2D,KAAK,eACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQqpD,WAIX,MAHA1vD,MAAK2D,KAAK,iBACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQ2pD,QAIX,MAHAhwD,MAAK2D,KAAK,cACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQi4B,OACb,IAAK/Z,GAAAle,QAAQk4B,OAGX,MAFAv+B,MAAK2D,KAAK,SACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQkoD,OAIX,MAHAvuD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQooD,OAIX,MAHAzuD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQsoD,UAIX,MAHA3uD,MAAK2D,KAAK,gBACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQgoD,OAIX,MAHAruD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQgpD,QAIX,MAHArvD,MAAK2D,KAAK,cACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQkpD,SAIX,MAHAvvD,MAAK2D,KAAK,eACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQ8pD,SAIX,MAHAnwD,MAAK2D,KAAK,eACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQspD,WAIX,MAHA3vD,MAAK2D,KAAK,iBACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQ4pD,QAIX,MAHAjwD,MAAK2D,KAAK,cACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQ+lC,UAGX,MAFApsC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQgmC,UAGX,MAFArsC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ8lC,QAKb,IAAK5nB,GAAAle,QAAQ+kC,cAGX,MAFAprC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ8kC,cAGX,MAFAnrC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQilC,cAGX,MAFAtrC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQglC,cAGX,MAFArrC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQmlC,cAGX,MAFAxrC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQklC,cAGX,MAFAvrC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQqlC,cAGX,MAFA1rC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQolC,cAGX,MAFAzrC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQupD,eAIX,MAHA5vD,MAAK2D,KAAK,yBACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQwpD,eAIX,MAHA7vD,MAAK2D,KAAK,yBACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQwlC,gBAGX,MAFA7rC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ4lC,gBAGX,MAFAjsC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQylC,gBAGX,MAFA9rC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ6lC,gBAGX,MAFAlsC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQslC,gBAGX,MAFA3rC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ0lC,gBAGX,MAFA/rC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQulC,gBAGX,MAFA5rC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ2lC,gBAGX,MAFAhsC,MAAK2D,KAAK,kBACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ4kC,WAGX,MAFAjrC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQ6kC,UAGX,MAFAlrC,MAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBv+C,uBAAuBhN,GAGlD,KAAKuT,GAAAle,QAAQypD,eAIX,MAHA9vD,MAAK2D,KAAK,yBACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAle,QAAQ0pD,eAIX,MAHA/vD,MAAK2D,KAAK,yBACV3D,KAAKu8D,oBAAoBv+C,uBAAuBhN,QAChDhR,MAAK2D,KAAK,KAGd,KAEF,KAAK4gB,GAAA/f,aAAa8W,OAChB,OAAQ8C,qBAAqBpN,IAE3B,IAAKuT,GAAAlb,SAASo6B,OACd,IAAKlf,GAAAlb,SAAS8lC,OACd,IAAK5qB,GAAAlb,SAAS+lC,OACd,IAAK7qB,GAAAlb,SAASgmC,OAIZ,MAHArvC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASmmC,OACd,IAAKjrB,GAAAlb,SAASomC,OACd,IAAKlrB,GAAAlb,SAASqmC,OACd,IAAKnrB,GAAAlb,SAASsmC,OAIZ,MAHA3vC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASymC,OACd,IAAKvrB,GAAAlb,SAAS0mC,OACd,IAAKxrB,GAAAlb,SAAS2mC,OACd,IAAKzrB,GAAAlb,SAAS4mC,OAIZ,MAHAjwC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS+mC,OACd,IAAK7rB,GAAAlb,SAASgnC,OACd,IAAK9rB,GAAAlb,SAASmnC,OACd,IAAKjsB,GAAAlb,SAASonC,OAIZ,MAHAzwC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASinC,OAMZ,MALAtwC,MAAK2D,KAAK,eACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,YACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAASunC,OACd,IAAKrsB,GAAAlb,SAASwnC,OAIZ,MAHA7wC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASynC,OAMZ,MALA9wC,MAAK2D,KAAK,eACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,YACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAAS+0B,OACd,IAAK7Z,GAAAlb,SAASuoC,OAIZ,MAHA5xC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS0oC,MACd,IAAKxtB,GAAAlb,SAAS2oC,MAIZ,MAHAhyC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS8oC,OACd,IAAK5tB,GAAAlb,SAAS+oC,OAIZ,MAHApyC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS80B,OACd,IAAK5Z,GAAAlb,SAAS6nC,OAIZ,MAHAlxC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,YACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASioC,OACd,IAAK/sB,GAAAlb,SAASkoC,OAIZ,MAHAvxC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,aACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS60B,OACd,IAAK3Z,GAAAlb,SAASgoC,OAIZ,MAHArxC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,YACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASulD,QAMZ,MALA5uD,MAAK2D,KAAK,cACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAASylD,QAMZ,MALA9uD,MAAK2D,KAAK,cACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAAS8+B,MACd,IAAK5jB,GAAAlb,SAASslC,MACd,IAAKpqB,GAAAlb,SAASo1B,MACd,IAAKla,GAAAlb,SAASq1B,MAIZ,MAHA1+B,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,YACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASylC,MACd,IAAKvqB,GAAAlb,SAASu1B,MACd,IAAKra,GAAAlb,SAASw1B,MACd,IAAKta,GAAAlb,SAASy1B,MAIZ,MAHA9+B,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,YACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASyjC,MACd,IAAKvoB,GAAAlb,SAAS0jC,MACd,IAAKxoB,GAAAlb,SAAS6jC,MACd,IAAK3oB,GAAAlb,SAAS8jC,MAIZ,MAHAntC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS2jC,MAKZ,MAJAhtC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,gBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASukC,MACd,IAAKrpB,GAAAlb,SAASwkC,MACd,IAAKtpB,GAAAlb,SAAS2kC,MACd,IAAKzpB,GAAAlb,SAAS4kC,MAIZ,MAHAjuC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,YACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASykC,MAKZ,MAJA9tC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,iBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASgkC,MACd,IAAK9oB,GAAAlb,SAASikC,MACd,IAAK/oB,GAAAlb,SAASokC,MACd,IAAKlpB,GAAAlb,SAASqkC,MAIZ,MAHA1tC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,WACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASkkC,MAKZ,MAJAvtC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,gBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS8kC,MACd,IAAK5pB,GAAAlb,SAAS+kC,MACd,IAAK7pB,GAAAlb,SAASklC,MACd,IAAKhqB,GAAAlb,SAASmlC,MAIZ,MAHAxuC,MAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,YACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASglC,MAKZ,MAJAruC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,iBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASknC,OAKZ,MAJAvwC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,gBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS0nC,OAKZ,MAJA/wC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,gBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGlD,KAAKuT,GAAAlb,SAASwlD,QAMb,MALA7uD,MAAK2D,KAAK,cACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAAS0lD,QAMZ,MALA/uD,MAAK2D,KAAK,cACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAAS4jC,MAKZ,MAJAjtC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,gBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAAS0kC,MAKZ,MAJA/tC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,iBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASmkC,MAKZ,MAJAxtC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,gBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASilC,MAKZ,MAJAtuC,MAAK2D,KAAK,SACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,iBACV3D,MAAKu8D,oBAAoBp+C,wBAAwBnN,GAGnD,KAAKuT,GAAAlb,SAASmmD,YAMZ,MALAxvD,MAAK2D,KAAK,kBACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAAS6lD,OAMZ,MALAlvD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAAS2lD,OAMZ,MALAhvD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGV,KAAK4gB,GAAAlb,SAASomD,YAMd,MALAzvD,MAAK2D,KAAK,kBACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAAS8lD,OAMZ,MALAnvD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAAlb,SAAS4lD,OAMZ,MALAjvD,MAAK2D,KAAK,aACV3D,KAAKu8D,oBAAoBr+C,uBAAuBlN,IAChDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoBp+C,wBAAwBnN,QACjDhR,MAAK2D,KAAK,KAGd,MAEF,KAAK4gB,GAAA/f,aAAa25D,OAUhB,MATAn+D,MAAK2D,KAAK,WACV3D,KAAK2D,KAAKk4D,EAAiBlqD,IAC3B3R,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoB6B,yBAAyBptD,IAClDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoB8B,0BAA0BrtD,IACnDhR,KAAK2D,KAAK,MACV3D,KAAKu8D,oBAAoB+B,4BAA4BttD,QACrDhR,MAAK2D,KAAK,IAGZ,KAAK4gB,GAAA/f,aAAa+5D,KAGhB,MAFAv+D,MAAKu8D,oBAAoBiC,sBAAsBxtD,QAC/ChR,MAAK2D,KAAK,MAGZ,KAAK4gB,GAAA/f,aAAai6D,OAQhB,aAPIjC,EAASkC,wBAAwB1tD,KACnChR,KAAK2D,KAAK,WACV3D,KAAKu8D,oBAAoBC,GACzBx8D,KAAK2D,KAAK,QAEV3D,KAAK2D,KAAK,aAId,KAAK4gB,GAAA/f,aAAam6D,KAChB,OAAQC,mBAAmB5tD,IACzB,IAAKuT,GAAArW,OAAOoiD,cAEV,WADAtwD,MAAK2D,KAAK,mBAEZ,KAAK4gB,GAAArW,OAAOqiD,WAIV,MAHAvwD,MAAK2D,KAAK,gBACV3D,KAAKu8D,oBAAoBsC,wBAAwB7tD,EAAM,QACvDhR,MAAK2D,KAAK,KAGd,KAEF,KAAK4gB,GAAA/f,aAAas6D,IAEhB,WADA9+D,MAAK2D,KAAK,MAGZ,KAAK4gB,GAAA/f,aAAas3D,YAEhB,WADA97D,MAAK2D,KAAK,gBAGZ,KAAK4gB,GAAA/f,aAAau6D,cAElB,IAAKx6C,GAAA/f,aAAaw6D,UAElB,IAAKz6C,GAAA/f,aAAay6D,WAElB,IAAK16C,GAAA/f,aAAa06D,YAEpB,KAAM,IAAIxjD,OAAM,oBAGVigD,EAAAn6D,UAAAmC,KAAR,SAAage,GAEX3hB,KAAK2hB,KAAKhe,KAAKge,IAGjBg6C,EAAAn6D,UAAAmpD,OAAA,WACE,GAAI3nD,GAAMhD,KAAK2hB,KAAKD,KAAK,GAEzB,OADA1hB,MAAK2hB,QACE3e,GAEX24D,IAjzBaj8D,GAAAi8D,crB6yeP,SAAUh8D,EAAQD,EAASS,GAEjC,YsBhrZA,SAAAg/D,GAAkCj4C,GAChC,OAAQA,GAEN,IAAK+X,GAAA2N,MAAMuY,YACT,MAAM,EAER,KAAKlmB,GAAA2N,MAAMkY,MACT,MAAM,EAER,KAAK7lB,GAAA2N,MAAM2K,YACX,IAAKtY,GAAA2N,MAAM4K,MACX,IAAKvY,GAAA2N,MAAMsC,KACX,IAAKjQ,GAAA2N,MAAM2C,MACX,IAAKtQ,GAAA2N,MAAMoK,UACX,IAAK/X,GAAA2N,MAAMuK,YACX,IAAKlY,GAAA2N,MAAM8K,OACX,IAAKzY,GAAA2N,MAAMgY,KACX,IAAK3lB,GAAA2N,MAAMkX,OACT,MAAM,GAER,KAAK7kB,GAAA2N,MAAM5C,IACT,MAAM,GAER,SACE,OAAM,GAKZ,QAAAo1B,GAA6Bl4C,GAC3B,OAAQA,GAEN,IAAK+X,GAAA2N,MAAMtD,MACT,MAAM,EAER,KAAKrK,GAAA2N,MAAMmC,OACX,IAAK9P,GAAA2N,MAAMqC,YACX,IAAKhQ,GAAA2N,MAAM0C,aACX,IAAKrQ,GAAA2N,MAAMyY,yBACX,IAAKpmB,GAAA2N,MAAMgD,gBACX,IAAK3Q,GAAA2N,MAAMsD,aACX,IAAKjR,GAAA2N,MAAM8D,eACX,IAAKzR,GAAA2N,MAAMoE,yBACX,IAAK/R,GAAA2N,MAAMuE,+BACX,IAAKlS,GAAA2N,MAAM4E,2CACX,IAAKvS,GAAA2N,MAAM8E,iBACX,IAAKzS,GAAA2N,MAAMqF,aACX,IAAKhT,GAAA2N,MAAMiF,WACT,MAAM,EAER,KAAK5S,GAAA2N,MAAMma,SACT,MAAM,EAER,KAAK9nB,GAAA2N,MAAM0F,QACT,MAAM,EAER,KAAKrT,GAAA2N,MAAMyF,oBACT,MAAM,EAER,KAAKpT,GAAA2N,MAAMkF,IACT,MAAM,EAER,KAAK7S,GAAA2N,MAAMsF,MACT,MAAM,EAER,KAAKjT,GAAA2N,MAAM+E,UACT,MAAM,EAER,KAAK1S,GAAA2N,MAAM8B,cACX,IAAKzP,GAAA2N,MAAMiC,mBACX,IAAK5P,GAAA2N,MAAM6B,qBACX,IAAKxP,GAAA2N,MAAMgC,0BACT,MAAM,GAER,KAAK3P,GAAA2N,MAAM2W,GACX,IAAKtkB,GAAA2N,MAAMwX,GACX,IAAKnlB,GAAA2N,MAAMyX,WACX,IAAKplB,GAAA2N,MAAMC,SACX,IAAK5N,GAAA2N,MAAMQ,YACX,IAAKnO,GAAA2N,MAAMe,gBACX,IAAK1O,GAAA2N,MAAMsB,mBACT,MAAM,GAER,KAAKjP,GAAA2N,MAAMqE,kBACX,IAAKhS,GAAA2N,MAAMwE,wBACX,IAAKnS,GAAA2N,MAAM6E,oCACT,MAAM,GAER,KAAKxS,GAAA2N,MAAMsC,KACX,IAAKjQ,GAAA2N,MAAM2C,MACT,MAAM,GAER,KAAKtQ,GAAA2N,MAAMiD,SACX,IAAK5Q,GAAA2N,MAAMuD,MACX,IAAKlR,GAAA2N,MAAM+D,QACT,MAAM,GAER,KAAK1R,GAAA2N,MAAMwY,kBACT,MAAM,GAER,KAAKnmB,GAAA2N,MAAMoK,UACX,IAAK/X,GAAA2N,MAAMuK,YACT,MAAM,GAER,KAAKlY,GAAA2N,MAAM2Z,IACX,IAAKtnB,GAAA2N,MAAM5C,IACX,IAAK/K,GAAA2N,MAAMoa,YACT,MAAM,GAER,SACE,OAAM,GAKZ,QAAAqY,GAA4Bn4C,GAC1B,OAAQA,GAEN,IAAK+X,GAAA2N,MAAMmC,OACX,IAAK9P,GAAA2N,MAAMqC,YACX,IAAKhQ,GAAA2N,MAAM0C,aACX,IAAKrQ,GAAA2N,MAAMyY,yBACX,IAAKpmB,GAAA2N,MAAMgD,gBACX,IAAK3Q,GAAA2N,MAAMsD,aACX,IAAKjR,GAAA2N,MAAM8D,eACX,IAAKzR,GAAA2N,MAAMoE,yBACX,IAAK/R,GAAA2N,MAAMuE,+BACX,IAAKlS,GAAA2N,MAAM4E,2CACX,IAAKvS,GAAA2N,MAAM8E,iBACX,IAAKzS,GAAA2N,MAAMqF,aACX,IAAKhT,GAAA2N,MAAMiF,WACX,IAAK5S,GAAA2N,MAAMma,SACX,IAAK9nB,GAAA2N,MAAMwY,kBACT,OAAO,CAET,SACE,OAAO,GtBijZb,GAAIhiC,GAAapjB,MAAQA,KAAKojB,WAAc,WACxC,GAAIC,GAAgBtiB,OAAOuiB,iBACpBC,uBAA2B7f,QAAS,SAAU/C,EAAG6iB,GAAK7iB,EAAE4iB,UAAYC,IACvE,SAAU7iB,EAAG6iB,GAAK,IAAK,GAAI9hB,KAAK8hB,GAAOA,EAAE/hB,eAAeC,KAAIf,EAAEe,GAAK8hB,EAAE9hB,IACzE,OAAO,UAAUf,EAAG6iB,GAEhB,QAASC,KAAOzjB,KAAK0jB,YAAc/iB,EADnC0iB,EAAc1iB,EAAG6iB,GAEjB7iB,EAAEa,UAAkB,OAANgiB,EAAaziB,OAAOgO,OAAOyU,IAAMC,EAAGjiB,UAAYgiB,EAAEhiB,UAAW,GAAIiiB,OAGvF1iB,QAAOC,eAAetB,EAAS,cAAgBoE,OAAO,GsBz0etD,IAAAk7B,GAAA7+B,EAAA,GAMA8+B,EAAA9+B,EAAA,GAMAikB,EAAAjkB,EAAA,GAKAg5C,EAAAh5C,EAAA,IAIAmkB,EAAAnkB,EAAA,GA0DAu6D,EAAA,SAAAr1C,GAUE,QAAAq1C,KAAA,GAAAp1C,GACED,EAAA7kB,KAAAR,OAAOA,ItBgweH,OsBtweNslB,GAAAg6C,QAAoB,GAAI57D,OAExB4hB,EAAAi6C,QAAuB,GAAIzvC,KAKzBxK,EAAK+O,QAAU,GAAI2K,GAAA5Z,QAAQE,EAAKvC,atB+verBuC,EsBjvZf,MA1hF4BlC,GAAAs3C,EAAAr1C,GAgB1Bq1C,EAAAl5D,UAAA+4D,UAAA,SACE54C,EACAqH,EACA8X,GAKA,IAAK,GADDvf,GAAiB43B,EAAA+E,UAAcl1B,GAC1B1oB,EAAI,EAAG4B,EAAIlC,KAAKq0B,QAAQ1O,QAAQ3jB,OAAQ1B,EAAI4B,IAAK5B,EACxD,GAAIN,KAAKq0B,QAAQ1O,QAAQrlB,GAAGihB,gBAAkBA,EAAgB,MAEhEvhB,MAAKu/D,QAAQxvC,IAAIxO,EAGjB,IAAID,GAAS,GAAIgD,GAAA69B,OACf5gC,EACAI,EACAmf,EACIxc,EAAA49B,WAAWI,MACXt5B,EAAKm1B,WAAWnf,EAAAja,iBAAmBiE,EAAKqrC,QAAQr1B,EAAAxa,eAAgBwa,EAAAja,eAAe/iB,QAAU,EACvFsiB,EAAA49B,WAAWK,QACXj+B,EAAA49B,WAAW2B,QAEnB7jD,MAAKq0B,QAAQ1O,QAAQhiB,KAAK2d,EAG1B,IAAIk+C,GAAK,GAAIvgC,GAAAumB,UAAUlkC,EAAQthB,KAAKq0B,QAAQtR,YAE5C,KADAzB,EAAO8gC,UAAYod,GACXA,EAAGrX,KAAKlpB,EAAA2N,MAAMib,YAAY,CAChC,GAAI5gC,GAAYjnB,KAAKy/D,uBAAuBD,EACxCv4C,KACFA,EAAU8B,OAASzH,EACnBA,EAAOyF,WAAWpjB,KAAKsjB,IAG3Bu4C,EAAG7U,UAIL+P,EAAAl5D,UAAAi+D,uBAAA,SACED,EACAE,OAAA,KAAAA,OAAA,EAKA,KADA,GAAI/0C,GAAiC,KAC9B60C,EAAGrX,KAAKlpB,EAAA2N,MAAMwa,KAAK,CACxB,GAAI15B,GAAY1tB,KAAK2/D,eAAeH,EACpC,KAAK9xC,EAAW,KACX/C,KAAYA,MACjBA,EAAWhnB,KAAK+pB,GAIlB,GAAInB,GAA+B,IAC/BizC,GAAGrX,KAAKlpB,EAAA2N,MAAMplB,UAChB+E,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa7E,OAAQg4C,EAAGv+C,SAAUsL,IAE5EizC,EAAGrX,KAAKlpB,EAAA2N,MAAMhY,WAChBrI,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAauI,QAAS4qC,EAAGv+C,SAAUsL,GAC/EizC,EAAG1X,MAAK,GACJ0X,EAAG1Z,oBACL9lD,KAAKijB,MACHmB,EAAAjC,eAAey9C,8BACfJ,EAAGv+C,MAAMu+C,EAAGja,OAMlBia,EAAGpX,MAGH,IACI3P,GADAxxB,EAA8B,IAIlC,QAAQu4C,EAAG17C,QAET,IAAKmb,GAAA2N,MAAM7X,MAET,GADAxI,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa0I,MAAOyqC,EAAGv+C,SAAUsL,GACzEizC,EAAGrX,KAAKlpB,EAAA2N,MAAM9X,MAAO,CACvB7N,EAAYjnB,KAAK6/D,UAAUL,EAAIjzC,EAAW5B,EAC1C,OAEF1D,EAAYjnB,KAAK8/D,cAAcN,EAAIjzC,EAAW5B,GAC9CA,EAAa,IACb,MAEF,KAAKsU,GAAA2N,MAAM7W,IACTxJ,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa0J,IAAKypC,EAAGv+C,SAAUsL,EAG7E,KAAK0S,GAAA2N,MAAM+X,IACT19B,EAAYjnB,KAAK8/D,cAAcN,EAAIjzC,EAAW5B,GAC9CA,EAAa,IACb,MAEF,KAAKsU,GAAA2N,MAAM9X,KACT7N,EAAYjnB,KAAK6/D,UAAUL,EAAIjzC,EAAW5B,GAC1CA,EAAa,IACb,MAEF,KAAKsU,GAAA2N,MAAMvU,SACTpR,EAAYjnB,KAAK+/D,cAAcP,EAAIjzC,EAAW5B,GAC9CA,EAAa,IACb,MAEF,KAAKsU,GAAA2N,MAAMjW,SACT,IAAK6oC,EAAGrX,KAAKlpB,EAAA2N,MAAM9Z,OAAQ,CACzB9yB,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,MAAMu+C,EAAGja,KAAM,QAEpB,OAEFh5B,EAAYjI,EAAAk0B,YACVl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAasK,SAAU6oC,EAAGv+C,SAAUsL,EAI5D,KAAK0S,GAAA2N,MAAM9Z,MACT7L,EAAYjnB,KAAKggE,WAAWR,EAAIjzC,EAAW5B,GAC3CA,EAAa,IACb,MAEF,KAAKsU,GAAA2N,MAAMnY,UACTxN,EAAYjnB,KAAKigE,eAAeT,EAAIjzC,EAAW5B,GAC/CA,EAAa,IACb,MAEF,KAAKsU,GAAA2N,MAAMhlB,OAEPX,GADEwxB,EAAWn0B,EAAAo0B,YAAYp0B,EAAA+H,aAAa7E,OAAQ+E,IAClCvsB,KAAKkgE,kBAAkBV,EAAI/mB,EAASx3B,OAEpCjhB,KAAKmgE,YAAYX,GAE3BjzC,GAAWjI,EAAA+zB,qBAAqB9rB,EACpC,MAEF,KAAK0S,GAAA2N,MAAM8U,KACTz6B,EAAYjnB,KAAKogE,qBAAqBZ,EAAIjzC,EAAW5B,GACrDA,EAAa,IACb,MAEF,SAGMrG,EAAA8H,YAAY9H,EAAA+H,aAAa7E,OAAQ+E,IACnCizC,EAAGnX,QACHphC,EAAYjnB,KAAKqgE,YAAYb,EAAIjzC,KAI7BA,KACEksB,EAAWn0B,EAAAo0B,YAAYp0B,EAAA+H,aAAauI,QAASrI,KAC/CvsB,KAAKijB,MACHmB,EAAAjC,eAAem+C,gCACf7nB,EAASx3B,MAAO,WAGpBqD,EAAA+zB,qBAAqB9rB,IAEvBizC,EAAGnX,QACEqX,IACHz4C,EAAYjnB,KAAKugE,eAAef,GAAI,KAO5C,GAAI70C,EACF,IAAK,GAAIrqB,GAAI,EAAG4B,EAAIyoB,EAAW3oB,OAAQ1B,EAAI4B,IAAK5B,EAC9CN,KAAKijB,MACHmB,EAAAjC,eAAeq+C,8BACf71C,EAAWrqB,GAAG2gB,MAIpB,OAAOgG,IAITyzC,EAAAl5D,UAAAm5D,SAAA,WACE,MAAO36D,MAAKs/D,QAAQt9D,OAAShC,KAAKs/D,QAAQz2B,QAAU,MAItD6xB,EAAAl5D,UAAAmpD,OAAA,WACE,GAAI3qD,KAAKs/D,QAAQt9D,OAAQ,KAAM,IAAI0Z,OAAM,uBAGzC,OAFA1b,MAAKs/D,WACLt/D,KAAKu/D,QAAQkB,QACNzgE,KAAKq0B,SAIdqmC,EAAAl5D,UAAAk/D,UAAA,SACElB,EACAmB,EACAC,OADA,KAAAD,OAAA,OACA,KAAAC,OAAA,EAIA,IAAI3b,GAAQua,EAAG17C,OACX+8C,EAAWrB,EAAG/Z,QAGlB,IAAIR,GAAShmB,EAAA2N,MAAMgY,KACjB,MAAOtgC,GAAA80B,KAAKC,WACV/0B,EAAA80B,KAAKI,2BAA2B,OAAQgmB,EAAGv+C,aAAc,EAAOu+C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAI1F,IAAI5zC,EAGJ,IAAIgvD,GAAuB1b,GAAShmB,EAAA2N,MAAMuZ,UAAW,CACnD,GAAI2a,GAAY9gE,KAAK0gE,UAAUlB,GAAI,EAAOoB,EAC1C,KAAKE,EAAW,MAAO,KACvB,KAAKtB,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAOjB,MANKwa,IACH5gE,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,MAAMu+C,EAAGja,KAAM,KAGf,IAET5zC,GAAOmvD,EACPnvD,EAAKsP,MAAMW,MAAQi/C,EACnBlvD,EAAKsP,MAAMY,IAAM29C,EAAGja,QAGf,IAAIN,GAAShmB,EAAA2N,MAAMjZ,KACxBhiB,EAAO2S,EAAA80B,KAAKC,WACV/0B,EAAA80B,KAAKkD,qBAAqBkjB,EAAGv+C,aAAc,EAAOu+C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,UAIrE,IAAIN,GAAShmB,EAAA2N,MAAM/C,MAAQob,GAAShmB,EAAA2N,MAAMjD,MAC/Ch4B,EAAO2S,EAAA80B,KAAKC,WACV/0B,EAAA80B,KAAKI,2BAA2B,OAAQgmB,EAAGv+C,aAAc,EAAOu+C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,UAInF,IAAIN,GAAShmB,EAAA2N,MAAMsZ,cACxBsZ,EAAGt8D,aACHyO,EAAO2S,EAAA80B,KAAKC,WACV/0B,EAAA80B,KAAKI,2BAA2B,SAAUgmB,EAAGv+C,aAAc,EAAOu+C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,UAIrF,IAAIN,GAAShmB,EAAA2N,MAAM5Y,WA6CxB,MANK4sC,IACH5gE,KAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAGA,IA5CP,IAAI0O,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SACrEyW,EAAa,GAAIh0B,OACjBs9D,GAAW,CAGf,IAAIxB,EAAGrX,KAAKlpB,EAAA2N,MAAMC,UAAW,CAC3B,EAAG,CACD,GAAIvT,GAAYt5B,KAAK0gE,UAAUlB,GAAI,EAAMoB,EACzC,KAAKtnC,EAAW,MAAO,KACvB5B,GAAW/zB,KAAe21B,SACnBkmC,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvB,KAAKk2B,EAAGrX,KAAKlpB,EAAA2N,MAAMQ,aAOjB,MANKwzB,IACH5gE,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,MAAMu+C,EAAGja,KAAM,KAGf,KAIX,GAAIia,EAAGrX,KAAKlpB,EAAA2N,MAAMkF,KAAM,CACtB,IAAI0tB,EAAGrX,KAAKlpB,EAAA2N,MAAMhD,MAShB,MANKg3B,IACH5gE,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,MAAMu+C,EAAGja,KAAM,QAGf,IARPyb,IAAW,EAWfrvD,EAAO2S,EAAA80B,KAAKC,WAAW1pB,EAAY+H,EAAYspC,EAAUxB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAYjF,KAAOia,EAAGrX,KAAKlpB,EAAA2N,MAAMoa,cAAc,CACjC,GAAIia,GAAezB,EAAG/Z,QACtB,KAAK+Z,EAAGrX,KAAKlpB,EAAA2N,MAAMqa,cAOjB,MANK2Z,IACH5gE,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAGT,IAET,IAAIigD,GAAe1B,EAAGv+C,MAAMggD,EAAczB,EAAGja,IAI7C,IADAyb,GAAW,EACPxB,EAAGrX,KAAKlpB,EAAA2N,MAAMkF,KAAM,CACtB,IAAI0tB,EAAGrX,KAAKlpB,EAAA2N,MAAMhD,MAShB,MANKg3B,IACH5gE,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,QAGT,IARP+/C,IAAW,EAiBf,GANArvD,EAAO2S,EAAA80B,KAAKC,WACV/0B,EAAA80B,KAAKI,2BAA2B,QAAS0nB,IACvCvvD,GACFqvD,EACAxB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAEpByb,EAAU,MAGhB,MAAOrvD,IAKT+oD,EAAAl5D,UAAAm+D,eAAA,SACEH,GAKA,GAAIqB,GAAWrB,EAAG/Z,QAClB,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAG7B,IAFA,GAAIpzB,GAAO4+D,EAAGlX,iBACVj0C,EAAyBiQ,EAAA80B,KAAKI,2BAA2B54C,EAAM4+D,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAClFia,EAAGrX,KAAKlpB,EAAA2N,MAAM2Z,MAAM,CACzB,IAAIiZ,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAYhB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAEE,IAXPrgB,GAAO4+D,EAAGlX,iBACVj0C,EAAaiQ,EAAA80B,KAAKsC,+BAChBrnC,EACAiQ,EAAA80B,KAAKI,2BAA2B54C,EAAM4+D,EAAGv+C,SACzCu+C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAU5B,GAAIvR,EACJ,KAAIwrB,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAMhB,MAAO7hC,GAAA80B,KAAKkE,gBAAgBjpC,EAAY,KAAMmrD,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAJpE,IADAvR,EAAOh0C,KAAKmhE,eAAe3B,GAEzB,MAAOl7C,GAAA80B,KAAKkE,gBAAgBjpC,EAAY2/B,EAAMwrB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,UAMxEvlD,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,QAGP,OAAO,OAGTy5C,EAAAl5D,UAAAs+D,cAAA,SACEN,EACAjzC,EACA5B,GAKA,GAAIk2C,GAAWt0C,GAAaA,EAAUvqB,OAASuqB,EAAU,GAAGtL,MAAMW,MAAQ49C,EAAG/Z,SACzE75B,EAAU,GAAIloB,OACd09D,EAAY98C,EAAA8H,YAAY9H,EAAA+H,aAAauI,QAASrI,EAClD,GAAG,CACD,GAAIhD,GAASvpB,KAAKqhE,yBAAyB7B,EAAI4B,EAAW70C,EAAW5B,EACrE,KAAKpB,EAAQ,MAAO,KACpBqC,GAAQjoB,KAA0B4lB,SAC3Bi2C,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OAEvB,IAAItmC,GAAMshB,EAAA80B,KAAKgI,wBAAwBx1B,EAASW,EAAW5B,EAAY60C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAE7F,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAA6/D,yBAAA,SACE7B,EACA4B,EACAE,EACAC,GAKA,OAPA,KAAAH,OAAA,IAOK5B,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAKjB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAEE,IAET,IAAI0O,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SAErEtP,EAAwB,IACxB6tD,GAAGrX,KAAKlpB,EAAA2N,MAAMga,SAChBj1C,EAAO3R,KAAK0gE,UAAUlB,GAGxB,IAAIrpD,GAAiC,IACrC,IAAIqpD,EAAGrX,KAAKlpB,EAAA2N,MAAMmC,SAQhB,GAPIqyB,GACFphE,KAAKijB,MACHmB,EAAAjC,eAAeq/C,iDACfhC,EAAGv+C,WAGP9K,EAAcnW,KAAKyhE,gBAAgBjC,EAAI,IACrB,MAAO,UAErBl7C,GAAA8H,YAAY9H,EAAA+H,aAAa0I,MAAOusC,GAC7Bh9C,EAAA8H,YAAY9H,EAAA+H,aAAauI,QAAS0sC,IACrCthE,KAAKijB,MACHmB,EAAAjC,eAAeumB,wCACf/Y,EAAW1O,OAGLtP,GACV3R,KAAKijB,MACHmB,EAAAjC,eAAesgB,cACf+8B,EAAGv+C,MAAMu+C,EAAGja,KAIlB,OAAOjhC,GAAA80B,KAAKkI,0BACV3xB,EACAhe,EACAwE,EACAmrD,EACAC,EACAtiC,EAAAtT,MAAMjK,KAAKiO,EAAW1O,MAAOu+C,EAAGv+C,WAIpCy5C,EAAAl5D,UAAAq+D,UAAA,SACEL,EACAjzC,EACA5B,GAKA,GAAIk2C,GAAWt0C,GAAaA,EAAUvqB,OAASuqB,EAAU,GAAGtL,MAAMW,MAAQ49C,EAAG/Z,QAC7E,IAAI+Z,EAAG17C,QAAUmb,EAAA2N,MAAM5Y,WAKrB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAEE,IAET,IAAI0O,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,QACzE,IAAIu+C,EAAG17C,QAAUmb,EAAA2N,MAAMsa,UAKrB,MAJAlnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,IAET,IAAI2K,GAAU,GAAIloB,MAClB,KAAK87D,EAAGrX,KAAKlpB,EAAA2N,MAAMua,YAAa,CAC9B,EAAG,CACD,GAAI59B,GAASvpB,KAAK0hE,eAAelC,EACjC,KAAKj2C,EAAQ,MAAO,KACpBqC,GAAQjoB,KAA2B4lB,SAC5Bi2C,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvB,KAAKk2B,EAAGrX,KAAKlpB,EAAA2N,MAAMua,YAKjB,MAJAnnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,KAGX,GAAIje,GAAMshB,EAAA80B,KAAKwE,sBACbjuB,EACA/D,EACAW,EACA5B,EACA60C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAGxB,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAAkgE,eAAA,SACElC,GAKA,IAAKA,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAKjB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAEE,IAET,IAAI0O,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SACrEnd,EAA2B,IAC/B,OAAI07D,GAAGrX,KAAKlpB,EAAA2N,MAAMmC,WAChBjrC,EAAQ9D,KAAKyhE,gBAAgBjC,EAAI,IACd,KAEdl7C,EAAA80B,KAAK0E,2BACVnuB,EACA7rB,EACAm7B,EAAAtT,MAAMjK,KAAKiO,EAAW1O,MAAOu+C,EAAGv+C,WAIpCy5C,EAAAl5D,UAAAmgE,YAAA,SACEnC,GAKA,GAAIxuD,GAA0B,IAC9B,IACEwuD,EAAG1X,MAAK,IAAS7oB,EAAA2N,MAAMia,WACvB2Y,EAAG3Z,WAAa5mB,EAAA2N,MAAMua,aACrBqY,EAAG1Z,sBAEE90C,EAAOhR,KAAKyhE,gBAAgBjC,IAAM,MAAO,KAGjD,IAAIx8D,GAAMshB,EAAA80B,KAAKiH,sBAAsBrvC,EAAMwuD,EAAGv+C,QAE9C,OADAu+C,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAAogE,oBAAA,SACEpC,GAKA,GAAIjuC,GAAiB,GAAI7tB,MACzB,IAAK87D,EAAGrX,KAAKlpB,EAAA2N,MAAMQ,aAcjBptC,KAAKijB,MACHmB,EAAAjC,eAAe0/C,oCACfrC,EAAGv+C,aAhB0B,CAC/B,EAAG,CACD,GAAI6gD,GAAgB9hE,KAAK+hE,mBAAmBvC,EAC5C,KAAKsC,EAAe,MAAO,KAC3BvwC,GAAe5tB,KAAoBm+D,SAC5BtC,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvB,KAAKk2B,EAAGrX,KAAKlpB,EAAA2N,MAAMQ,aAKjB,MAJAptC,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,KAQX,MAAOsQ,IAGTmpC,EAAAl5D,UAAAugE,mBAAA,SACEvC,GAKA,GAAIA,EAAG17C,QAAUmb,EAAA2N,MAAM5Y,WAAY,CACjC,GAAIrE,GAAarL,EAAA80B,KAAKI,2BACpBgmB,EAAGlX,iBACHkX,EAAGv+C,SAEDgJ,EAA+B,IACnC,OAAIu1C,GAAGrX,KAAKlpB,EAAA2N,MAAMoX,YACV/5B,EAAcjqB,KAAK0gE,UAAUlB,IAAa,KAE3Cl7C,EAAA80B,KAAKqG,oBACV9vB,EACA1F,EACAgV,EAAAtT,MAAMjK,KAAKiO,EAAW1O,MAAOu+C,EAAGv+C,UAQpC,MALEjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAGA,MAGTy5C,EAAAl5D,UAAAwgE,gBAAA,SACExC,GAKA,GAAI9nC,GAAa,GAAIh0B,OACjBu+D,EAA6B,KAC7BC,GAAe,EACfC,GAAe,CAEnB,IAAI3C,EAAG1X,QAAU7oB,EAAA2N,MAAMwZ,WACrB,EAAG,CACD,GAAIgc,GAAQpiE,KAAKqiE,eAAe7C,EAChC,KAAK4C,EAAO,MAAO,KAQnB,QAPIH,IAAaE,IACfniE,KAAKijB,MACHmB,EAAAjC,eAAemgD,kDACfL,EAASrhE,KAAKqgB,OAEhBkhD,GAAe,GAETC,EAAMxiB,eAEZ,QACMsiB,GACFliE,KAAKijB,MACHmB,EAAAjC,eAAeogD,yDACfH,EAAMxhE,KAAKqgB,MAGf,MAEF,KAAKqD,GAAA4+B,cAAcsf,SACjBN,GAAe,CACf,MAEF,KAAK59C,GAAA4+B,cAAcuf,KACjBR,EAAWG,EAGf1qC,EAAW/zB,KAAKy+D,SACT5C,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OAEzB,OAAKk2B,GAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAOZ1uB,GANL13B,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,OAKXy5C,EAAAl5D,UAAA6gE,eAAA,SACE7C,EACAoB,OAAA,KAAAA,OAAA,EAKA,IAAI8B,IAAS,EACTC,GAAa,EACbC,EAA2B,IAK/B,IAJIpD,EAAGrX,KAAKlpB,EAAA2N,MAAMuY,eAChBud,GAAS,EACTE,EAAapD,EAAGv+C,SAEdu+C,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CACxB0uC,IAAQE,EAAapD,EAAGv+C,QAC7B,IAAI0O,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SACrEtP,EAAwB,IAS5B,KARIgxD,EAAanD,EAAGrX,KAAKlpB,EAAA2N,MAAMma,YACzB2b,GACF1iE,KAAKijB,MACHmB,EAAAjC,eAAe0gD,oCACflzC,EAAW1O,OAIbu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMga,UAChBj1C,EAAO3R,KAAK0gE,UAAUlB,IACX,MAAO,KAEpB,IAAIrpD,GAAiC,IACrC,QAAIqpD,EAAGrX,KAAKlpB,EAAA2N,MAAMmC,UACZ2zB,GACF1iE,KAAKijB,MACHmB,EAAAjC,eAAe2gD,4CACfnzC,EAAW1O,OAGX0hD,EACF3iE,KAAKijB,MACHmB,EAAAjC,eAAe4gD,oDACfpzC,EAAW1O,OAGb0hD,GAAa,EAEfxsD,EAAcnW,KAAKyhE,gBAAgBjC,EAAI,IAGlCl7C,EAAA80B,KAAKuG,gBACVhwB,EACAhe,EACAwE,EACAusD,EACIp+C,EAAA4+B,cAAcuf,KACdE,EACEr+C,EAAA4+B,cAAcsf,SACdl+C,EAAA4+B,cAAcW,QACpB5kB,EAAAtT,MAAMjK,KAAYkhD,EAAYpD,EAAGv+C,UAXR,KAmB7B,MALEjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAGA,MAGTy5C,EAAAl5D,UAAAu+D,cAAA,SACEP,EACAjzC,EACA5B,GAUA,GAAIk2C,GAAWt0C,GAAaA,EAAUvqB,OAASuqB,EAAU,GAAGtL,MAAMW,MAAQ49C,EAAG/Z,QAE7E,KAAK+Z,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAKjB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,MAAMu+C,EAAGja,MAEP,IAGT,IAAI51B,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SAErEsQ,EAAyC,IAC7C,IAAIiuC,EAAGrX,KAAKlpB,EAAA2N,MAAMC,aAChBtb,EAAiBvxB,KAAK4hE,oBAAoBpC,IACrB,MAAO,KAG9B,KAAKA,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAKjB,MAJAnmD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,MAAMu+C,EAAGja,KAAM,KAEb,IAGT,IAAI7tB,GAAa13B,KAAKgiE,gBAAgBxC,EACtC,KAAK9nC,EAAY,MAAO,KAExB,IAAIsrC,GAAW1+C,EAAA8H,YAAY9H,EAAA+H,aAAaG,IAAKD,EACzCy2C,KAEuB,GAArBtrC,EAAW11B,QACbhC,KAAKijB,MACHmB,EAAAjC,eAAe8gD,+CACftzC,EAAW1O,OAIXyW,EAAW11B,QAAU01B,EAAW,GAAGvhB,aACrCnW,KAAKijB,MACHmB,EAAAjC,eAAe+gD,oDACfvzC,EAAW1O,QAKFqD,EAAA8H,YAAY9H,EAAA+H,aAAaC,IAAKC,IAC7BmL,EAAW11B,QACzBhC,KAAKijB,MACHmB,EAAAjC,eAAeghD,sCACfxzC,EAAW1O,MAIf,IAAItL,GAA8B,IAClC,IAAI6pD,EAAGrX,KAAKlpB,EAAA2N,MAAMga,QAEhB,KADAjxC,EAAa3V,KAAK0gE,UAAUlB,EAAIwD,IACf,MAAO,UAEdA,IACVhjE,KAAKijB,MACHmB,EAAAjC,eAAesgB,cACf+8B,EAAGv+C,MAAMu+C,EAAGja,KAIhB,IAAI6b,GAAY98C,EAAA8H,YAAY9H,EAAA+H,aAAauI,QAASrI,GAE9C/X,EAAyB,IAC7B,IAAIgrD,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,YAShB,GARIka,GACFphE,KAAKijB,MACHmB,EAAAjC,eAAe0hB,yDACf27B,EAAGv+C,WAIPzM,EAAOxU,KAAKojE,oBAAoB5D,GAAI,IACzB,MAAO,UACR4B,IACVphE,KAAKijB,MACHmB,EAAAjC,eAAe2hB,gFACf07B,EAAGv+C,MAAMu+C,EAAGja,KAIhB,IAAIviD,GAAMshB,EAAA80B,KAAKyG,0BACblwB,EACA4B,EACamG,EACb/hB,EACAnB,EACA+X,EACA5B,EACA60C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAGxB,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAA6hE,wBAAA,SAAwB7D,GACtB,GACI7vC,GADAkxC,EAAWrB,EAAG/Z,SAEd1K,GAAU,CAOd,IAAIykB,EAAGva,OAAShmB,EAAA2N,MAAMvU,UAOpB,GANA0iB,GAAU,EAERprB,EADE6vC,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YACH1P,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SAExDqD,EAAA80B,KAAKI,2BAA2B,GAAIgmB,EAAGv+C,MAAMu+C,EAAGja,IAAKia,EAAGja,OAElEia,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAKjB,MAJAnmD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,MAAMu+C,EAAGja,KAAM,KAEb,SAQTxK,IAAU,EACV/wB,OAAOw1C,EAAGva,OAAShmB,EAAA2N,MAAMuZ,WACzBx2B,EAAarL,EAAA80B,KAAKI,2BAA2B,GAAIgmB,EAAGv+C,MAAMu+C,EAAG/Z,SAAU+Z,EAAG/Z,UAK5E,IAAI/tB,GAAa13B,KAAKgiE,gBAAgBxC,EACtC,OAAK9nC,GAEE13B,KAAKsjE,8BAA8B9D,EAAI7vC,EAAY+H,EAAYqjB,EAAS8lB,GAFvD,MAKlBnG,EAAAl5D,UAAA8hE,8BAAR,SACE9D,EACA7vC,EACA+H,EACAqjB,EACA8lB,OAAA,KAAAA,OAAiB,GAEbA,EAAW,IAAGA,EAAWlxC,EAAW1O,MAAMW,MAE9C,IAAIjM,GAA8B,IAClC,IAAI6pD,EAAGrX,KAAKlpB,EAAA2N,MAAMga,UAChBjxC,EAAa3V,KAAK0gE,UAAUlB,IACX,MAAO,KAG1B,IAAIzkB,IACGykB,EAAGrX,KAAKlpB,EAAA2N,MAAMka,oBAKjB,MAJA9mD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,MAAMu+C,EAAGja,KAAM,MAEb,IAIX,IAAI/wC,EACJ,IAAIumC,EACFvmC,EAAOxU,KAAKugE,eAAef,GAAI,OAC1B,CACL,IAAKA,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,WAKjB,MAJAlnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,MAAMu+C,EAAGja,KAAM,KAEb,IAET/wC,GAAOxU,KAAKojE,oBAAoB5D,GAAI,GAEtC,IAAKhrD,EAAM,MAAO,KAElB,IAAIsU,GAAcxE,EAAA80B,KAAKyG,0BACrBlwB,EACA,KACA+H,EACA/hB,EACAnB,EACA,KACA,KACAgrD,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAExB,OAAOjhC,GAAA80B,KAAK0B,yBAAyBhyB,EAAaiyB,IAGpD2f,EAAAl5D,UAAAw+D,WAAA,SACER,EACAjzC,EACA5B,GAUA,GAAIk2C,GAAWl2C,GAAcA,EAAW3oB,OACpC2oB,EAAW,GAAG1J,MAAMW,MACpB2K,GAAaA,EAAUvqB,OACvBuqB,EAAU,GAAGtL,MAAMW,MACnB49C,EAAG/Z,QAEP,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAE7B,GAKIzC,GALA5B,EAAarL,EAAA80B,KAAKI,2BACpBgmB,EAAGlX,iBACHkX,EAAGv+C,QAIL,IAAIu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMC,WAEhB,KADAtb,EAAiBvxB,KAAK4hE,oBAAoBpC,IACrB,MAAO,UAE5BjuC,KAGF,IAAItH,GAA+B,IACnC,IAAIu1C,EAAGrX,KAAKlpB,EAAA2N,MAAMoX,YAChB/5B,EAAcjqB,KAAK0gE,UAAUlB,IACX,MAAO,KAG3B,IAAI/zC,GAAkB,GAAI/nB,MAC1B,IAAI87D,EAAGrX,KAAKlpB,EAAA2N,MAAMuX,YAChB,EAAG,CACD,GAAIxyC,GAAO3R,KAAK0gE,UAAUlB,EAC1B,KAAK7tD,EAAM,MAAO,KAClB8Z,GAAgB9nB,KAAegO,SACxB6tD,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OAGzB,IAAIk2B,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,WAAY,CAE5B,GAAIt7B,GAAU,GAAIloB,MAClB,KAAK87D,EAAGrX,KAAKlpB,EAAA2N,MAAMua,YAAa,CAC9B,GAAIia,GAAY98C,EAAA8H,YAAY9H,EAAA+H,aAAauI,QAASrI,EAClD,GAAG,CACD,GAAIhD,GAASvpB,KAAKujE,iBAAiB/D,EAAI4B,EACvC,KAAK73C,EAAQ,MAAO,KACpBqC,GAAQjoB,KAA2B4lB,UAC3Bi2C,EAAGrX,KAAKlpB,EAAA2N,MAAMua,aAE1B,MAAO7iC,GAAA80B,KAAK8D,uBACVvtB,EACA4B,EACAtH,EACAwB,EACAG,EACAW,EACA5B,EACA60C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAIxBvlD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,QAGP,OAAO,OAGTy5C,EAAAl5D,UAAA+hE,iBAAA,SACE/D,EACAgE,GAYA,IAHA,GAAI3C,GAAWrB,EAAGja,IAEd56B,EAAa,GAAIjnB,OACd87D,EAAGrX,KAAKlpB,EAAA2N,MAAMwa,KAAK,CACxB,GAAI15B,GAAY1tB,KAAK2/D,eAAeH,EACpC,KAAK9xC,EAAW,KAChB/C,GAAWhnB,KAAgB+pB,GAG7B,GAAInB,GAA+B,IAE/BizC,GAAGrX,KAAKlpB,EAAA2N,MAAM1W,QAChB3J,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa6J,OAAQspC,EAAGv+C,SAAUsL,GACrEizC,EAAGrX,KAAKlpB,EAAA2N,MAAMzW,SACvB5J,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa8J,QAASqpC,EAAGv+C,SAAUsL,GACtEizC,EAAGrX,KAAKlpB,EAAA2N,MAAMxW,aACvB7J,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa+J,UAAWopC,EAAGv+C,SAAUsL,IAG/EizC,EAAGrX,KAAKlpB,EAAA2N,MAAM7f,QAChBR,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAaU,OAAQyyC,EAAGv+C,SAAUsL,GACrEizC,EAAGrX,KAAKlpB,EAAA2N,MAAMjW,YACvBpK,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAasK,SAAU6oC,EAAGv+C,SAAUsL,IAG9EizC,EAAGrX,KAAKlpB,EAAA2N,MAAM3W,YAChB1J,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa4J,SAAUupC,EAAGv+C,SAAUsL,IAIlFizC,EAAGpX,MAEH,IAAIj8B,IAAW,EACX62C,GAAW,GAEX72C,EAAWqzC,EAAGrX,KAAKlpB,EAAA2N,MAAMtgB,MACvBkzC,EAAG1X,MAAK,GAAM,IAAS7oB,EAAA2N,MAAM5Y,YAAewrC,EAAG1Z,oBAGjD0Z,EAAGnX,QACHl8B,GAAW,GAHXI,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAaC,IAAKkzC,EAAGv+C,SAAUsL,IAMpEy2C,EAAWxD,EAAGrX,KAAKlpB,EAAA2N,MAAMpgB,QAC9BgzC,EAAG1X,MAAK,GAAM,IAAS7oB,EAAA2N,MAAM5Y,YAAewrC,EAAG1Z,oBAGjD0Z,EAAGnX,QACH2a,GAAW,GAHXz2C,EAAYjI,EAAAk0B,YAAYl0B,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAaG,IAAKgzC,EAAGv+C,SAAUsL,GAO/E,IAAIk3C,GAAgBjE,EAAGrX,KAAKlpB,EAAA2N,MAAMvf,YAClC,IAAIo2C,GAAiBjE,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAE9C,GAAIrE,GAAa8zC,EACbn/C,EAAA80B,KAAKkB,4BAA4BklB,EAAGv+C,SACpCqD,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SAExDsQ,EAAyC,IAC7C,IAAIiuC,EAAGrX,KAAKlpB,EAAA2N,MAAMC,YACZ42B,GACFzjE,KAAKijB,MACHmB,EAAAjC,eAAeuhD,2DACflE,EAAGv+C,WAGPsQ,EAAiBvxB,KAAK4hE,oBAAoBpC,KACrB,MAAO,KAI9B,IAAIA,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAAY,CAC5B,GAAIzuB,GAAa13B,KAAKgiE,gBAAgBxC,EACtC,KAAK9nC,EAAY,MAAO,KAEpBvL,IAAYuL,EAAW11B,QACzBhC,KAAKijB,MACHmB,EAAAjC,eAAeghD,sCACfxzC,EAAW1O,OAIX+hD,IACuB,GAArBtrC,EAAW11B,QACbhC,KAAKijB,MACHmB,EAAAjC,eAAe8gD,+CACftzC,EAAW1O,OAGXyW,EAAW11B,QAAU01B,EAAW,GAAGvhB,aACrCnW,KAAKijB,MACHmB,EAAAjC,eAAe+gD,oDACfvzC,EAAW1O,OAKjB,IAAItL,GAA8B,IAClC,IAAI6pD,EAAGrX,KAAKlpB,EAAA2N,MAAMga,QAahB,GAZIj3B,EAAWzI,MAAQ5C,EAAA6C,SAASkG,YAC9BrtB,KAAKijB,MACHmB,EAAAjC,eAAewhD,2DACfnE,EAAGv+C,SAEI+hD,GACThjE,KAAKijB,MACHmB,EAAAjC,eAAeyhD,oDACfpE,EAAGv+C,WAGPtL,EAAa3V,KAAK0gE,UAAUlB,EAAI7vC,EAAWzI,MAAQ5C,EAAA6C,SAASkG,aAAe21C,IAC1D,MAAO,UACdA,IAAYrzC,EAAWzI,MAAQ5C,EAAA6C,SAASkG,aAClDrtB,KAAKijB,MACHmB,EAAAjC,eAAesgB,cACf+8B,EAAGv+C,QAIP,IAAIzM,GAAyB,IAC7B,IAAIgrD,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,YAQhB,GAPIsc,GACFxjE,KAAKijB,MACHmB,EAAAjC,eAAe0hB,yDACf27B,EAAGv+C,WAGPzM,EAAOxU,KAAKojE,oBAAoB5D,GAAI,IACzB,MAAO,UACRgE,IACVxjE,KAAKijB,MACHmB,EAAAjC,eAAe2hB,gFACf07B,EAAGv+C,QAIP,IAAI4iD,GAAYv/C,EAAA80B,KAAK2G,wBACnBpwB,EACA4B,EACAmG,EACA/hB,EACAnB,EACA+X,EACA5B,EACA60C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAGxB,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACPgd,EAEF,GAAIJ,EACTzjE,KAAKijB,MACHmB,EAAAjC,eAAe2hD,sCACfn0C,EAAW1O,WAGR,KAAIkL,IAAY62C,EAOhB,CACL,GAAIvqB,IAEAA,EAAWn0B,EAAAo0B,YAAYp0B,EAAA+H,aAAasK,SAAUpK,KAChDvsB,KAAKijB,MACHmB,EAAAjC,eAAem+C,gCACf7nB,EAASx3B,MAAO,aAIhBw3B,EAAWn0B,EAAAo0B,YAAYp0B,EAAA+H,aAAaC,IAAKC,KAC3CvsB,KAAKijB,MACHmB,EAAAjC,eAAem+C,gCACf7nB,EAASx3B,MAAO,QAIhBw3B,EAAWn0B,EAAAo0B,YAAYp0B,EAAA+H,aAAaG,IAAKD,KAC3CvsB,KAAKijB,MACHmB,EAAAjC,eAAem+C,gCACf7nB,EAASx3B,MAAO,MAIpB,IAAItP,GAAwB,IAC5B,IAAI6tD,EAAGrX,KAAKlpB,EAAA2N,MAAMga,QAEhB,KADAj1C,EAAO3R,KAAK0gE,UAAUlB,IACX,MAAO,UAElBx/D,MAAKijB,MACHmB,EAAAjC,eAAesgB,cACf+8B,EAAGv+C,QAGP,IAAI9K,GAAiC,IACrC,IAAIqpD,EAAGrX,KAAKlpB,EAAA2N,MAAMmC,WAChB54B,EAAcnW,KAAKyhE,gBAAgBjC,IACjB,MAAO,KAE3B,IAAIuE,GAAWz/C,EAAA80B,KAAKiG,uBAClB1vB,EACAhe,EACAwE,EACAoW,EACA5B,EACA60C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAGxB,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACPkd,EAtDP/jE,KAAKijB,MACHmB,EAAAjC,eAAe2hB,gFACfnU,EAAW1O,YAuDfjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,QAGP,OAAO,OAGTy5C,EAAAl5D,UAAAy+D,eAAA,SACET,EACAjzC,EACA5B,GAKA,GAAIk2C,GAAWt0C,GAAaA,EAAUvqB,OAASuqB,EAAU,GAAGtL,MAAMW,MAAQ49C,EAAG/Z,QAC7E,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAC7B,GAAIrE,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,QACzE,IAAIu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,WAAY,CAE5B,IADA,GAAIt7B,GAAU,GAAIloB,QACV87D,EAAGrX,KAAKlpB,EAAA2N,MAAMua,aAAa,CACjC,GAAI59B,GAASvpB,KAAKy/D,uBAAuBD,GAAI,EAC7C,KAAKj2C,EAAQ,MAAO,KACpBqC,GAAQjoB,KAAK4lB,GAEf,GAAIvmB,GAAMshB,EAAA80B,KAAK+G,2BACbxwB,EACA/D,EACAW,EACA5B,EACA60C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAGxB,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAEPhD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,QAGP,OAAO,OAGTy5C,EAAAl5D,UAAA6+D,YAAA,SACEb,EACAjzC,GAKA,GAAIs0C,GAAWt0C,GAAaA,EAAUvqB,OAASuqB,EAAU,GAAGtL,MAAMW,MAAQ49C,EAAG/Z,QAE7E,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,WAAY,CAC5B,GAAIt7B,GAAU,GAAIloB,MAClB,KAAK87D,EAAGrX,KAAKlpB,EAAA2N,MAAMua,YAAa,CAC9B,EAAG,CACD,GAAI59B,GAASvpB,KAAKgkE,kBAAkBxE,EACpC,KAAKj2C,EAAQ,MAAO,KACpBqC,GAAQjoB,KAAK4lB,SACNi2C,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvB,KAAKk2B,EAAGrX,KAAKlpB,EAAA2N,MAAMua,YAKjB,MAJAnnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,KAGX,GAAI+H,GAAuC,IAC3C,IAAIw2C,EAAGrX,KAAKlpB,EAAA2N,MAAMsX,MAAO,CACvB,IAAIsb,EAAGrX,KAAKlpB,EAAA2N,MAAMsZ,eAOhB,MAJAlmD,MAAKijB,MACHmB,EAAAjC,eAAeoM,wBACfixC,EAAGv+C,SAEE,IANP+H,GAAO1E,EAAA80B,KAAK8C,8BAA8BsjB,EAAGt8D,aAAcs8D,EAAGv+C,SASlE,GAAIje,GAAMshB,EAAA80B,KAAK4E,sBAAsBpyB,EAAS5C,EAAMuD,EAAWizC,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAMrF,OALIviD,GAAIue,iBAAmBvhB,KAAKu/D,QAAQp0C,IAAYnoB,EAAIue,kBACtDvhB,KAAKs/D,QAAQ37D,KAAaX,EAAIue,gBAC9BvhB,KAAKu/D,QAAQxvC,IAAY/sB,EAAIue,iBAE/Bi+C,EAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAOT,MALEhD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAGT,MAGTy5C,EAAAl5D,UAAAwiE,kBAAA,SACExE,GAKA,GAAIA,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAC7B,GAAIrE,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SACrEgjD,EAA4C,IAChD,IAAIzE,EAAGrX,KAAKlpB,EAAA2N,MAAM2W,IAAK,CACrB,IAAIic,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAOhB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAEE,IANPgjD,GAAe3/C,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SAS3E,MAAOqD,GAAA80B,KAAKkF,mBACV3uB,EACAs0C,EACAA,EACIhlC,EAAAtT,MAAMjK,KAAKiO,EAAW1O,MAAOgjD,EAAahjD,OAC1C0O,EAAW1O,OAQnB,MALEjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAGA,MAGTy5C,EAAAl5D,UAAA2+D,YAAA,SACEX,GAOA,GAAIqB,GAAWrB,EAAG/Z,SACd75B,EAAsC,KACtCsE,EAA6C,KAC7Cg0C,GAAW,CACf,IAAI1E,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,YAEhB,GADAt7B,EAAU,GAAIloB,QACT87D,EAAGrX,KAAKlpB,EAAA2N,MAAMua,YAAa,CAC9B,EAAG,CACD,GAAI59B,GAASvpB,KAAKmkE,uBAAuB3E,EACzC,KAAKj2C,EAAQ,MAAO,KACpBqC,GAAQjoB,KAAK4lB,SACNi2C,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvB,KAAKk2B,EAAGrX,KAAKlpB,EAAA2N,MAAMua,YAKjB,MAJAnnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,UAGN,IAAIu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMiD,UAAW,CAClC,IAAI2vB,EAAGrX,KAAKlpB,EAAA2N,MAAM2W,IAehB,MAJAvjD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,MAEP,IAdP,KAAIu+C,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAOhB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAEE,IANPiP,GAAgB5L,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,aAgB5EijD,IAAW,CAGb,IAAIA,GAAY1E,EAAGrX,KAAKlpB,EAAA2N,MAAMsX,MAAO,CACnC,GAAIsb,EAAGrX,KAAKlpB,EAAA2N,MAAMsZ,eAAgB,CAChC,GACIljD,GADAgmB,EAAO1E,EAAA80B,KAAK8C,8BAA8BsjB,EAAGt8D,aAAcs8D,EAAGv+C,QAalE,OAXIiP,IACFlG,QAAQ4B,GACR5oB,EAAMshB,EAAA80B,KAAK4F,kCAAkC9uB,EAAelH,EAAMw2C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,OAExFviD,EAAMshB,EAAA80B,KAAKyF,sBAAsBjzB,EAAS5C,EAAMw2C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAEnEvlD,KAAKu/D,QAAQp0C,IAAInoB,EAAIue,kBACxBvhB,KAAKs/D,QAAQ37D,KAAKX,EAAIue,gBACtBvhB,KAAKu/D,QAAQxvC,IAAI/sB,EAAIue,iBAEvBi+C,EAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAEPhD,KAAKijB,MACHmB,EAAAjC,eAAeoM,wBACfixC,EAAGv+C,aAIPjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,OAGhB,OAAO,OAGTy5C,EAAAl5D,UAAA2iE,uBAAA,SACE3E,GAKA,GAAIA,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAC7B,GAAIrE,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SACrEgjD,EAA4C,IAChD,IAAIzE,EAAGrX,KAAKlpB,EAAA2N,MAAM2W,IAAK,CACrB,IAAIic,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAOhB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAEE,IANPgjD,GAAe3/C,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SAS3E,MAAOqD,GAAA80B,KAAK6F,wBACVtvB,EACAs0C,EACAA,EACIhlC,EAAAtT,MAAMjK,KAAKiO,EAAW1O,MAAOgjD,EAAahjD,OAC1C0O,EAAW1O,OAQnB,MALEjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAGA,MAGTy5C,EAAAl5D,UAAA0+D,kBAAA,SACEV,EACAoD,GAKA,GAAIpD,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAC7B,GAAIiwC,GAAe3/C,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,QAC3E,IAAIu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMmC,QAAS,CACzB,GAAIywB,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAC7B,GAAIrE,GAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SACrEje,EAAMshB,EAAA80B,KAAKgF,4BAA4BzuB,EAAYs0C,EAAchlC,EAAAtT,MAAMjK,KAAKkhD,EAAYpD,EAAGv+C,SAE/F,OADAu+C,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAEPhD,KAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,aAIPjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,QAGP,OAAO,OAGTy5C,EAAAl5D,UAAA++D,eAAA,SACEf,EACA4E,GAOA,WAPA,KAAAA,OAAA,GAKA5E,EAAGpX,OACSoX,EAAG17C,QAGb,IAAKmb,GAAA2N,MAAMnH,MACT,MAAOzlC,MAAKqkE,WAAW7E,EAEzB,KAAKvgC,GAAA2N,MAAM7X,MACT,MAAO/0B,MAAK8/D,cAAcN,GACxBl7C,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa0I,MAAOyqC,EAAGv+C,UAC1C,KAEL,KAAKge,GAAA2N,MAAMjH,SACT,MAAO3lC,MAAKskE,cAAc9E,EAE5B,KAAKvgC,GAAA2N,MAAM/G,GACT,MAAO7lC,MAAKukE,iBAAiB/E,EAE/B,KAAKvgC,GAAA2N,MAAMzG,IACT,MAAOnmC,MAAKwkE,kBAAkBhF,EAEhC,KAAKvgC,GAAA2N,MAAMvG,GACT,MAAOrmC,MAAKykE,iBAAiBjF,EAE/B,KAAKvgC,GAAA2N,MAAM7W,IACT,MAAO/1B,MAAK8/D,cAAcN,GACxBl7C,EAAA80B,KAAK6G,eAAe37B,EAAA+H,aAAa0J,IAAKypC,EAAGv+C,UACxC,KAEL,KAAKge,GAAA2N,MAAM+X,IACT,MAAO3kD,MAAK8/D,cAAcN,EAAI,KAAM,KAEtC,KAAKvgC,GAAA2N,MAAMsa,UACT,MAAOlnD,MAAKojE,oBAAoB5D,EAAI4E,EAEtC,KAAKnlC,GAAA2N,MAAMrG,OAOT,MANI69B,IACFpkE,KAAKijB,MACHmB,EAAAjC,eAAeuiD,2DACflF,EAAGv+C,SAGAjhB,KAAK2hE,YAAYnC,EAE1B,KAAKvgC,GAAA2N,MAAMia,UACT,MAAOviC,GAAA80B,KAAKsE,qBAAqB8hB,EAAGv+C,MAAMu+C,EAAG/Z,UAE/C,KAAKxmB,GAAA2N,MAAMnG,OACT,MAAOzmC,MAAK2kE,qBAAqBnF,EAEnC,KAAKvgC,GAAA2N,MAAMjG,MACT,MAAO3mC,MAAK4kE,oBAAoBpF,EAElC,KAAKvgC,GAAA2N,MAAM/F,IACT,MAAO7mC,MAAK6kE,kBAAkBrF,EAEhC,KAAKvgC,GAAA2N,MAAM8U,KACT,MAAO1hD,MAAKogE,qBAAqBZ,EAAI,KAEvC,KAAKvgC,GAAA2N,MAAM7F,MACT,MAAO/mC,MAAK8kE,oBAAoBtF,EAElC,SAEE,MADAA,GAAGnX,QACIroD,KAAK+kE,yBAAyBvF,KAI3C9E,EAAAl5D,UAAA4hE,oBAAA,SACE5D,EACA4E,GAOA,IAFA,GAAIvD,GAAWrB,EAAG/Z,SACd1+B,EAAa,GAAIrjB,QACb87D,EAAGrX,KAAKlpB,EAAA2N,MAAMua,aAAa,CACjC,GAAIlgC,GAAYjnB,KAAKugE,eAAef,EAAI4E,EACxC,KAAKn9C,EAAW,MAAO,KACvBF,GAAWpjB,KAAKsjB,GAElB,GAAIjkB,GAAMshB,EAAA80B,KAAK0D,qBAAqB/1B,EAAYy4C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAEtE,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAA6iE,WAAA,SACE7E,GAKA,GAAI7vC,GAA0C,IAC1C6vC,GAAG1X,MAAK,IAAS7oB,EAAA2N,MAAM5Y,YAAewrC,EAAG1Z,qBAC3C0Z,EAAG17C,MAAK,GACR6L,EAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SAEvE,IAAIje,GAAMshB,EAAA80B,KAAK4D,qBAAqBrtB,EAAY6vC,EAAGv+C,QAEnD,OADAu+C,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAA8iE,cAAA,SACE9E,GAKA,GAAI7vC,GAA0C,IAC1C6vC,GAAG1X,MAAK,IAAS7oB,EAAA2N,MAAM5Y,YAAewrC,EAAG1Z,qBAC3C0Z,EAAG17C,MAAK,GACR6L,EAAarL,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,SAEvE,IAAIje,GAAMshB,EAAA80B,KAAKgE,wBAAwBztB,EAAY6vC,EAAGv+C,QAEtD,OADAu+C,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAA+iE,iBAAA,SACE/E,GAKA,GAAIqB,GAAWrB,EAAG/Z,SACdx+B,EAAYjnB,KAAKugE,eAAef,EACpC,KAAKv4C,EAAW,MAAO,KAEvB,IAAIu4C,EAAGrX,KAAKlpB,EAAA2N,MAAM7F,OAEhB,GAAIy4B,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAAY,CAC5B,GAAIjyC,GAAYlU,KAAKyhE,gBAAgBjC,EACrC,KAAKtrD,EAAW,MAAO,KAEvB,IAAIsrD,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAAa,CAC7B,GAAIpjD,GAAMshB,EAAA80B,KAAKoE,kBAA6Bv2B,EAAuB/S,EAAWsrD,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAEpG,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAEPhD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,QAGhB,OAAO,OAGTy5C,EAAAl5D,UAAAujE,yBAAA,SACEvF,GAKA,GAAIxuD,GAAOhR,KAAKyhE,gBAAgBjC,EAChC,KAAKxuD,EAAM,MAAO,KAElB,IAAIhO,GAAMshB,EAAA80B,KAAKqF,0BAA0BztC,EAEzC,OADAwuD,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAAgjE,kBAAA,SACEhF,GAKA,GAAIqB,GAAWrB,EAAG/Z,QAElB,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAAY,CAE5B,GAAIhwC,GAAgC,IAEpC,IAAIqpD,EAAGrX,KAAKlpB,EAAA2N,MAAM7W,MAAQypC,EAAGrX,KAAKlpB,EAAA2N,MAAM7X,QAAUyqC,EAAGrX,KAAKlpB,EAAA2N,MAAM+X,KAC9DxuC,EAAcnW,KAAK8/D,cAAcN,EAAI,KAAM,UAEtC,KAAKA,EAAGrX,KAAKlpB,EAAA2N,MAAMia,cACxB1wC,EAAcnW,KAAK+kE,yBAAyBvF,IAC1B,MAAO,KAG3B,IAAIA,EAAGva,OAAShmB,EAAA2N,MAAMia,UAAW,CAC/B,GAAI3yC,GAAwC,IAC5C,KAAKsrD,EAAGrX,KAAKlpB,EAAA2N,MAAMia,cACjB3yC,EAAYlU,KAAK+kE,yBAAyBvF,IAC1B,MAAO,KAGzB,IAAIA,EAAGva,OAAShmB,EAAA2N,MAAMia,UAAW,CAC/B,GAAIpf,GAAiC,IACrC,KAAK+3B,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAAa,CAE9B,KADA3e,EAAcznC,KAAKyhE,gBAAgBjC,IACjB,MAAO,KAEzB,KAAKA,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAKjB,MAJApmD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,KAIX,GAAIgG,GAAYjnB,KAAKugE,eAAef,EACpC,OAAKv4C,GAEE3C,EAAA80B,KAAKmG,mBACVppC,EACAjC,EACIA,EAAUG,WACV,KACJozB,EACAxgB,EACAu4C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MATD,KAavBvlD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,IAGhB,OAAO,OAGTy5C,EAAAl5D,UAAAijE,iBAAA,SACEjF,GAKA,GAAIqB,GAAWrB,EAAG/Z,QAClB,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAAY,CAC5B,GAAIjyC,GAAYlU,KAAKyhE,gBAAgBjC,EACrC,KAAKtrD,EAAW,MAAO,KACvB,IAAIsrD,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAAa,CAC7B,GAAIn/B,GAAYjnB,KAAKugE,eAAef,EACpC,KAAKv4C,EAAW,MAAO,KACvB,IAAI+9C,GAAkC,IACtC,OAAIxF,GAAGrX,KAAKlpB,EAAA2N,MAAMmX,SAChBihB,EAAgBhlE,KAAKugE,eAAef,IACT,KAEtBl7C,EAAA80B,KAAKuF,kBACVzqC,EACA+S,EACA+9C,EACAxF,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAGxBvlD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,IAGhB,OAAO,OAGTy5C,EAAAl5D,UAAAmjE,qBAAA,SACEnF,GAKA,GAAIqB,GAAWrB,EAAG/Z,QAClB,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAAY,CAC5B,GAAIjyC,GAAYlU,KAAKyhE,gBAAgBjC,EACrC,KAAKtrD,EAAW,MAAO,KACvB,IAAIsrD,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAAa,CAC7B,GAAIoZ,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,WAAY,CAE5B,IADA,GAAIpf,GAAQ,GAAIpkC,QACR87D,EAAGrX,KAAKlpB,EAAA2N,MAAMua,aAAa,CACjC,GAAIjf,GAAQloC,KAAKilE,gBAAgBzF,EACjC,KAAKt3B,EAAO,MAAO,KACnBJ,GAAMnkC,KAAiBukC,GAEzB,GAAIllC,GAAMshB,EAAA80B,KAAKmH,sBAAsBrsC,EAAW4zB,EAAO03B,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAE7E,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAEPhD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,IAGhB,OAAO,OAGTy5C,EAAAl5D,UAAAyjE,gBAAA,SACEzF,GAGA,GACIz4C,GACAE,EAFA45C,EAAWrB,EAAG/Z,QAMlB,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAM8W,MAAO,CACvB,GAAI7vC,GAAQ7T,KAAKyhE,gBAAgBjC,EACjC,KAAK3rD,EAAO,MAAO,KACnB,IAAI2rD,EAAGrX,KAAKlpB,EAAA2N,MAAMga,OAAQ,CAExB,IADA7/B,EAAa,GAAIrjB,OACV87D,EAAG1X,QAAU7oB,EAAA2N,MAAM8W,MAAQ8b,EAAG3Z,WAAa5mB,EAAA2N,MAAMiX,SAAW2b,EAAG3Z,WAAa5mB,EAAA2N,MAAMua,YAAY,CAEnG,KADAlgC,EAAYjnB,KAAKugE,eAAef,IAChB,MAAO,KACvBz4C,GAAWpjB,KAAKsjB,GAElB,MAAO3C,GAAA80B,KAAKqH,iBAAiB5sC,EAAOkT,EAAYy4C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAEtEvlD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAMX,IAAIu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMiX,SAAU,CACjC,GAAI2b,EAAGrX,KAAKlpB,EAAA2N,MAAMga,OAAQ,CAExB,IADA7/B,EAAa,GAAIrjB,OACV87D,EAAG1X,QAAU7oB,EAAA2N,MAAM8W,MAAQ8b,EAAG3Z,WAAa5mB,EAAA2N,MAAMiX,SAAW2b,EAAG3Z,WAAa5mB,EAAA2N,MAAMua,YAAY,CAEnG,KADAlgC,EAAYjnB,KAAKugE,eAAef,IAChB,MAAO,KACvBz4C,GAAWpjB,KAAKsjB,GAElB,MAAO3C,GAAA80B,KAAKqH,iBAAiB,KAAM15B,EAAYy4C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAErEvlD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAe+iD,0BACf1F,EAAGv+C,QAGP,OAAO,OAGTy5C,EAAAl5D,UAAAojE,oBAAA,SACEpF,GAKA,GAAIqB,GAAWrB,EAAG/Z,SACdpxC,EAAarU,KAAKyhE,gBAAgBjC,EACtC,KAAKnrD,EAAY,MAAO,KACxB,IAAIrR,GAAMshB,EAAA80B,KAAKuH,qBAAiCtsC,EAAYmrD,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAElF,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,GAGT03D,EAAAl5D,UAAAqjE,kBAAA,SACErF,GAQA,GACIz7B,GADA88B,EAAWrB,EAAG/Z,QAElB,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,WAAY,CAE5B,IADA,GAAIngC,GAAa,GAAIrjB,QACb87D,EAAGrX,KAAKlpB,EAAA2N,MAAMua,aAAa,CAEjC,KADApjB,EAAO/jC,KAAKugE,eAAef,IAChB,MAAO,KAClBz4C,GAAWpjB,KAAgBogC,GAE7B,GAAI+c,GAA6C,KAC7CC,EAAsC,KACtCC,EAAwC,IAC5C,IAAIwe,EAAGrX,KAAKlpB,EAAA2N,MAAM+W,OAAQ,CACxB,IAAK6b,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAKjB,MAJAnmD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,IAET,KAAKu+C,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAKjB,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,SAEE,IAGT,IADA6/B,EAAgBx8B,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,UACnEu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAKjB,MAJApmD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,IAET,KAAKu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,WAKjB,MAJAlnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,IAGT,KADA8/B,MACQye,EAAGrX,KAAKlpB,EAAA2N,MAAMua,aAAa,CAEjC,KADApjB,EAAO/jC,KAAKugE,eAAef,IAChB,MAAO,KAClBze,GAAgBp9C,KAAgBogC,IAGpC,GAAIy7B,EAAGrX,KAAKlpB,EAAA2N,MAAMqX,SAAU,CAC1B,IAAKub,EAAGrX,KAAKlpB,EAAA2N,MAAMsa,WAKjB,MAJAlnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,IAGT,KADA+/B,MACQwe,EAAGrX,KAAKlpB,EAAA2N,MAAMua,aAAa,CAEjC,KADApjB,EAAO/jC,KAAKugE,eAAef,IAChB,MAAO,KAClBxe,GAAkBr9C,KAAgBogC,IAGtC,IAAMgd,IAAmBC,EAKvB,MAJAhhD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAEP,IAET,IAAIje,GAAMshB,EAAA80B,KAAKyH,mBACb95B,EACA+5B,EACAC,EACAC,EACAwe,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAGxB,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAOT,MALEhD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAGT,MAGTy5C,EAAAl5D,UAAA4+D,qBAAA,SACEZ,EACAjzC,EACA5B,OADA,KAAA4B,MAAA,UACA,KAAA5B,MAAA,KAKA,IAAIk2C,GAAWl2C,GAAcA,EAAW3oB,OAAS2oB,EAAW,GAAG1J,MAAMW,MACtD2K,GAAaA,EAAUvqB,OAASuqB,EAAU,GAAGtL,MAAMW,MACnD49C,EAAG/Z,QAClB,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAM5Y,YAAa,CAC7B,GAAIpzB,GAAO0jB,EAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,QACnE,IAAIu+C,EAAGrX,KAAKlpB,EAAA2N,MAAMmC,QAAS,CACzB,GAAIp9B,GAAO3R,KAAK0gE,UAAUlB,EAC1B,KAAK7tD,EAAM,MAAO,KAClB,IAAI3O,GAAMshB,EAAA80B,KAAK8H,sBAAsBtgD,EAAM+Q,EAAM4a,EAAW5B,EAAY60C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAE9F,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAEPhD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfvB,EAAGv+C,QAGP,OAAO,OAGTy5C,EAAAl5D,UAAAsjE,oBAAA,SACEtF,GAKA,GAAIqB,GAAWrB,EAAG/Z,QAClB,IAAI+Z,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAAY,CAC5B,GAAI9xC,GAAarU,KAAKyhE,gBAAgBjC,EACtC,KAAKnrD,EAAY,MAAO,KACxB,IAAImrD,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAAa,CAC7B,GAAIn/B,GAAYjnB,KAAKugE,eAAef,EACpC,KAAKv4C,EAAW,MAAO,KACvB,IAAIjkB,GAAMshB,EAAA80B,KAAKoI,qBAAiCntC,EAAuB4S,EAAWu4C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAExG,OADAia,GAAGrX,KAAKlpB,EAAA2N,MAAMia,WACP7jD,EAEPhD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,SAIhBjhB,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,IAGhB,OAAO,OAMTy5C,EAAAl5D,UAAA2jE,qBAAA,SACE3F,GAGA,GAAIva,GAAQua,EAAG17C,MAAK,GAChB+8C,EAAWrB,EAAG/Z,SACdz0C,EAA0B,IAE9B,IAAIi0C,GAAShmB,EAAA2N,MAAMhD,KACjB,MAAOtlB,GAAA80B,KAAKkC,qBAAqBkkB,EAAGv+C,QAEtC,IAAIgkC,GAAShmB,EAAA2N,MAAM/C,KACjB,MAAOvlB,GAAA80B,KAAKoD,qBAAqBgjB,EAAGv+C,QAEtC,IAAIgkC,GAAShmB,EAAA2N,MAAMjD,MACjB,MAAOrlB,GAAA80B,KAAKsB,sBAAsB8kB,EAAGv+C,QAGvC,IAAIvf,GAAIy9D,EAAyBla,EACjC,KAAK,GAADvjD,EAAyB,CAC3B,GAAIq1C,EAKJ,OAAIkO,IAAShmB,EAAA2N,MAAM5C,KACjB+M,EAAU/2C,KAAKyhE,gBAAgBjC,EAAE,KAE7BzoB,EAAQ7vB,MAAQ5C,EAAA6C,SAASgN,KACpB7P,EAAA80B,KAAKgC,oBACOrE,EAAS1iC,WACT0iC,EAAS9lB,cACT8lB,EAASjpB,UAC1B0xC,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,OAGxBvlD,KAAKijB,MACHmB,EAAAjC,eAAeyL,wBACf4xC,EAAGv+C,SAGA,MAdc,MAgBrB81B,EAAU/2C,KAAKyhE,gBAAgBjC,EAAI99D,KAKjCujD,GAAShmB,EAAA2N,MAAMoK,WAAaiO,GAAShmB,EAAA2N,MAAMuK,aAE3CJ,EAAQ7vB,MAAQ5C,EAAA6C,SAAS6M,YACzB+iB,EAAQ7vB,MAAQ5C,EAAA6C,SAAS+M,eACzB6iB,EAAQ7vB,MAAQ5C,EAAA6C,SAAS8M,gBAEzBj0B,KAAKijB,MACHmB,EAAAjC,eAAeijD,0FACfruB,EAAQ91B,OAIPqD,EAAA80B,KAAKwD,4BAA4BqI,EAAOlO,EAASyoB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,OAhBvD,KAmBzB,OAAQN,GAIN,IAAKhmB,GAAA2N,MAAMuZ,UAGT,GAAIqZ,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAChB,MAAOpmD,MAAKsjE,8BACV9D,EACAl7C,EAAA80B,KAAKI,2BAA2B,GAAIgmB,EAAGv+C,MAAM4/C,EAAUA,QAEvD,EAGJrB,GAAGpX,MACH,IAAIid,IAAQ,CACZ,IACE,OAAQ7F,EAAG17C,MAAK,IAGd,IAAKmb,GAAA2N,MAAMuY,YAET,MADAqa,GAAGnX,QACIroD,KAAKqjE,wBAAwB7D,EAGtC,KAAKvgC,GAAA2N,MAAM5Y,WAET,OADAwrC,EAAGlX,iBACKkX,EAAG17C,QAGT,IAAKmb,GAAA2N,MAAMwZ,WACT,IAAKoZ,EAAGrX,KAAKlpB,EAAA2N,MAAMka,oBAAqB,CACtCue,GAAQ,CACR,OAKJ,IAAKpmC,GAAA2N,MAAMma,SACX,IAAK9nB,GAAA2N,MAAMga,MAET,MADA4Y,GAAGnX,QACIroD,KAAKqjE,wBAAwB7D,EAGtC,KAAKvgC,GAAA2N,MAAMtD,MACT,KAIF,SACE+7B,GAAQ,EAGZ,KAGF,SACEA,GAAQ,SAGLA,EAKT,OAJA7F,GAAGnX,QAGHr3C,EAAOhR,KAAKyhE,gBAAgBjC,GACvBxuD,EACAwuD,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAOZ9hC,EAAA80B,KAAKoC,8BAA8BxqC,EAAMwuD,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,OANpEvlD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,MANS,IAWpB,KAAKge,GAAA2N,MAAMoa,YACT,GAAIpS,GAAqB,GAAIlxC,MAE7B,KAAK87D,EAAGrX,KAAKlpB,EAAA2N,MAAMqa,cAAe,CAChC,EAAG,CACD,GAAIuY,EAAG1X,QAAU7oB,EAAA2N,MAAMtD,MACrBt4B,EAAO,SAGP,MADAA,EAAOhR,KAAKyhE,gBAAgBjC,EAAI,IACrB,MAAO,KAGpB,IADA5qB,EAAmBjxC,KAAKqN,GACpBwuD,EAAG1X,QAAU7oB,EAAA2N,MAAMqa,aAAc,YAC9BuY,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvB,KAAKk2B,EAAGrX,KAAKlpB,EAAA2N,MAAMqa,cAKjB,MAJAjnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,KAGX,MAAOqD,GAAA80B,KAAKM,6BAA6B9E,EAAoB4qB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAGrF,KAAKtmB,GAAA2N,MAAMC,SACT,GAAIpZ,GAASzzB,KAAK0gE,UAAUlB,EAC5B,OAAK/rC,GACA+rC,EAAGrX,KAAKlpB,EAAA2N,MAAMQ,cAOnBp8B,EAAOhR,KAAKyhE,gBAAgBjC,EAAE,IACzBxuD,EACEsT,EAAA80B,KAAKQ,0BAAyB,EAEnC5oC,EACAyiB,EACA+rC,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MALN,OAPhBvlD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,MANW,IAiBtB,KAAKge,GAAA2N,MAAM5Y,WACT,MAAO1P,GAAA80B,KAAKI,2BAA2BgmB,EAAGlX,iBAAkBkX,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAEpF,KAAKtmB,GAAA2N,MAAMjZ,KACT,MAAOrP,GAAA80B,KAAKkD,qBAAqBkjB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAEzD,KAAKtmB,GAAA2N,MAAMvf,YACT,MAAO/I,GAAA80B,KAAKkB,4BAA4BklB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAEhE,KAAKtmB,GAAA2N,MAAM9Y,MACT,MAAOxP,GAAA80B,KAAKgD,sBAAsBojB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAE1D,KAAKtmB,GAAA2N,MAAMsZ,cACT,MAAO5hC,GAAA80B,KAAK8C,8BAA8BsjB,EAAGt8D,aAAcs8D,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAEnF,KAAKtmB,GAAA2N,MAAM+Z,eACT,MAAOriC,GAAA80B,KAAK8B,+BAA+BskB,EAAGrW,cAAeqW,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAErF,KAAKtmB,GAAA2N,MAAM0Z,aACT,MAAOhiC,GAAA80B,KAAKwB,6BAA6B4kB,EAAGpV,YAAaoV,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAIjF,KAAKtmB,GAAA2N,MAAMuD,MACT,GAAIm1B,GAAgB9F,EAAG1W,mBACvB,OAAK0W,GAAGrX,KAAKlpB,EAAA2N,MAAMuD,OAOZ7rB,EAAA80B,KAAKwC,8BACV0pB,EACA9F,EAAGvW,kBACHuW,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,OATtBvlD,KAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,KAQX,KAAKge,GAAA2N,MAAMvU,SACT,MAAOr4B,MAAKqjE,wBAAwB7D,EAEtC,SAKE,MAJAx/D,MAAKijB,MACHmB,EAAAjC,eAAeojD,oBACf/F,EAAGv+C,SAEE,OAIby5C,EAAAl5D,UAAAgkE,qCAAA,SACEhG,GAMA,GADAA,EAAGpX,QACEoX,EAAGrX,KAAKlpB,EAAA2N,MAAMC,UAAW,MAAO,KACrC,IAAI5b,GAAgB,GAAIvtB,MACxB,GAAG,CACD,GAAIiO,GAAO3R,KAAK0gE,UAAUlB,GAAI,GAAM,EACpC,KAAK7tD,EAEH,MADA6tD,GAAGnX,QACI,IAETp3B,GAActtB,KAAKgO,SACZ6tD,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvB,OAAIk2B,GAAGrX,KAAKlpB,EAAA2N,MAAMQ,cAAgBoyB,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WACvCl1B,GAETuuC,EAAGnX,QACI,OAGTqS,EAAAl5D,UAAA2/D,eAAA,SACE3B,GAKA,GAAIxrB,GAAO,GAAItwC,MACf,KAAK87D,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAAa,CAC9B,EAAG,CACD,GAAIp1C,GAAOhR,KAAKyhE,gBAAgBjC,EAAI,EACpC,KAAKxuD,EAAM,MAAO,KAClBgjC,GAAKrwC,KAAKqN,SACHwuD,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvB,KAAKk2B,EAAGrX,KAAKlpB,EAAA2N,MAAMwZ,YAKjB,MAJApmD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,KAGX,MAAO+yB,IAGT0mB,EAAAl5D,UAAAigE,gBAAA,SACEjC,EACAiG,OAAA,KAAAA,MAAA,EAGA,IAAIz0D,GAAOhR,KAAKmlE,qBAAqB3F,EACrC,KAAKxuD,EAAM,MAAO,KAClB,IAAI6vD,GAAW7vD,EAAKiQ,MAAMW,MAGtBqP,EAAgBjxB,KAAKwlE,qCAAqChG,EAE9D,IAAIvuC,GAAiBuuC,EAAGrX,KAAKlpB,EAAA2N,MAAMuZ,WAAY,CAC7C,GAAInS,GAAOh0C,KAAKmhE,eAAe3B,EAC/B,KAAKxrB,EAAM,MAAO,KAClBhjC,GAAOsT,EAAA80B,KAAKa,qBAAqBjpC,EAAMigB,EAAe+iB,EAAMwrB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAMpF,IAHA,GAAIN,GAEAygB,EADA5hD,EAA0B,MAG3B4hD,EAAiBtG,EAAoBna,EAAQua,EAAG1X,UAAY2d,GAI7D,OAFAjG,EAAG17C,OAEKmhC,GAGN,IAAKhmB,GAAA2N,MAAM2W,GACT,GAAI9vB,GAASzzB,KAAK0gE,UAAUlB,EAC5B,KAAK/rC,EAAQ,MAAO,KACpBziB,GAAOsT,EAAA80B,KAAKQ,0BAAyB,EAEnC5oC,EACAyiB,EACA+rC,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAExB,MAGF,KAAKtmB,GAAA2N,MAAMoa,YAET,KADAljC,EAAO9jB,KAAKyhE,gBAAgBjC,IACjB,MAAO,KAClB,KAAKA,EAAGrX,KAAKlpB,EAAA2N,MAAMqa,cAKjB,MAJAjnD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,IAETjQ,GAAOsT,EAAA80B,KAAKoB,8BACVxpC,EACA8S,EACA07C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAExB,MAGF,KAAKtmB,GAAA2N,MAAMoK,UACX,IAAK/X,GAAA2N,MAAMuK,YAEPnmC,EAAKkW,MAAQ5C,EAAA6C,SAAS6M,YACtBhjB,EAAKkW,MAAQ5C,EAAA6C,SAAS+M,eACtBljB,EAAKkW,MAAQ5C,EAAA6C,SAAS8M,gBAEtBj0B,KAAKijB,MACHmB,EAAAjC,eAAeijD,0FACfp0D,EAAKiQ,OAGTjQ,EAAOsT,EAAA80B,KAAKsD,6BACVuI,EACAj0C,EACAwuD,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAExB,MAGF,KAAKtmB,GAAA2N,MAAMma,SACT,GAAIpQ,GAAS32C,KAAKyhE,gBAAgBjC,EAClC,KAAK7oB,EAAQ,MAAO,KACpB,KAAK6oB,EAAGrX,KAAKlpB,EAAA2N,MAAMga,OAKjB,MAJA5mD,MAAKijB,MACHmB,EAAAjC,eAAeskC,YACf+Y,EAAGv+C,QAAS,KAEP,IAET,IAAI21B,GAAS52C,KAAKyhE,gBAAgBjC,EAClC,KAAK5oB,EAAQ,MAAO,KACpB5lC,GAAOsT,EAAA80B,KAAK4C,wBACVhrC,EACA2lC,EACAC,EACA4oB,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KAExB,MAGF,KAAKtmB,GAAA2N,MAAMtD,MACT,GAAIq8B,IAA6B30D,EACjC,GAAG,CAED,KADAA,EAAOhR,KAAKyhE,gBAAgBjC,EAAI,IACrB,MAAO,KAClBmG,GAAWhiE,KAAKqN,SACTwuD,EAAGrX,KAAKlpB,EAAA2N,MAAMtD,OACvBt4B,GAAOsT,EAAA80B,KAAKgB,sBAAsBurB,EAAYnG,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,KACpE,MAEF,SAME,KALAzhC,EAAO9jB,KAAKyhE,gBAAgBjC,EAC1BH,EAAmBpa,GACfygB,EACAA,EAAiB,IAEZ,MAAO,KAGlB,IAAIzgB,GAAShmB,EAAA2N,MAAM2Z,IACjB,GAAIziC,EAAKoD,MAAQ5C,EAAA6C,SAAS6M,WACxBhjB,EAAOsT,EAAA80B,KAAKsC,+BACV1qC,EACsB8S,EACtB07C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,UAEnB,IAAIzhC,EAAKoD,MAAQ5C,EAAA6C,SAASgN,KAqB/B,MAJAn0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACfj9C,EAAK7C,OAEA,IApBP,IAAI2kD,GAA+B9hD,CACnC,IAAI8hD,EAAavxD,WAAW6S,MAAQ5C,EAAA6C,SAAS6M,WAW3C,MAJAh0B,MAAKijB,MACHmB,EAAAjC,eAAe4+C,oBACf6E,EAAavxD,WAAW4M,OAEnB,IAVP2kD,GAAavxD,WAAaiQ,EAAA80B,KAAKsC,+BAC7B1qC,EACsB40D,EAAavxD,WACnCmrD,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAS1Bv0C,EAAO40D,MAWT50D,GAAOsT,EAAA80B,KAAKW,uBAAuBkL,EAAOj0C,EAAM8S,EAAM07C,EAAGv+C,MAAM4/C,EAAUrB,EAAGja,MAKpF,MAAOv0C,IAEX0pD,GA1hF4Bt2C,EAAAtB,kBAAfpjB,GAAAg7D,UA6hFb,SAAkBmL,GAChBA,IAAA,iBACAA,IAAA,mBACAA,IAAA,iBACAA,IAAA,2BACAA,IAAA,6BACAA,IAAA,2BACAA,IAAA,6BACAA,IAAA,2BACAA,IAAA,6BACAA,IAAA,6BACAA,IAAA,wBACAA,IAAA,4BACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,oCACAA,IAAA,kCACAA,IAAA,gCACAA,IAAA,kCACAA,IAAA,gBACAA,IAAA,gCACAA,IAAA,wBACAA,IAAA,uBAtBgBnmE,EAAAmmE,aAAAnmE,EAAAmmE","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 11);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar compiler_1 = __webpack_require__(4);\r\nvar NativeType;\r\n(function (NativeType) {\r\n NativeType[NativeType[\"None\"] = _BinaryenTypeNone()] = \"None\";\r\n NativeType[NativeType[\"I32\"] = _BinaryenTypeInt32()] = \"I32\";\r\n NativeType[NativeType[\"I64\"] = _BinaryenTypeInt64()] = \"I64\";\r\n NativeType[NativeType[\"F32\"] = _BinaryenTypeFloat32()] = \"F32\";\r\n NativeType[NativeType[\"F64\"] = _BinaryenTypeFloat64()] = \"F64\";\r\n NativeType[NativeType[\"Unreachable\"] = _BinaryenTypeUnreachable()] = \"Unreachable\";\r\n NativeType[NativeType[\"Auto\"] = _BinaryenTypeAuto()] = \"Auto\";\r\n})(NativeType = exports.NativeType || (exports.NativeType = {}));\r\nvar ExpressionId;\r\n(function (ExpressionId) {\r\n ExpressionId[ExpressionId[\"Invalid\"] = _BinaryenInvalidId()] = \"Invalid\";\r\n ExpressionId[ExpressionId[\"Block\"] = _BinaryenBlockId()] = \"Block\";\r\n ExpressionId[ExpressionId[\"If\"] = _BinaryenIfId()] = \"If\";\r\n ExpressionId[ExpressionId[\"Loop\"] = _BinaryenLoopId()] = \"Loop\";\r\n ExpressionId[ExpressionId[\"Break\"] = _BinaryenBreakId()] = \"Break\";\r\n ExpressionId[ExpressionId[\"Switch\"] = _BinaryenSwitchId()] = \"Switch\";\r\n ExpressionId[ExpressionId[\"Call\"] = _BinaryenCallId()] = \"Call\";\r\n ExpressionId[ExpressionId[\"CallImport\"] = _BinaryenCallImportId()] = \"CallImport\";\r\n ExpressionId[ExpressionId[\"CallIndirect\"] = _BinaryenCallIndirectId()] = \"CallIndirect\";\r\n ExpressionId[ExpressionId[\"GetLocal\"] = _BinaryenGetLocalId()] = \"GetLocal\";\r\n ExpressionId[ExpressionId[\"SetLocal\"] = _BinaryenSetLocalId()] = \"SetLocal\";\r\n ExpressionId[ExpressionId[\"GetGlobal\"] = _BinaryenGetGlobalId()] = \"GetGlobal\";\r\n ExpressionId[ExpressionId[\"SetGlobal\"] = _BinaryenSetGlobalId()] = \"SetGlobal\";\r\n ExpressionId[ExpressionId[\"Load\"] = _BinaryenLoadId()] = \"Load\";\r\n ExpressionId[ExpressionId[\"Store\"] = _BinaryenStoreId()] = \"Store\";\r\n ExpressionId[ExpressionId[\"Const\"] = _BinaryenConstId()] = \"Const\";\r\n ExpressionId[ExpressionId[\"Unary\"] = _BinaryenUnaryId()] = \"Unary\";\r\n ExpressionId[ExpressionId[\"Binary\"] = _BinaryenBinaryId()] = \"Binary\";\r\n ExpressionId[ExpressionId[\"Select\"] = _BinaryenSelectId()] = \"Select\";\r\n ExpressionId[ExpressionId[\"Drop\"] = _BinaryenDropId()] = \"Drop\";\r\n ExpressionId[ExpressionId[\"Return\"] = _BinaryenReturnId()] = \"Return\";\r\n ExpressionId[ExpressionId[\"Host\"] = _BinaryenHostId()] = \"Host\";\r\n ExpressionId[ExpressionId[\"Nop\"] = _BinaryenNopId()] = \"Nop\";\r\n ExpressionId[ExpressionId[\"Unreachable\"] = _BinaryenUnreachableId()] = \"Unreachable\";\r\n ExpressionId[ExpressionId[\"AtomicCmpxchg\"] = _BinaryenAtomicCmpxchgId()] = \"AtomicCmpxchg\";\r\n ExpressionId[ExpressionId[\"AtomicRMW\"] = _BinaryenAtomicRMWId()] = \"AtomicRMW\";\r\n ExpressionId[ExpressionId[\"AtomicWait\"] = _BinaryenAtomicWaitId()] = \"AtomicWait\";\r\n ExpressionId[ExpressionId[\"AtomicWake\"] = _BinaryenAtomicWakeId()] = \"AtomicWake\";\r\n})(ExpressionId = exports.ExpressionId || (exports.ExpressionId = {}));\r\nvar UnaryOp;\r\n(function (UnaryOp) {\r\n UnaryOp[UnaryOp[\"ClzI32\"] = _BinaryenClzInt32()] = \"ClzI32\";\r\n UnaryOp[UnaryOp[\"CtzI32\"] = _BinaryenCtzInt32()] = \"CtzI32\";\r\n UnaryOp[UnaryOp[\"PopcntI32\"] = _BinaryenPopcntInt32()] = \"PopcntI32\";\r\n UnaryOp[UnaryOp[\"NegF32\"] = _BinaryenNegFloat32()] = \"NegF32\";\r\n UnaryOp[UnaryOp[\"AbsF32\"] = _BinaryenAbsFloat32()] = \"AbsF32\";\r\n UnaryOp[UnaryOp[\"CeilF32\"] = _BinaryenCeilFloat32()] = \"CeilF32\";\r\n UnaryOp[UnaryOp[\"FloorF32\"] = _BinaryenFloorFloat32()] = \"FloorF32\";\r\n UnaryOp[UnaryOp[\"TruncF32\"] = _BinaryenTruncFloat32()] = \"TruncF32\";\r\n UnaryOp[UnaryOp[\"NearestF32\"] = _BinaryenNearestFloat32()] = \"NearestF32\";\r\n UnaryOp[UnaryOp[\"SqrtF32\"] = _BinaryenSqrtFloat32()] = \"SqrtF32\";\r\n UnaryOp[UnaryOp[\"EqzI32\"] = _BinaryenEqZInt32()] = \"EqzI32\";\r\n UnaryOp[UnaryOp[\"ClzI64\"] = _BinaryenClzInt64()] = \"ClzI64\";\r\n UnaryOp[UnaryOp[\"CtzI64\"] = _BinaryenCtzInt64()] = \"CtzI64\";\r\n UnaryOp[UnaryOp[\"PopcntI64\"] = _BinaryenPopcntInt64()] = \"PopcntI64\";\r\n UnaryOp[UnaryOp[\"NegF64\"] = _BinaryenNegFloat64()] = \"NegF64\";\r\n UnaryOp[UnaryOp[\"AbsF64\"] = _BinaryenAbsFloat64()] = \"AbsF64\";\r\n UnaryOp[UnaryOp[\"CeilF64\"] = _BinaryenCeilFloat64()] = \"CeilF64\";\r\n UnaryOp[UnaryOp[\"FloorF64\"] = _BinaryenFloorFloat64()] = \"FloorF64\";\r\n UnaryOp[UnaryOp[\"TruncF64\"] = _BinaryenTruncFloat64()] = \"TruncF64\";\r\n UnaryOp[UnaryOp[\"NearestF64\"] = _BinaryenNearestFloat64()] = \"NearestF64\";\r\n UnaryOp[UnaryOp[\"SqrtF64\"] = _BinaryenSqrtFloat64()] = \"SqrtF64\";\r\n UnaryOp[UnaryOp[\"EqzI64\"] = _BinaryenEqZInt64()] = \"EqzI64\";\r\n UnaryOp[UnaryOp[\"ExtendI32\"] = _BinaryenExtendSInt32()] = \"ExtendI32\";\r\n UnaryOp[UnaryOp[\"ExtendU32\"] = _BinaryenExtendUInt32()] = \"ExtendU32\";\r\n UnaryOp[UnaryOp[\"WrapI64\"] = _BinaryenWrapInt64()] = \"WrapI64\";\r\n UnaryOp[UnaryOp[\"TruncF32ToI32\"] = _BinaryenTruncSFloat32ToInt32()] = \"TruncF32ToI32\";\r\n UnaryOp[UnaryOp[\"TruncF32ToI64\"] = _BinaryenTruncSFloat32ToInt64()] = \"TruncF32ToI64\";\r\n UnaryOp[UnaryOp[\"TruncF32ToU32\"] = _BinaryenTruncUFloat32ToInt32()] = \"TruncF32ToU32\";\r\n UnaryOp[UnaryOp[\"TruncF32ToU64\"] = _BinaryenTruncUFloat32ToInt64()] = \"TruncF32ToU64\";\r\n UnaryOp[UnaryOp[\"TruncF64ToI32\"] = _BinaryenTruncSFloat64ToInt32()] = \"TruncF64ToI32\";\r\n UnaryOp[UnaryOp[\"TruncF64ToI64\"] = _BinaryenTruncSFloat64ToInt64()] = \"TruncF64ToI64\";\r\n UnaryOp[UnaryOp[\"TruncF64ToU32\"] = _BinaryenTruncUFloat64ToInt32()] = \"TruncF64ToU32\";\r\n UnaryOp[UnaryOp[\"TruncF64ToU64\"] = _BinaryenTruncUFloat64ToInt64()] = \"TruncF64ToU64\";\r\n UnaryOp[UnaryOp[\"ReinterpretF32\"] = _BinaryenReinterpretFloat32()] = \"ReinterpretF32\";\r\n UnaryOp[UnaryOp[\"ReinterpretF64\"] = _BinaryenReinterpretFloat64()] = \"ReinterpretF64\";\r\n UnaryOp[UnaryOp[\"ConvertI32ToF32\"] = _BinaryenConvertSInt32ToFloat32()] = \"ConvertI32ToF32\";\r\n UnaryOp[UnaryOp[\"ConvertI32ToF64\"] = _BinaryenConvertSInt32ToFloat64()] = \"ConvertI32ToF64\";\r\n UnaryOp[UnaryOp[\"ConvertU32ToF32\"] = _BinaryenConvertUInt32ToFloat32()] = \"ConvertU32ToF32\";\r\n UnaryOp[UnaryOp[\"ConvertU32ToF64\"] = _BinaryenConvertUInt32ToFloat64()] = \"ConvertU32ToF64\";\r\n UnaryOp[UnaryOp[\"ConvertI64ToF32\"] = _BinaryenConvertSInt64ToFloat32()] = \"ConvertI64ToF32\";\r\n UnaryOp[UnaryOp[\"ConvertI64ToF64\"] = _BinaryenConvertSInt64ToFloat64()] = \"ConvertI64ToF64\";\r\n UnaryOp[UnaryOp[\"ConvertU64ToF32\"] = _BinaryenConvertUInt64ToFloat32()] = \"ConvertU64ToF32\";\r\n UnaryOp[UnaryOp[\"ConvertU64ToF64\"] = _BinaryenConvertUInt64ToFloat64()] = \"ConvertU64ToF64\";\r\n UnaryOp[UnaryOp[\"PromoteF32\"] = _BinaryenPromoteFloat32()] = \"PromoteF32\";\r\n UnaryOp[UnaryOp[\"DemoteF64\"] = _BinaryenDemoteFloat64()] = \"DemoteF64\";\r\n UnaryOp[UnaryOp[\"ReinterpretI32\"] = _BinaryenReinterpretInt32()] = \"ReinterpretI32\";\r\n UnaryOp[UnaryOp[\"ReinterpretI64\"] = _BinaryenReinterpretInt64()] = \"ReinterpretI64\";\r\n // see: https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md#new-sign-extending-operators\r\n // ExtendI8ToI32 =_BinaryenExtendS8Int32()\r\n // ExtendI16ToI32 = _BinaryenExtendS16Int32()\r\n // ExtendI8ToI64 = _BinaryenExtendS8Int64() // operand is I64\r\n // ExtendI16ToI64 = _BinaryenExtendS16Int64()\r\n // ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n})(UnaryOp = exports.UnaryOp || (exports.UnaryOp = {}));\r\nvar BinaryOp;\r\n(function (BinaryOp) {\r\n BinaryOp[BinaryOp[\"AddI32\"] = _BinaryenAddInt32()] = \"AddI32\";\r\n BinaryOp[BinaryOp[\"SubI32\"] = _BinaryenSubInt32()] = \"SubI32\";\r\n BinaryOp[BinaryOp[\"MulI32\"] = _BinaryenMulInt32()] = \"MulI32\";\r\n BinaryOp[BinaryOp[\"DivI32\"] = _BinaryenDivSInt32()] = \"DivI32\";\r\n BinaryOp[BinaryOp[\"DivU32\"] = _BinaryenDivUInt32()] = \"DivU32\";\r\n BinaryOp[BinaryOp[\"RemI32\"] = _BinaryenRemSInt32()] = \"RemI32\";\r\n BinaryOp[BinaryOp[\"RemU32\"] = _BinaryenRemUInt32()] = \"RemU32\";\r\n BinaryOp[BinaryOp[\"AndI32\"] = _BinaryenAndInt32()] = \"AndI32\";\r\n BinaryOp[BinaryOp[\"OrI32\"] = _BinaryenOrInt32()] = \"OrI32\";\r\n BinaryOp[BinaryOp[\"XorI32\"] = _BinaryenXorInt32()] = \"XorI32\";\r\n BinaryOp[BinaryOp[\"ShlI32\"] = _BinaryenShlInt32()] = \"ShlI32\";\r\n BinaryOp[BinaryOp[\"ShrU32\"] = _BinaryenShrUInt32()] = \"ShrU32\";\r\n BinaryOp[BinaryOp[\"ShrI32\"] = _BinaryenShrSInt32()] = \"ShrI32\";\r\n BinaryOp[BinaryOp[\"RotlI32\"] = _BinaryenRotLInt32()] = \"RotlI32\";\r\n BinaryOp[BinaryOp[\"RotrI32\"] = _BinaryenRotRInt32()] = \"RotrI32\";\r\n BinaryOp[BinaryOp[\"EqI32\"] = _BinaryenEqInt32()] = \"EqI32\";\r\n BinaryOp[BinaryOp[\"NeI32\"] = _BinaryenNeInt32()] = \"NeI32\";\r\n BinaryOp[BinaryOp[\"LtI32\"] = _BinaryenLtSInt32()] = \"LtI32\";\r\n BinaryOp[BinaryOp[\"LtU32\"] = _BinaryenLtUInt32()] = \"LtU32\";\r\n BinaryOp[BinaryOp[\"LeI32\"] = _BinaryenLeSInt32()] = \"LeI32\";\r\n BinaryOp[BinaryOp[\"LeU32\"] = _BinaryenLeUInt32()] = \"LeU32\";\r\n BinaryOp[BinaryOp[\"GtI32\"] = _BinaryenGtSInt32()] = \"GtI32\";\r\n BinaryOp[BinaryOp[\"GtU32\"] = _BinaryenGtUInt32()] = \"GtU32\";\r\n BinaryOp[BinaryOp[\"GeI32\"] = _BinaryenGeSInt32()] = \"GeI32\";\r\n BinaryOp[BinaryOp[\"GeU32\"] = _BinaryenGeUInt32()] = \"GeU32\";\r\n BinaryOp[BinaryOp[\"AddI64\"] = _BinaryenAddInt64()] = \"AddI64\";\r\n BinaryOp[BinaryOp[\"SubI64\"] = _BinaryenSubInt64()] = \"SubI64\";\r\n BinaryOp[BinaryOp[\"MulI64\"] = _BinaryenMulInt64()] = \"MulI64\";\r\n BinaryOp[BinaryOp[\"DivI64\"] = _BinaryenDivSInt64()] = \"DivI64\";\r\n BinaryOp[BinaryOp[\"DivU64\"] = _BinaryenDivUInt64()] = \"DivU64\";\r\n BinaryOp[BinaryOp[\"RemI64\"] = _BinaryenRemSInt64()] = \"RemI64\";\r\n BinaryOp[BinaryOp[\"RemU64\"] = _BinaryenRemUInt64()] = \"RemU64\";\r\n BinaryOp[BinaryOp[\"AndI64\"] = _BinaryenAndInt64()] = \"AndI64\";\r\n BinaryOp[BinaryOp[\"OrI64\"] = _BinaryenOrInt64()] = \"OrI64\";\r\n BinaryOp[BinaryOp[\"XorI64\"] = _BinaryenXorInt64()] = \"XorI64\";\r\n BinaryOp[BinaryOp[\"ShlI64\"] = _BinaryenShlInt64()] = \"ShlI64\";\r\n BinaryOp[BinaryOp[\"ShrU64\"] = _BinaryenShrUInt64()] = \"ShrU64\";\r\n BinaryOp[BinaryOp[\"ShrI64\"] = _BinaryenShrSInt64()] = \"ShrI64\";\r\n BinaryOp[BinaryOp[\"RotlI64\"] = _BinaryenRotLInt64()] = \"RotlI64\";\r\n BinaryOp[BinaryOp[\"RotrI64\"] = _BinaryenRotRInt64()] = \"RotrI64\";\r\n BinaryOp[BinaryOp[\"EqI64\"] = _BinaryenEqInt64()] = \"EqI64\";\r\n BinaryOp[BinaryOp[\"NeI64\"] = _BinaryenNeInt64()] = \"NeI64\";\r\n BinaryOp[BinaryOp[\"LtI64\"] = _BinaryenLtSInt64()] = \"LtI64\";\r\n BinaryOp[BinaryOp[\"LtU64\"] = _BinaryenLtUInt64()] = \"LtU64\";\r\n BinaryOp[BinaryOp[\"LeI64\"] = _BinaryenLeSInt64()] = \"LeI64\";\r\n BinaryOp[BinaryOp[\"LeU64\"] = _BinaryenLeUInt64()] = \"LeU64\";\r\n BinaryOp[BinaryOp[\"GtI64\"] = _BinaryenGtSInt64()] = \"GtI64\";\r\n BinaryOp[BinaryOp[\"GtU64\"] = _BinaryenGtUInt64()] = \"GtU64\";\r\n BinaryOp[BinaryOp[\"GeI64\"] = _BinaryenGeSInt64()] = \"GeI64\";\r\n BinaryOp[BinaryOp[\"GeU64\"] = _BinaryenGeUInt64()] = \"GeU64\";\r\n BinaryOp[BinaryOp[\"AddF32\"] = _BinaryenAddFloat32()] = \"AddF32\";\r\n BinaryOp[BinaryOp[\"SubF32\"] = _BinaryenSubFloat32()] = \"SubF32\";\r\n BinaryOp[BinaryOp[\"MulF32\"] = _BinaryenMulFloat32()] = \"MulF32\";\r\n BinaryOp[BinaryOp[\"DivF32\"] = _BinaryenDivFloat32()] = \"DivF32\";\r\n BinaryOp[BinaryOp[\"CopysignF32\"] = _BinaryenCopySignFloat32()] = \"CopysignF32\";\r\n BinaryOp[BinaryOp[\"MinF32\"] = _BinaryenMinFloat32()] = \"MinF32\";\r\n BinaryOp[BinaryOp[\"MaxF32\"] = _BinaryenMaxFloat32()] = \"MaxF32\";\r\n BinaryOp[BinaryOp[\"EqF32\"] = _BinaryenEqFloat32()] = \"EqF32\";\r\n BinaryOp[BinaryOp[\"NeF32\"] = _BinaryenNeFloat32()] = \"NeF32\";\r\n BinaryOp[BinaryOp[\"LtF32\"] = _BinaryenLtFloat32()] = \"LtF32\";\r\n BinaryOp[BinaryOp[\"LeF32\"] = _BinaryenLeFloat32()] = \"LeF32\";\r\n BinaryOp[BinaryOp[\"GtF32\"] = _BinaryenGtFloat32()] = \"GtF32\";\r\n BinaryOp[BinaryOp[\"GeF32\"] = _BinaryenGeFloat32()] = \"GeF32\";\r\n BinaryOp[BinaryOp[\"AddF64\"] = _BinaryenAddFloat64()] = \"AddF64\";\r\n BinaryOp[BinaryOp[\"SubF64\"] = _BinaryenSubFloat64()] = \"SubF64\";\r\n BinaryOp[BinaryOp[\"MulF64\"] = _BinaryenMulFloat64()] = \"MulF64\";\r\n BinaryOp[BinaryOp[\"DivF64\"] = _BinaryenDivFloat64()] = \"DivF64\";\r\n BinaryOp[BinaryOp[\"CopysignF64\"] = _BinaryenCopySignFloat64()] = \"CopysignF64\";\r\n BinaryOp[BinaryOp[\"MinF64\"] = _BinaryenMinFloat64()] = \"MinF64\";\r\n BinaryOp[BinaryOp[\"MaxF64\"] = _BinaryenMaxFloat64()] = \"MaxF64\";\r\n BinaryOp[BinaryOp[\"EqF64\"] = _BinaryenEqFloat64()] = \"EqF64\";\r\n BinaryOp[BinaryOp[\"NeF64\"] = _BinaryenNeFloat64()] = \"NeF64\";\r\n BinaryOp[BinaryOp[\"LtF64\"] = _BinaryenLtFloat64()] = \"LtF64\";\r\n BinaryOp[BinaryOp[\"LeF64\"] = _BinaryenLeFloat64()] = \"LeF64\";\r\n BinaryOp[BinaryOp[\"GtF64\"] = _BinaryenGtFloat64()] = \"GtF64\";\r\n BinaryOp[BinaryOp[\"GeF64\"] = _BinaryenGeFloat64()] = \"GeF64\";\r\n})(BinaryOp = exports.BinaryOp || (exports.BinaryOp = {}));\r\nvar HostOp;\r\n(function (HostOp) {\r\n HostOp[HostOp[\"PageSize\"] = _BinaryenPageSize()] = \"PageSize\";\r\n HostOp[HostOp[\"CurrentMemory\"] = _BinaryenCurrentMemory()] = \"CurrentMemory\";\r\n HostOp[HostOp[\"GrowMemory\"] = _BinaryenGrowMemory()] = \"GrowMemory\";\r\n HostOp[HostOp[\"HasFeature\"] = _BinaryenHasFeature()] = \"HasFeature\";\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n})(HostOp = exports.HostOp || (exports.HostOp = {}));\r\nvar AtomicRMWOp;\r\n(function (AtomicRMWOp) {\r\n AtomicRMWOp[AtomicRMWOp[\"Add\"] = _BinaryenAtomicRMWAdd()] = \"Add\";\r\n AtomicRMWOp[AtomicRMWOp[\"Sub\"] = _BinaryenAtomicRMWSub()] = \"Sub\";\r\n AtomicRMWOp[AtomicRMWOp[\"And\"] = _BinaryenAtomicRMWAnd()] = \"And\";\r\n AtomicRMWOp[AtomicRMWOp[\"Or\"] = _BinaryenAtomicRMWOr()] = \"Or\";\r\n AtomicRMWOp[AtomicRMWOp[\"Xor\"] = _BinaryenAtomicRMWXor()] = \"Xor\";\r\n AtomicRMWOp[AtomicRMWOp[\"Xchg\"] = _BinaryenAtomicRMWXchg()] = \"Xchg\";\r\n})(AtomicRMWOp = exports.AtomicRMWOp || (exports.AtomicRMWOp = {}));\r\nvar MemorySegment = /** @class */ (function () {\r\n function MemorySegment() {\r\n }\r\n MemorySegment.create = function (buffer, offset) {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n };\r\n return MemorySegment;\r\n}());\r\nexports.MemorySegment = MemorySegment;\r\nvar Module = /** @class */ (function () {\r\n function Module() {\r\n }\r\n // TODO: static readonly MAX_MEMORY_WASM64\r\n Module.create = function () {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.out = allocate_memory(16);\r\n return module;\r\n };\r\n Module.createFrom = function (buffer) {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.out = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n }\r\n finally {\r\n free_memory(changetype(cArr));\r\n }\r\n };\r\n // types\r\n Module.prototype.addFunctionType = function (name, result, paramTypes) {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes.length);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.getFunctionTypeBySignature = function (result, paramTypes) {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes.length);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n }\r\n };\r\n // constants\r\n Module.prototype.createI32 = function (value) {\r\n var out = this.out;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n };\r\n Module.prototype.createI64 = function (valueLow, valueHigh) {\r\n if (valueHigh === void 0) { valueHigh = 0; }\r\n var out = this.out;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n };\r\n Module.prototype.createF32 = function (value) {\r\n var out = this.out;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n };\r\n Module.prototype.createF64 = function (value) {\r\n var out = this.out;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n };\r\n // expressions\r\n Module.prototype.createUnary = function (op, expr) {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n };\r\n Module.prototype.createBinary = function (op, left, right) {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n };\r\n Module.prototype.createHost = function (op, name, operands) {\r\n if (name === void 0) { name = null; }\r\n if (operands === void 0) { operands = null; }\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? operands.length : 0);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.createGetLocal = function (index, type) {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n };\r\n Module.prototype.createTeeLocal = function (index, value) {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n };\r\n Module.prototype.createGetGlobal = function (name, type) {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.createLoad = function (bytes, signed, ptr, type, offset) {\r\n if (offset === void 0) { offset = 0; }\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n };\r\n Module.prototype.createStore = function (bytes, ptr, value, type, offset) {\r\n if (offset === void 0) { offset = 0; }\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n };\r\n Module.prototype.createAtomicLoad = function (bytes, ptr, type, offset) {\r\n if (offset === void 0) { offset = 0; }\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n };\r\n Module.prototype.createAtomicStore = function (bytes, ptr, value, type, offset) {\r\n if (offset === void 0) { offset = 0; }\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n };\r\n Module.prototype.createAtomicRMW = function (op, bytes, offset, ptr, value, type) {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n };\r\n Module.prototype.createAtomicCmpxchg = function (bytes, offset, ptr, expected, replacement, type) {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n };\r\n Module.prototype.createAtomicWait = function (ptr, expected, timeout, expectedType) {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n };\r\n Module.prototype.createAtomicWake = function (ptr, wakeCount) {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n };\r\n // statements\r\n Module.prototype.createSetLocal = function (index, value) {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n };\r\n Module.prototype.createSetGlobal = function (name, value) {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.createBlock = function (label, children, type) {\r\n if (type === void 0) { type = NativeType.None; }\r\n var cStr = allocString(label);\r\n var cArr = allocI32Array(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.createBreak = function (label, condition, value) {\r\n if (condition === void 0) { condition = 0; }\r\n if (value === void 0) { value = 0; }\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.createDrop = function (expression) {\r\n return _BinaryenDrop(this.ref, expression);\r\n };\r\n Module.prototype.createLoop = function (label, body) {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.createIf = function (condition, ifTrue, ifFalse) {\r\n if (ifFalse === void 0) { ifFalse = 0; }\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n };\r\n Module.prototype.createNop = function () {\r\n return _BinaryenNop(this.ref);\r\n };\r\n Module.prototype.createReturn = function (expression) {\r\n if (expression === void 0) { expression = 0; }\r\n return _BinaryenReturn(this.ref, expression);\r\n };\r\n Module.prototype.createSelect = function (ifTrue, ifFalse, condition) {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n };\r\n Module.prototype.createSwitch = function (names, defaultName, condition, value) {\r\n if (value === void 0) { value = 0; }\r\n var strs = new Array(names.length);\r\n for (var i = 0, k = names.length; i < k; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, k, cStr, condition, value);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (i = k - 1; i >= 0; --i)\r\n free_memory(strs[i]);\r\n }\r\n };\r\n Module.prototype.createCall = function (target, operands, returnType) {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.createCallImport = function (target, operands, returnType) {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.createUnreachable = function () {\r\n return _BinaryenUnreachable(this.ref);\r\n };\r\n // meta\r\n Module.prototype.addGlobal = function (name, type, mutable, initializer) {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.addFunction = function (name, type, varTypes, body) {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes.length, body);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.removeFunction = function (name) {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.addFunctionExport = function (internalName, externalName) {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n }\r\n finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n };\r\n Module.prototype.addTableExport = function (internalName, externalName) {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n }\r\n finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n };\r\n Module.prototype.addMemoryExport = function (internalName, externalName) {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n }\r\n finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n };\r\n Module.prototype.addGlobalExport = function (internalName, externalName) {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n }\r\n finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n };\r\n Module.prototype.removeExport = function (externalName) {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.addFunctionImport = function (internalName, externalModuleName, externalBaseName, functionType) {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n }\r\n finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n };\r\n Module.prototype.addTableImport = function (internalName, externalModuleName, externalBaseName) {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n }\r\n finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n };\r\n Module.prototype.addMemoryImport = function (internalName, externalModuleName, externalBaseName) {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n }\r\n finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n };\r\n Module.prototype.addGlobalImport = function (internalName, externalModuleName, externalBaseName, globalType) {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n }\r\n finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n };\r\n Module.prototype.removeImport = function (internalName) {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.setMemory = function (initial, maximum, segments, target, exportName) {\r\n if (exportName === void 0) { exportName = null; }\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var buffer = segments[i].buffer;\r\n var offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == compiler_1.Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n }\r\n finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (i = k - 1; i >= 0; --i)\r\n free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.setFunctionTable = function (funcs) {\r\n var cArr = allocI32Array(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n }\r\n };\r\n Module.prototype.setStart = function (func) {\r\n _BinaryenSetStart(this.ref, func);\r\n };\r\n Module.prototype.setOptimizeLevel = function (level) {\r\n if (level === void 0) { level = 2; }\r\n _BinaryenSetOptimizeLevel(level);\r\n };\r\n Module.prototype.setShrinkLevel = function (level) {\r\n if (level === void 0) { level = 1; }\r\n _BinaryenSetShrinkLevel(level);\r\n };\r\n Module.prototype.setDebugInfo = function (on) {\r\n if (on === void 0) { on = false; }\r\n _BinaryenSetDebugInfo(on);\r\n };\r\n Module.prototype.optimize = function (func) {\r\n if (func === void 0) { func = 0; }\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n }\r\n else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n };\r\n Module.prototype.runPasses = function (passes, func) {\r\n if (func === void 0) { func = 0; }\r\n var k = passes.length;\r\n var names = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, k);\r\n }\r\n else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, k);\r\n }\r\n }\r\n finally {\r\n free_memory(cArr);\r\n for (; i >= 0; --i)\r\n free_memory(names[i]);\r\n }\r\n };\r\n Module.prototype.validate = function () {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n };\r\n Module.prototype.interpret = function () {\r\n _BinaryenModuleInterpret(this.ref);\r\n };\r\n Module.prototype.toBinary = function (sourceMapUrl) {\r\n var out = this.out;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr = 0;\r\n var sourceMapPtr = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n var binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n var ret = new Binary();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n }\r\n finally {\r\n if (cStr)\r\n free_memory(cStr);\r\n if (binaryPtr)\r\n free_memory(binaryPtr);\r\n if (sourceMapPtr)\r\n free_memory(sourceMapPtr);\r\n }\r\n };\r\n Module.prototype.toText = function () {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n };\r\n Module.prototype.toAsmjs = function () {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n };\r\n Module.prototype.dispose = function () {\r\n if (!this.ref)\r\n return; // sic\r\n _BinaryenModuleDispose(this.ref);\r\n free_memory(this.out);\r\n };\r\n Module.prototype.createRelooper = function () {\r\n return Relooper.create(this);\r\n };\r\n Module.prototype.cloneExpression = function (expr, noSideEffects, maxDepth) {\r\n if (noSideEffects === void 0) { noSideEffects = false; }\r\n if (maxDepth === void 0) { maxDepth = i32.MAX_VALUE; }\r\n if (maxDepth < 0)\r\n return 0;\r\n maxDepth -= 1;\r\n var nested1, nested2;\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const:\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n case NativeType.I64:\r\n return this.createI64(_BinaryenConstGetValueI64Low(expr), _BinaryenConstGetValueI64High(expr));\r\n case NativeType.F32:\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n case NativeType.F64:\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n case ExpressionId.GetLocal:\r\n return _BinaryenGetLocal(this.ref, _BinaryenGetLocalGetIndex(expr), _BinaryenExpressionGetType(expr));\r\n case ExpressionId.GetGlobal:\r\n var globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName)\r\n break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n case ExpressionId.Load:\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref, _BinaryenLoadGetBytes(expr), _BinaryenLoadGetOffset(expr), _BinaryenExpressionGetType(expr), nested1)\r\n : _BinaryenLoad(this.ref, _BinaryenLoadGetBytes(expr), _BinaryenLoadIsSigned(expr) ? 1 : 0, _BinaryenLoadGetOffset(expr), _BinaryenLoadGetAlign(expr), _BinaryenExpressionGetType(expr), nested1);\r\n case ExpressionId.Unary:\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n case ExpressionId.Binary:\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n return 0;\r\n };\r\n // source map generation\r\n Module.prototype.addDebugInfoFile = function (name) {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n }\r\n finally {\r\n free_memory(cStr);\r\n }\r\n };\r\n Module.prototype.getDebugInfoFile = function (index) {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n };\r\n Module.prototype.setDebugLocation = function (func, expr, fileIndex, lineNumber, columnNumber) {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n };\r\n Module.MAX_MEMORY_WASM32 = 0xffff;\r\n return Module;\r\n}());\r\nexports.Module = Module;\r\nvar Relooper = /** @class */ (function () {\r\n function Relooper() {\r\n }\r\n Relooper.create = function (module) {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n };\r\n Relooper.createStub = function (module) {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = 0;\r\n return relooper;\r\n };\r\n Relooper.prototype.addBlock = function (code) {\r\n return _RelooperAddBlock(this.ref, code);\r\n };\r\n Relooper.prototype.addBranch = function (from, to, condition, code) {\r\n if (condition === void 0) { condition = 0; }\r\n if (code === void 0) { code = 0; }\r\n _RelooperAddBranch(from, to, condition, code);\r\n };\r\n Relooper.prototype.addBlockWithSwitch = function (code, condition) {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n };\r\n Relooper.prototype.addBranchForSwitch = function (from, to, indexes, code) {\r\n if (code === void 0) { code = 0; }\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n }\r\n finally {\r\n free_memory(cArr);\r\n }\r\n };\r\n Relooper.prototype.renderAndDispose = function (entry, labelHelper) {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n };\r\n return Relooper;\r\n}());\r\nexports.Relooper = Relooper;\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\nfunction allocU8Array(u8s) {\r\n if (!u8s)\r\n return 0;\r\n var ptr = allocate_memory(u8s.length);\r\n var idx = ptr;\r\n for (var i = 0, k = u8s.length; i < k; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\nfunction allocI32Array(i32s) {\r\n if (!i32s)\r\n return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (var i = 0, k = i32s.length; i < k; ++i) {\r\n var val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx, (val & 0xff));\r\n store(idx + 1, ((val >> 8) & 0xff));\r\n store(idx + 2, ((val >> 16) & 0xff));\r\n store(idx + 3, (val >>> 24));\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\nfunction stringLengthUTF8(str) {\r\n var len = 0;\r\n for (var i = 0, k = str.length; i < k; ++i) {\r\n var u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n }\r\n else if (u <= 0x7FF) {\r\n len += 2;\r\n }\r\n else if (u <= 0xFFFF) {\r\n len += 3;\r\n }\r\n else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n }\r\n else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n }\r\n else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\nfunction allocString(str) {\r\n if (str == null)\r\n return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n var idx = ptr;\r\n for (var i = 0, k = str.length; i < k; ++i) {\r\n var u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u);\r\n }\r\n else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6)));\r\n store(idx++, (0x80 | (u & 63)));\r\n }\r\n else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12)));\r\n store(idx++, (0x80 | ((u >>> 6) & 63)));\r\n store(idx++, (0x80 | (u & 63)));\r\n }\r\n else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18)));\r\n store(idx++, (0x80 | ((u >>> 12) & 63)));\r\n store(idx++, (0x80 | ((u >>> 6) & 63)));\r\n store(idx++, (0x80 | (u & 63)));\r\n }\r\n else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24)));\r\n store(idx++, (0x80 | ((u >>> 18) & 63)));\r\n store(idx++, (0x80 | ((u >>> 12) & 63)));\r\n store(idx++, (0x80 | ((u >>> 6) & 63)));\r\n store(idx++, (0x80 | (u & 63)));\r\n }\r\n else {\r\n store(idx++, (0xFC | (u >>> 30)));\r\n store(idx++, (0x80 | ((u >>> 24) & 63)));\r\n store(idx++, (0x80 | ((u >>> 18) & 63)));\r\n store(idx++, (0x80 | ((u >>> 12) & 63)));\r\n store(idx++, (0x80 | ((u >>> 6) & 63)));\r\n store(idx++, (0x80 | (u & 63)));\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\nfunction readInt(ptr) {\r\n return (load(ptr) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24));\r\n}\r\nexports.readInt = readInt;\r\nfunction readBuffer(ptr, length) {\r\n var ret = new Uint8Array(length);\r\n for (var i = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\nexports.readBuffer = readBuffer;\r\nfunction readString(ptr) {\r\n if (!ptr)\r\n return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp;\r\n var u1, u2, u3, u4, u5;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n }\r\n else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n }\r\n else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n }\r\n else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\nexports.readString = readString;\r\n/** Result structure of {@link Module#toBinary}. */\r\nvar Binary = /** @class */ (function () {\r\n function Binary() {\r\n }\r\n return Binary;\r\n}());\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar diagnosticMessages_generated_1 = __webpack_require__(8);\r\nvar charcode_1 = __webpack_require__(9);\r\nvar diagnosticMessages_generated_2 = __webpack_require__(8);\r\nexports.DiagnosticCode = diagnosticMessages_generated_2.DiagnosticCode;\r\nexports.diagnosticCodeToString = diagnosticMessages_generated_2.diagnosticCodeToString;\r\nvar DiagnosticCategory;\r\n(function (DiagnosticCategory) {\r\n DiagnosticCategory[DiagnosticCategory[\"INFO\"] = 0] = \"INFO\";\r\n DiagnosticCategory[DiagnosticCategory[\"WARNING\"] = 1] = \"WARNING\";\r\n DiagnosticCategory[DiagnosticCategory[\"ERROR\"] = 2] = \"ERROR\";\r\n})(DiagnosticCategory = exports.DiagnosticCategory || (exports.DiagnosticCategory = {}));\r\nfunction diagnosticCategoryToString(category) {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: return \"\";\r\n }\r\n}\r\nexports.diagnosticCategoryToString = diagnosticCategoryToString;\r\nvar colorBlue = \"\\u001b[93m\";\r\nvar colorYellow = \"\\u001b[93m\";\r\nvar colorRed = \"\\u001b[91m\";\r\nvar colorReset = \"\\u001b[0m\";\r\nfunction diagnosticCategoryToColor(category) {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return colorBlue;\r\n case DiagnosticCategory.WARNING: return colorYellow;\r\n case DiagnosticCategory.ERROR: return colorRed;\r\n default: return \"\";\r\n }\r\n}\r\nexports.diagnosticCategoryToColor = diagnosticCategoryToColor;\r\nvar DiagnosticMessage = /** @class */ (function () {\r\n function DiagnosticMessage(code, category, message) {\r\n this.range = null;\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n DiagnosticMessage.create = function (code, category, arg0, arg1, arg2) {\r\n if (arg0 === void 0) { arg0 = null; }\r\n if (arg1 === void 0) { arg1 = null; }\r\n if (arg2 === void 0) { arg2 = null; }\r\n var message = diagnosticMessages_generated_1.diagnosticCodeToString(code);\r\n if (arg0 != null)\r\n message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null)\r\n message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null)\r\n message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n };\r\n DiagnosticMessage.createInfo = function (code, arg0, arg1) {\r\n if (arg0 === void 0) { arg0 = null; }\r\n if (arg1 === void 0) { arg1 = null; }\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n };\r\n DiagnosticMessage.createWarning = function (code, arg0, arg1) {\r\n if (arg0 === void 0) { arg0 = null; }\r\n if (arg1 === void 0) { arg1 = null; }\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n };\r\n DiagnosticMessage.createError = function (code, arg0, arg1) {\r\n if (arg0 === void 0) { arg0 = null; }\r\n if (arg1 === void 0) { arg1 = null; }\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n };\r\n DiagnosticMessage.prototype.withRange = function (range) {\r\n this.range = range;\r\n return this;\r\n };\r\n DiagnosticMessage.prototype.toString = function () {\r\n if (this.range) {\r\n return (diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \" @ \" +\r\n this.range.start.toString(10) +\r\n \",\" +\r\n this.range.end.toString(10));\r\n }\r\n return (diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message);\r\n };\r\n return DiagnosticMessage;\r\n}());\r\nexports.DiagnosticMessage = DiagnosticMessage;\r\nfunction formatDiagnosticMessage(message, useColors, showContext) {\r\n if (useColors === void 0) { useColors = false; }\r\n if (showContext === void 0) { showContext = false; }\r\n // format context first (uses same string builder)\r\n var context = \"\";\r\n if (message.range && showContext) {\r\n context = formatDiagnosticContext(message.range, useColors);\r\n }\r\n // general information\r\n var sb = [];\r\n if (useColors)\r\n sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors)\r\n sb.push(colorReset);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n // range information if available\r\n if (message.range) {\r\n var range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(context);\r\n }\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\nexports.formatDiagnosticMessage = formatDiagnosticMessage;\r\nfunction formatDiagnosticContext(range, useColors) {\r\n if (useColors === void 0) { useColors = false; }\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !charcode_1.isLineBreak(text.charCodeAt(start - 1))) {\r\n start--;\r\n }\r\n while (end < len && !charcode_1.isLineBreak(text.charCodeAt(end))) {\r\n end++;\r\n }\r\n var sb = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors)\r\n sb.push(colorRed);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n }\r\n else {\r\n while (start++ < range.end) {\r\n sb.push(\"~\");\r\n }\r\n }\r\n if (useColors)\r\n sb.push(colorReset);\r\n return sb.join(\"\");\r\n}\r\nexports.formatDiagnosticContext = formatDiagnosticContext;\r\nvar DiagnosticEmitter = /** @class */ (function () {\r\n // silentDiagnostics: bool = false;\r\n function DiagnosticEmitter(diagnostics) {\r\n if (diagnostics === void 0) { diagnostics = null; }\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n DiagnosticEmitter.prototype.emitDiagnostic = function (code, category, range, arg0, arg1, arg2) {\r\n if (arg0 === void 0) { arg0 = null; }\r\n if (arg1 === void 0) { arg1 = null; }\r\n if (arg2 === void 0) { arg2 = null; }\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n };\r\n DiagnosticEmitter.prototype.error = function (code, range, arg0, arg1, arg2) {\r\n if (arg0 === void 0) { arg0 = null; }\r\n if (arg1 === void 0) { arg1 = null; }\r\n if (arg2 === void 0) { arg2 = null; }\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n };\r\n DiagnosticEmitter.prototype.info = function (code, range, arg0, arg1, arg2) {\r\n if (arg0 === void 0) { arg0 = null; }\r\n if (arg1 === void 0) { arg1 = null; }\r\n if (arg2 === void 0) { arg2 = null; }\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n };\r\n DiagnosticEmitter.prototype.warning = function (code, range, arg0, arg1, arg2) {\r\n if (arg0 === void 0) { arg0 = null; }\r\n if (arg1 === void 0) { arg1 = null; }\r\n if (arg2 === void 0) { arg2 = null; }\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n };\r\n return DiagnosticEmitter;\r\n}());\r\nexports.DiagnosticEmitter = DiagnosticEmitter;\r\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __values = (this && this.__values) || function (o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n};\r\nvar __read = (this && this.__read) || function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar diagnostics_1 = __webpack_require__(1);\r\nvar types_1 = __webpack_require__(5);\r\nvar ast_1 = __webpack_require__(6);\r\nvar module_1 = __webpack_require__(0);\r\n/** Path delimiter inserted between file system levels. */\r\nexports.PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexports.PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexports.GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexports.SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexports.INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexports.STATIC_DELIMITER = \".\";\r\n/** Substitution used to indicate a library directory. */\r\nexports.LIBRARY_SUBST = \"(lib)\";\r\n/** Library directory prefix. */\r\nexports.LIBRARY_PREFIX = exports.LIBRARY_SUBST + exports.PATH_DELIMITER;\r\nvar QueuedExport = /** @class */ (function () {\r\n function QueuedExport() {\r\n }\r\n return QueuedExport;\r\n}());\r\nvar QueuedImport = /** @class */ (function () {\r\n function QueuedImport() {\r\n }\r\n return QueuedImport;\r\n}());\r\nvar noTypesYet = new Map();\r\n/** Represents an AssemblyScript program. */\r\nvar Program = /** @class */ (function (_super) {\r\n __extends(Program, _super);\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n function Program(diagnostics) {\r\n if (diagnostics === void 0) { diagnostics = null; }\r\n var _this = _super.call(this, diagnostics) || this;\r\n /** Diagnostic offset used where repeatedly obtaining the next diagnostic. */\r\n _this.diagnosticsOffset = 0;\r\n /** Elements by internal name. */\r\n _this.elements = new Map();\r\n /** Types by internal name. */\r\n _this.types = noTypesYet;\r\n /** Declared type aliases. */\r\n _this.typeAliases = new Map();\r\n /** Exports of individual files by exported name. Not global exports. */\r\n _this.exports = new Map();\r\n _this.sources = [];\r\n return _this;\r\n }\r\n /** Initializes the program and its elements prior to compilation. */\r\n Program.prototype.initialize = function (options) {\r\n this.options = options;\r\n this.types = new Map([\r\n [\"i8\", types_1.Type.i8],\r\n [\"i16\", types_1.Type.i16],\r\n [\"i32\", types_1.Type.i32],\r\n [\"i64\", types_1.Type.i64],\r\n [\"isize\", options.isizeType],\r\n [\"u8\", types_1.Type.u8],\r\n [\"u16\", types_1.Type.u16],\r\n [\"u32\", types_1.Type.u32],\r\n [\"u64\", types_1.Type.u64],\r\n [\"usize\", options.usizeType],\r\n [\"bool\", types_1.Type.bool],\r\n [\"f32\", types_1.Type.f32],\r\n [\"f64\", types_1.Type.f64],\r\n [\"void\", types_1.Type.void],\r\n [\"number\", types_1.Type.f64],\r\n [\"boolean\", types_1.Type.bool]\r\n ]);\r\n var queuedExports = new Map();\r\n var queuedImports = new Array();\r\n var queuedDerivedClasses = new Array();\r\n // build initial lookup maps of internal names to declarations\r\n for (var i = 0, k = this.sources.length; i < k; ++i) {\r\n var source = this.sources[i];\r\n var statements = source.statements;\r\n for (var j = 0, l = statements.length; j < l; ++j) {\r\n var statement = statements[j];\r\n switch (statement.kind) {\r\n case ast_1.NodeKind.CLASSDECLARATION:\r\n this.initializeClass(statement, queuedDerivedClasses);\r\n break;\r\n case ast_1.NodeKind.ENUMDECLARATION:\r\n this.initializeEnum(statement);\r\n break;\r\n case ast_1.NodeKind.EXPORT:\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n case ast_1.NodeKind.FUNCTIONDECLARATION:\r\n this.initializeFunction(statement);\r\n break;\r\n case ast_1.NodeKind.IMPORT:\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n case ast_1.NodeKind.INTERFACEDECLARATION:\r\n this.initializeInterface(statement);\r\n break;\r\n case ast_1.NodeKind.NAMESPACEDECLARATION:\r\n this.initializeNamespace(statement, queuedDerivedClasses);\r\n break;\r\n case ast_1.NodeKind.TYPEDECLARATION:\r\n this.initializeTypeAlias(statement);\r\n break;\r\n case ast_1.NodeKind.VARIABLE:\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n var element;\r\n // queued imports should be resolvable now through traversing exports and\r\n // queued exports\r\n for (i = 0; i < queuedImports.length;) {\r\n var queuedImport = queuedImports[i];\r\n element = this.tryResolveImport(queuedImport.referencedName, queuedExports);\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n }\r\n else {\r\n element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports);\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Module_0_has_no_exported_member_1, queuedImport.declaration.range, queuedImport.declaration.parent.path.value, queuedImport.declaration.externalName.text);\r\n ++i;\r\n }\r\n }\r\n }\r\n try {\r\n // queued exports should be resolvable now that imports are finalized\r\n for (var queuedExports_1 = __values(queuedExports), queuedExports_1_1 = queuedExports_1.next(); !queuedExports_1_1.done; queuedExports_1_1 = queuedExports_1.next()) {\r\n var _a = __read(queuedExports_1_1.value, 2), exportName = _a[0], queuedExport = _a[1];\r\n var currentExport = queuedExport; // nullable below\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.exports.get(currentExport.referencedName)) {\r\n this.setExportAndCheckLibrary(exportName, element, currentExport.member.externalName);\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.referencedName);\r\n if (!currentExport) {\r\n this.error(diagnostics_1.DiagnosticCode.Module_0_has_no_exported_member_1, queuedExport.member.externalName.range, queuedExport.member.parent.path.value, queuedExport.member.externalName.text);\r\n }\r\n }\r\n else {\r\n if (\r\n // normal export\r\n (element = this.elements.get(currentExport.referencedName)) ||\r\n // library re-export\r\n (element = this.elements.get(currentExport.member.name.text))) {\r\n this.setExportAndCheckLibrary(exportName, element, currentExport.member.externalName);\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_find_name_0, queuedExport.member.range, queuedExport.member.name.text);\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (queuedExports_1_1 && !queuedExports_1_1.done && (_b = queuedExports_1.return)) _b.call(queuedExports_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n // resolve base prototypes of derived classes\r\n for (i = 0, k = queuedDerivedClasses.length; i < k; ++i) {\r\n var derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n var derivedType = assert(derivedDeclaration.extendsType);\r\n var resolved = this.resolveIdentifier(derivedType.name, null);\r\n if (resolved) {\r\n if (resolved.element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(diagnostics_1.DiagnosticCode.A_class_may_only_extend_another_class, derivedType.range);\r\n continue;\r\n }\r\n queuedDerivedClasses[i].basePrototype = resolved.element;\r\n }\r\n }\r\n var e_1, _b;\r\n };\r\n /** Tries to resolve an import by traversing exports and queued exports. */\r\n Program.prototype.tryResolveImport = function (referencedName, queuedExports) {\r\n var element;\r\n do {\r\n if (element = this.exports.get(referencedName)) {\r\n return element;\r\n }\r\n var queuedExport = queuedExports.get(referencedName);\r\n if (!queuedExport)\r\n return null;\r\n if (queuedExport.isReExport) {\r\n referencedName = queuedExport.referencedName;\r\n continue;\r\n }\r\n return this.elements.get(queuedExport.referencedName);\r\n } while (true);\r\n };\r\n Program.prototype.checkInternalDecorators = function (element, declaration) {\r\n var isBuiltin = ast_1.hasDecorator(\"builtin\", declaration.decorators);\r\n if (isBuiltin) {\r\n element.set(ElementFlags.BUILTIN);\r\n }\r\n if (ast_1.hasDecorator(\"global\", declaration.decorators) ||\r\n (declaration.range.source.isLibrary &&\r\n element.is(ElementFlags.EXPORTED) &&\r\n (assert(declaration.parent).kind == ast_1.NodeKind.SOURCE ||\r\n declaration.parent.kind == ast_1.NodeKind.VARIABLE &&\r\n assert(declaration.parent.parent).kind == ast_1.NodeKind.SOURCE))) {\r\n element.set(ElementFlags.GLOBAL);\r\n if (this.elements.has(declaration.name.text)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, element.internalName);\r\n }\r\n else {\r\n this.elements.set(declaration.name.text, element);\r\n this.exports.set(declaration.name.text, element);\r\n if (isBuiltin) {\r\n element.internalName = declaration.name.text;\r\n }\r\n }\r\n }\r\n };\r\n Program.prototype.initializeClass = function (declaration, queuedDerivedClasses, namespace) {\r\n if (namespace === void 0) { namespace = null; }\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n var prototype = new ClassPrototype(this, declaration.name.text, internalName, declaration);\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n this.checkInternalDecorators(prototype, declaration);\r\n if (ast_1.hasDecorator(\"unmanaged\", declaration.decorators)) {\r\n prototype.isUnmanaged = true;\r\n if (declaration.implementsTypes && declaration.implementsTypes.length) {\r\n this.error(diagnostics_1.DiagnosticCode.Structs_cannot_implement_interfaces, ast_1.Range.join(declaration.name.range, declaration.implementsTypes[declaration.implementsTypes.length - 1]\r\n .range));\r\n }\r\n }\r\n else if (declaration.implementsTypes.length) {\r\n throw new Error(\"not implemented\");\r\n }\r\n // remember classes that extend another one\r\n if (declaration.extendsType) {\r\n queuedDerivedClasses.push(prototype);\r\n }\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, prototype);\r\n // otherwise add to file-level exports if exported\r\n }\r\n else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case ast_1.NodeKind.FIELDDECLARATION:\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n case ast_1.NodeKind.METHODDECLARATION:\r\n var isGetter = ast_1.hasModifier(ast_1.ModifierKind.GET, memberDeclaration.modifiers);\r\n if (isGetter ||\r\n ast_1.hasModifier(ast_1.ModifierKind.SET, memberDeclaration.modifiers)) {\r\n this.initializeAccessor(memberDeclaration, prototype, isGetter);\r\n }\r\n else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n default:\r\n throw new Error(\"class member expected\");\r\n }\r\n }\r\n // check and possibly register string type\r\n if (prototype.is(ElementFlags.GLOBAL) &&\r\n declaration.name.text == \"String\") {\r\n if (!this.types.has(\"string\")) {\r\n var instance = prototype.resolve(null);\r\n if (instance) {\r\n this.types.set(\"string\", instance.type);\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, declaration.programLevelInternalName);\r\n }\r\n }\r\n };\r\n Program.prototype.initializeField = function (declaration, classPrototype) {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n // static fields become global variables\r\n if (ast_1.hasModifier(ast_1.ModifierKind.STATIC, declaration.modifiers)) {\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n classPrototype.members = new Map();\r\n }\r\n var staticField = new Global(this, name, internalName, declaration, types_1.Type.void);\r\n classPrototype.members.set(name, staticField);\r\n this.elements.set(internalName, staticField);\r\n // instance fields are remembered until resolved\r\n }\r\n else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n var instanceField = new FieldPrototype(classPrototype, name, internalName, declaration);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n };\r\n Program.prototype.initializeMethod = function (declaration, classPrototype) {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype = null;\r\n // static methods become global functions\r\n if (ast_1.hasModifier(ast_1.ModifierKind.STATIC, declaration.modifiers)) {\r\n assert(declaration.name.kind != ast_1.NodeKind.CONSTRUCTOR);\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(this, name, internalName, declaration, null);\r\n classPrototype.members.set(name, prototype);\r\n this.elements.set(internalName, prototype);\r\n // instance methods are remembered until resolved\r\n }\r\n else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(this, name, internalName, declaration, classPrototype);\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == ast_1.NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(diagnostics_1.DiagnosticCode.Multiple_constructor_implementations_are_not_allowed, declaration.name.range);\r\n }\r\n else {\r\n prototype.set(ElementFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n }\r\n else {\r\n classPrototype.instanceMembers.set(name, prototype);\r\n }\r\n }\r\n this.checkOperators(declaration.decorators, prototype, classPrototype);\r\n };\r\n Program.prototype.checkOperators = function (decorators, prototype, classPrototype) {\r\n // handle operator annotations. operators are either instance methods taking\r\n // a second argument of the instance's type or static methods taking two\r\n // arguments of the instance's type. return values vary depending on the\r\n // operation.\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n var decorator = decorators[i];\r\n if (decorator.decoratorKind == 2 /* OPERATOR */) {\r\n if (!prototype) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, decorator.range);\r\n continue;\r\n }\r\n var numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n var firstArg = decorator.arguments[0];\r\n if (firstArg.kind == ast_1.NodeKind.LITERAL &&\r\n firstArg.literalKind == 2 /* STRING */) {\r\n switch (firstArg.value) {\r\n case \"[]\":\r\n classPrototype.fnIndexedGet = prototype.simpleName;\r\n break;\r\n case \"[]=\":\r\n classPrototype.fnIndexedSet = prototype.simpleName;\r\n break;\r\n case \"+\":\r\n classPrototype.fnConcat = prototype.simpleName;\r\n break;\r\n case \"==\":\r\n classPrototype.fnEquals = prototype.simpleName;\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, firstArg.range);\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.String_literal_expected, firstArg.range);\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, decorator.range, \"1\", numArgs.toString(0));\r\n }\r\n }\r\n else if (decorator.decoratorKind != 0 /* CUSTOM */) {\r\n // methods support built-in @operator only\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, decorator.range);\r\n }\r\n }\r\n }\r\n };\r\n Program.prototype.initializeAccessor = function (declaration, classPrototype, isGetter) {\r\n var propertyName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elements.get(internalPropertyName);\r\n if (propertyElement) {\r\n if (propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? propertyElement.getterPrototype\r\n : propertyElement.setterPrototype)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalPropertyName);\r\n return;\r\n }\r\n }\r\n else {\r\n propertyElement = new Property(this, propertyName, internalPropertyName, classPrototype);\r\n }\r\n var name = (isGetter ? exports.GETTER_PREFIX : exports.SETTER_PREFIX) + propertyName;\r\n // static accessors become global functions\r\n if (ast_1.hasModifier(ast_1.ModifierKind.STATIC, declaration.modifiers)) {\r\n var staticName = classPrototype.internalName + exports.STATIC_DELIMITER + name;\r\n if (this.elements.has(staticName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, staticName);\r\n return;\r\n }\r\n var staticPrototype = new FunctionPrototype(this, name, staticName, declaration, null);\r\n if (isGetter) {\r\n propertyElement.getterPrototype = staticPrototype;\r\n }\r\n else {\r\n propertyElement.setterPrototype = staticPrototype;\r\n }\r\n if (!classPrototype.members) {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(propertyName, propertyElement); // check above\r\n this.elements.set(internalPropertyName, propertyElement);\r\n // instance accessors are remembered until resolved\r\n }\r\n else {\r\n var instanceName = classPrototype.internalName + exports.INSTANCE_DELIMITER + name;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalPropertyName);\r\n return;\r\n }\r\n }\r\n else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n var instancePrototype = new FunctionPrototype(this, name, instanceName, declaration, classPrototype);\r\n if (isGetter) {\r\n propertyElement.getterPrototype = instancePrototype;\r\n }\r\n else {\r\n propertyElement.setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(name, propertyElement);\r\n this.elements.set(internalPropertyName, propertyElement);\r\n }\r\n };\r\n Program.prototype.initializeEnum = function (declaration, namespace) {\r\n if (namespace === void 0) { namespace = null; }\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n var enm = new Enum(this, declaration.name.text, internalName, declaration);\r\n enm.namespace = namespace;\r\n this.elements.set(internalName, enm);\r\n this.checkInternalDecorators(enm, declaration);\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, enm);\r\n }\r\n else if (enm.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n this.exports.set(internalName, enm);\r\n }\r\n var values = declaration.values;\r\n for (var i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], enm);\r\n }\r\n };\r\n Program.prototype.initializeEnumValue = function (declaration, enm) {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n };\r\n Program.prototype.initializeExports = function (statement, queuedExports) {\r\n var members = statement.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n };\r\n Program.prototype.setExportAndCheckLibrary = function (name, element, identifier) {\r\n this.exports.set(name, element);\r\n if (identifier.range.source.isLibrary) {\r\n if (this.elements.has(identifier.text)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, identifier.range, identifier.text);\r\n }\r\n else {\r\n element.internalName = identifier.text;\r\n this.elements.set(identifier.text, element);\r\n }\r\n }\r\n };\r\n Program.prototype.initializeExport = function (member, internalPath, queuedExports) {\r\n var externalName = member.range.source.internalPath + exports.PATH_DELIMITER + member.externalName.text;\r\n if (this.exports.has(externalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, member.externalName.range, externalName);\r\n return;\r\n }\r\n var referencedName;\r\n var referencedElement;\r\n var queuedExport;\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + exports.PATH_DELIMITER + member.name.text;\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elements.get(referencedName)) {\r\n this.setExportAndCheckLibrary(externalName, referencedElement, member.externalName);\r\n return;\r\n }\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, member.externalName.range, externalName);\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.referencedName = referencedName; // -> internal name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n // export external element\r\n }\r\n else {\r\n referencedName = internalPath + exports.PATH_DELIMITER + member.name.text;\r\n // resolve right away if the export exists\r\n referencedElement = this.elements.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(externalName, referencedElement, member.externalName);\r\n return;\r\n }\r\n // walk already known queued exports\r\n var seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.exports.get(queuedExport.referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(externalName, referencedElement, member.externalName);\r\n return;\r\n }\r\n referencedName = queuedExport.referencedName;\r\n if (seen.has(queuedExport))\r\n break;\r\n seen.add(queuedExport);\r\n }\r\n else {\r\n referencedElement = this.elements.get(queuedExport.referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(externalName, referencedElement, member.externalName);\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, member.externalName.range, externalName);\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.referencedName = referencedName; // -> export name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n };\r\n Program.prototype.initializeFunction = function (declaration, namespace) {\r\n if (namespace === void 0) { namespace = null; }\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n var prototype = new FunctionPrototype(this, declaration.name.text, internalName, declaration, null);\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n this.checkInternalDecorators(prototype, declaration);\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, prototype);\r\n }\r\n else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n };\r\n Program.prototype.initializeImports = function (statement, queuedExports, queuedImports) {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(declarations[i], statement.internalPath, queuedExports, queuedImports);\r\n }\r\n }\r\n else if (statement.namespaceName) {\r\n var internalName = (statement.range.source.internalPath +\r\n exports.PATH_DELIMITER +\r\n statement.namespaceName.text);\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, statement.namespaceName.range, internalName);\r\n return;\r\n }\r\n this.error(// TODO\r\n diagnostics_1.DiagnosticCode.Operation_not_supported, statement.range);\r\n }\r\n };\r\n Program.prototype.initializeImport = function (declaration, internalPath, queuedExports, queuedImports) {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n var referencedName = internalPath + exports.PATH_DELIMITER + declaration.externalName.text;\r\n // resolve right away if the exact export exists\r\n var element;\r\n if (element = this.exports.get(referencedName)) {\r\n this.elements.set(internalName, element);\r\n return;\r\n }\r\n // otherwise queue it\r\n var indexPart = exports.PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.internalName = internalName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text);\r\n }\r\n else {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (internalPath +\r\n indexPart +\r\n exports.PATH_DELIMITER +\r\n declaration.externalName.text);\r\n }\r\n queuedImport.declaration = declaration;\r\n queuedImports.push(queuedImport);\r\n };\r\n Program.prototype.initializeInterface = function (declaration, namespace) {\r\n if (namespace === void 0) { namespace = null; }\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n var prototype = new InterfacePrototype(this, declaration.name.text, internalName, declaration);\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n this.checkInternalDecorators(prototype, declaration);\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n }\r\n else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case ast_1.NodeKind.FIELDDECLARATION:\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n case ast_1.NodeKind.METHODDECLARATION:\r\n var isGetter = ast_1.hasModifier(ast_1.ModifierKind.GET, memberDeclaration.modifiers);\r\n if (isGetter || ast_1.hasModifier(ast_1.ModifierKind.SET, memberDeclaration.modifiers)) {\r\n this.initializeAccessor(memberDeclaration, prototype, isGetter);\r\n }\r\n else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n default:\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n };\r\n Program.prototype.initializeNamespace = function (declaration, queuedExtendingClasses, parentNamespace) {\r\n if (parentNamespace === void 0) { parentNamespace = null; }\r\n var internalName = declaration.fileLevelInternalName;\r\n var namespace = this.elements.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, declaration.name.text, internalName, declaration);\r\n namespace.namespace = parentNamespace;\r\n this.elements.set(internalName, namespace);\r\n this.checkInternalDecorators(namespace, declaration);\r\n }\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(declaration.name.text)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n }\r\n else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(declaration.name.text, namespace);\r\n }\r\n else if (namespace.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, declaration.name.range, internalName);\r\n return;\r\n }\r\n this.exports.set(internalName, namespace);\r\n }\r\n var members = declaration.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case ast_1.NodeKind.CLASSDECLARATION:\r\n this.initializeClass(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n case ast_1.NodeKind.ENUMDECLARATION:\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n case ast_1.NodeKind.FUNCTIONDECLARATION:\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n case ast_1.NodeKind.INTERFACEDECLARATION:\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n case ast_1.NodeKind.NAMESPACEDECLARATION:\r\n this.initializeNamespace(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n case ast_1.NodeKind.TYPEDECLARATION:\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, members[i].range);\r\n break;\r\n case ast_1.NodeKind.VARIABLE:\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n default:\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n };\r\n Program.prototype.initializeTypeAlias = function (declaration, namespace) {\r\n if (namespace === void 0) { namespace = null; }\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.types.has(name) || this.typeAliases.has(name)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, name);\r\n return;\r\n }\r\n this.typeAliases.set(name, declaration.alias);\r\n };\r\n Program.prototype.initializeVariables = function (statement, namespace) {\r\n if (namespace === void 0) { namespace = null; }\r\n var declarations = statement.declarations;\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n continue;\r\n }\r\n var global = new Global(this, declaration.name.text, internalName, declaration, types_1.Type.void // resolved later on\r\n );\r\n global.namespace = namespace;\r\n this.elements.set(internalName, global);\r\n this.checkInternalDecorators(global, declaration);\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n continue;\r\n }\r\n }\r\n else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, global);\r\n }\r\n else if (global.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, internalName);\r\n }\r\n else {\r\n this.exports.set(internalName, global);\r\n }\r\n }\r\n }\r\n };\r\n /** Resolves a {@link TypeNode} to a concrete {@link Type}. */\r\n Program.prototype.resolveType = function (node, contextualTypeArguments, reportNotFound) {\r\n if (contextualTypeArguments === void 0) { contextualTypeArguments = null; }\r\n if (reportNotFound === void 0) { reportNotFound = true; }\r\n var globalName = node.name.text;\r\n var localName = node.range.source.internalPath + exports.PATH_DELIMITER + node.name.text;\r\n var element;\r\n // check file-global / program-global element\r\n if ((element = this.elements.get(localName)) || (element = this.elements.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n var instance = element.resolveInclTypeArguments(node.typeArguments, contextualTypeArguments, null); // reports\r\n return instance ? instance.type : null;\r\n }\r\n }\r\n // resolve parameters\r\n var k = node.typeArguments.length;\r\n var paramTypes = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var paramType = this.resolveType(// reports\r\n node.typeArguments[i], contextualTypeArguments, reportNotFound);\r\n if (!paramType)\r\n return null;\r\n paramTypes[i] = paramType;\r\n }\r\n if (k) {\r\n var instanceKey = types_1.typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n }\r\n else if (contextualTypeArguments) {\r\n var placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType)\r\n return placeholderType;\r\n }\r\n var type;\r\n // check file-global / program-global type\r\n if ((type = this.types.get(localName)) || (type = this.types.get(globalName))) {\r\n return type;\r\n }\r\n // check type alias\r\n var alias = this.typeAliases.get(globalName);\r\n if (alias && (type = this.resolveType(alias, null, reportNotFound))) {\r\n return type;\r\n }\r\n if (reportNotFound) {\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_find_name_0, node.name.range, globalName);\r\n }\r\n return null;\r\n };\r\n /** Resolves an array of type parameters to concrete types. */\r\n Program.prototype.resolveTypeArguments = function (typeParameters, typeArgumentNodes, contextualTypeArguments, alternativeReportNode) {\r\n if (contextualTypeArguments === void 0) { contextualTypeArguments = null; }\r\n if (alternativeReportNode === void 0) { alternativeReportNode = null; }\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, ast_1.Range.join(typeArgumentNodes[0].range, typeArgumentNodes[argumentCount - 1].range), parameterCount.toString(10), argumentCount.toString(10));\r\n }\r\n else if (alternativeReportNode) {\r\n this.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\");\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (var i = 0; i < parameterCount; ++i) {\r\n var type = this.resolveType(// reports\r\n typeArgumentNodes[i], contextualTypeArguments, true);\r\n if (!type)\r\n return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n };\r\n /** Resolves an identifier to the element it refers to. */\r\n Program.prototype.resolveIdentifier = function (identifier, contextualFunction, contextualEnum) {\r\n if (contextualEnum === void 0) { contextualEnum = null; }\r\n var name = identifier.text;\r\n var element;\r\n var namespace;\r\n // check siblings\r\n if (contextualEnum) {\r\n if (contextualEnum.members &&\r\n (element = contextualEnum.members.get(name)) &&\r\n element.kind == ElementKind.ENUMVALUE) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n }\r\n else if (contextualFunction) {\r\n // check locals\r\n if (element = contextualFunction.flow.getScopedLocal(name)) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.namespace) {\r\n do {\r\n if (element = this.elements.get(namespace.internalName + exports.STATIC_DELIMITER + name)) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n } while (namespace = namespace.namespace);\r\n }\r\n }\r\n // search current file\r\n if (element = this.elements.get(identifier.range.source.internalPath + exports.PATH_DELIMITER + name)) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n // search global scope\r\n if (element = this.elements.get(name)) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_find_name_0, identifier.range, name);\r\n return null;\r\n };\r\n /** Resolves a property access to the element it refers to. */\r\n Program.prototype.resolvePropertyAccess = function (propertyAccess, contextualFunction) {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n resolvedElement = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!resolvedElement)\r\n return null;\r\n var target = resolvedElement.element;\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n var targetType;\r\n var member;\r\n // Resolve variable-likes to their class type first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n if (!(targetType = target.type).classType) {\r\n this.error(diagnostics_1.DiagnosticCode.Property_0_does_not_exist_on_type_1, propertyAccess.property.range, propertyName, targetType.toString());\r\n return null;\r\n }\r\n target = targetType.classType;\r\n break;\r\n case ElementKind.PROPERTY:\r\n var getter = assert(target.getterPrototype).resolve(); // reports\r\n if (!getter)\r\n return null;\r\n if (!(targetType = getter.returnType).classType) {\r\n this.error(diagnostics_1.DiagnosticCode.Property_0_does_not_exist_on_type_1, propertyAccess.property.range, propertyName, targetType.toString());\r\n return null;\r\n }\r\n target = targetType.classType;\r\n break;\r\n }\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS:\r\n do {\r\n if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n // check inherited static members on the base prototype while target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if (target.basePrototype) {\r\n target = target.basePrototype;\r\n }\r\n else {\r\n break;\r\n }\r\n // or inherited instance members on the cbase class while target is a class instance\r\n }\r\n else if (target.kind == ElementKind.CLASS) {\r\n if (target.base) {\r\n target = target.base;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n default:// enums or other namespace-like elements\r\n if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n break;\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Property_0_does_not_exist_on_type_1, propertyAccess.property.range, propertyName, target.internalName);\r\n return null;\r\n };\r\n Program.prototype.resolveElementAccess = function (elementAccess, contextualFunction) {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = elementAccess.expression;\r\n resolvedElement = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!resolvedElement)\r\n return null;\r\n var target = resolvedElement.element;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n var type = target.type;\r\n if (type.classType) {\r\n var indexedGetName = (target = type.classType).prototype.fnIndexedGet;\r\n var indexedGet;\r\n if (indexedGetName != null &&\r\n target.members &&\r\n (indexedGet = target.members.get(indexedGetName)) &&\r\n indexedGet.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n return resolvedElement.set(indexedGet).withTarget(type.classType, targetExpression);\r\n }\r\n }\r\n break;\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Index_signature_is_missing_in_type_0, targetExpression.range, target.internalName);\r\n return null;\r\n };\r\n Program.prototype.resolveExpression = function (expression, contextualFunction) {\r\n var classType;\r\n while (expression.kind == ast_1.NodeKind.PARENTHESIZED) {\r\n expression = expression.expression;\r\n }\r\n switch (expression.kind) {\r\n case ast_1.NodeKind.ASSERTION:\r\n var type = this.resolveType(expression.toType); // reports\r\n if (type && (classType = type.classType)) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n return null;\r\n case ast_1.NodeKind.BINARY:\r\n // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n case ast_1.NodeKind.THIS:// -> Class\r\n if (classType = contextualFunction.instanceMethodOf) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n this.error(diagnostics_1.DiagnosticCode._this_cannot_be_referenced_in_current_location, expression.range);\r\n return null;\r\n case ast_1.NodeKind.SUPER:// -> Class\r\n if ((classType = contextualFunction.instanceMethodOf) && (classType = classType.base)) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n this.error(diagnostics_1.DiagnosticCode._super_can_only_be_referenced_in_a_derived_class, expression.range);\r\n return null;\r\n case ast_1.NodeKind.IDENTIFIER:\r\n return this.resolveIdentifier(expression, contextualFunction);\r\n case ast_1.NodeKind.PROPERTYACCESS:\r\n return this.resolvePropertyAccess(expression, contextualFunction);\r\n case ast_1.NodeKind.ELEMENTACCESS:\r\n return this.resolveElementAccess(expression, contextualFunction);\r\n case ast_1.NodeKind.CALL:\r\n var resolved = this.resolveExpression(expression.expression, contextualFunction);\r\n if (resolved) {\r\n var element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = element.resolveInclTypeArguments(expression.typeArguments, null, expression);\r\n if (instance && instance.returnType.classType) {\r\n if (!resolvedElement)\r\n resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(instance.returnType.classType);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return null;\r\n };\r\n return Program;\r\n}(diagnostics_1.DiagnosticEmitter));\r\nexports.Program = Program;\r\n/** Common result structure returned when calling any of the resolve functions on a {@link Program}. */\r\nvar ResolvedElement = /** @class */ (function () {\r\n function ResolvedElement() {\r\n }\r\n /** Clears the target and sets the resolved element. */\r\n ResolvedElement.prototype.set = function (element) {\r\n this.target = null;\r\n this.targetExpression = null;\r\n this.element = element;\r\n return this;\r\n };\r\n /** Sets the resolved target in addition to the previously set element. */\r\n ResolvedElement.prototype.withTarget = function (target, targetExpression) {\r\n this.target = target;\r\n this.targetExpression = targetExpression;\r\n return this;\r\n };\r\n return ResolvedElement;\r\n}());\r\nexports.ResolvedElement = ResolvedElement;\r\n// Cached result structure instance\r\nvar resolvedElement;\r\n/** Indicates the specific kind of an {@link Element}. */\r\nvar ElementKind;\r\n(function (ElementKind) {\r\n /** A {@link Global}. */\r\n ElementKind[ElementKind[\"GLOBAL\"] = 0] = \"GLOBAL\";\r\n /** A {@link Local}. */\r\n ElementKind[ElementKind[\"LOCAL\"] = 1] = \"LOCAL\";\r\n /** An {@link Enum}. */\r\n ElementKind[ElementKind[\"ENUM\"] = 2] = \"ENUM\";\r\n /** An {@link EnumValue}. */\r\n ElementKind[ElementKind[\"ENUMVALUE\"] = 3] = \"ENUMVALUE\";\r\n /** A {@link FunctionPrototype}. */\r\n ElementKind[ElementKind[\"FUNCTION_PROTOTYPE\"] = 4] = \"FUNCTION_PROTOTYPE\";\r\n /** A {@link Function}. */\r\n ElementKind[ElementKind[\"FUNCTION\"] = 5] = \"FUNCTION\";\r\n /** A {@link ClassPrototype}. */\r\n ElementKind[ElementKind[\"CLASS_PROTOTYPE\"] = 6] = \"CLASS_PROTOTYPE\";\r\n /** A {@link Class}. */\r\n ElementKind[ElementKind[\"CLASS\"] = 7] = \"CLASS\";\r\n /** An {@link InterfacePrototype}. */\r\n ElementKind[ElementKind[\"INTERFACE_PROTOTYPE\"] = 8] = \"INTERFACE_PROTOTYPE\";\r\n /** An {@link Interface}. */\r\n ElementKind[ElementKind[\"INTERFACE\"] = 9] = \"INTERFACE\";\r\n /** A {@link FieldPrototype}. */\r\n ElementKind[ElementKind[\"FIELD_PROTOTYPE\"] = 10] = \"FIELD_PROTOTYPE\";\r\n /** A {@link Field}. */\r\n ElementKind[ElementKind[\"FIELD\"] = 11] = \"FIELD\";\r\n /** A {@link Property}. */\r\n ElementKind[ElementKind[\"PROPERTY\"] = 12] = \"PROPERTY\";\r\n /** A {@link Namespace}. */\r\n ElementKind[ElementKind[\"NAMESPACE\"] = 13] = \"NAMESPACE\";\r\n})(ElementKind = exports.ElementKind || (exports.ElementKind = {}));\r\n/** Indicates traits of an {@link Element}. */\r\nvar ElementFlags;\r\n(function (ElementFlags) {\r\n /** No flags set. */\r\n ElementFlags[ElementFlags[\"NONE\"] = 0] = \"NONE\";\r\n /** Is compiled. */\r\n ElementFlags[ElementFlags[\"COMPILED\"] = 1] = \"COMPILED\";\r\n /** Is an import. */\r\n ElementFlags[ElementFlags[\"IMPORTED\"] = 2] = \"IMPORTED\";\r\n /** Is an export. */\r\n ElementFlags[ElementFlags[\"EXPORTED\"] = 4] = \"EXPORTED\";\r\n /** Is built-in. */\r\n ElementFlags[ElementFlags[\"BUILTIN\"] = 8] = \"BUILTIN\";\r\n /** Is declared. */\r\n ElementFlags[ElementFlags[\"DECLARED\"] = 16] = \"DECLARED\";\r\n /** Is generic. */\r\n ElementFlags[ElementFlags[\"GENERIC\"] = 32] = \"GENERIC\";\r\n /** Is constant. */\r\n ElementFlags[ElementFlags[\"CONSTANT\"] = 64] = \"CONSTANT\";\r\n /** Has a constant value and is therefore inlined. */\r\n ElementFlags[ElementFlags[\"INLINED\"] = 128] = \"INLINED\";\r\n /** Is instance member. */\r\n ElementFlags[ElementFlags[\"INSTANCE\"] = 256] = \"INSTANCE\";\r\n /** Is getter. */\r\n ElementFlags[ElementFlags[\"GETTER\"] = 512] = \"GETTER\";\r\n /** Is setter. */\r\n ElementFlags[ElementFlags[\"SETTER\"] = 1024] = \"SETTER\";\r\n /** Is global. */\r\n ElementFlags[ElementFlags[\"GLOBAL\"] = 2048] = \"GLOBAL\";\r\n /** Is read-only. */\r\n ElementFlags[ElementFlags[\"READONLY\"] = 4096] = \"READONLY\";\r\n /** Is a public member. */\r\n ElementFlags[ElementFlags[\"PUBLIC\"] = 8192] = \"PUBLIC\";\r\n /** Is a protected member. */\r\n ElementFlags[ElementFlags[\"PROTECTED\"] = 16384] = \"PROTECTED\";\r\n /** Is a private member. */\r\n ElementFlags[ElementFlags[\"PRIVATE\"] = 32768] = \"PRIVATE\";\r\n /** Is an abstract member. */\r\n ElementFlags[ElementFlags[\"ABSTRACT\"] = 65536] = \"ABSTRACT\";\r\n /** Is a constructor. */\r\n ElementFlags[ElementFlags[\"CONSTRUCTOR\"] = 131072] = \"CONSTRUCTOR\";\r\n /** Is an unmanaged class with limited capabilites. */\r\n ElementFlags[ElementFlags[\"UNMANAGED\"] = 262144] = \"UNMANAGED\";\r\n /** Is scoped. */\r\n ElementFlags[ElementFlags[\"SCOPED\"] = 524288] = \"SCOPED\";\r\n /** Is the start function. */\r\n ElementFlags[ElementFlags[\"START\"] = 1048576] = \"START\";\r\n})(ElementFlags = exports.ElementFlags || (exports.ElementFlags = {}));\r\n/** Base class of all program elements. */\r\nvar Element = /** @class */ (function () {\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n function Element(program, simpleName, internalName) {\r\n /** Element flags. */\r\n this.flags = ElementFlags.NONE;\r\n /** Namespaced member elements. */\r\n this.members = null;\r\n /** Parent namespace, if applicable. */\r\n this.namespace = null;\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n /** Tests if this element has a specific flag or flags. */\r\n Element.prototype.is = function (flag) { return (this.flags & flag) == flag; };\r\n /** Sets a specific flag or flags. */\r\n Element.prototype.set = function (flag) { this.flags |= flag; };\r\n return Element;\r\n}());\r\nexports.Element = Element;\r\n/** A namespace. */\r\nvar Namespace = /** @class */ (function (_super) {\r\n __extends(Namespace, _super);\r\n /** Constructs a new namespace. */\r\n function Namespace(program, simpleName, internalName, declaration) {\r\n var _this = _super.call(this, program, simpleName, internalName) || this;\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n _this.kind = ElementKind.NAMESPACE;\r\n _this.declaration = declaration;\r\n if (_this.declaration.modifiers) {\r\n for (var i = 0, k = _this.declaration.modifiers.length; i < k; ++i) {\r\n switch (_this.declaration.modifiers[i].modifierKind) {\r\n case ast_1.ModifierKind.IMPORT:\r\n _this.set(ElementFlags.IMPORTED);\r\n break;\r\n case ast_1.ModifierKind.EXPORT:\r\n _this.set(ElementFlags.EXPORTED);\r\n break;\r\n case ast_1.ModifierKind.DECLARE:\r\n _this.set(ElementFlags.DECLARED);\r\n break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n return _this;\r\n }\r\n return Namespace;\r\n}(Element));\r\nexports.Namespace = Namespace;\r\n/** An enum. */\r\nvar Enum = /** @class */ (function (_super) {\r\n __extends(Enum, _super);\r\n /** Constructs a new enum. */\r\n function Enum(program, simpleName, internalName, declaration) {\r\n var _this = _super.call(this, program, simpleName, internalName) || this;\r\n _this.kind = ElementKind.ENUM;\r\n _this.declaration = declaration;\r\n if (_this.declaration.modifiers) {\r\n for (var i = 0, k = _this.declaration.modifiers.length; i < k; ++i) {\r\n switch (_this.declaration.modifiers[i].modifierKind) {\r\n case ast_1.ModifierKind.EXPORT:\r\n _this.set(ElementFlags.EXPORTED);\r\n break;\r\n case ast_1.ModifierKind.IMPORT:\r\n _this.set(ElementFlags.IMPORTED);\r\n break;\r\n case ast_1.ModifierKind.DECLARE:\r\n _this.set(ElementFlags.DECLARED);\r\n break;\r\n case ast_1.ModifierKind.CONST:\r\n _this.set(ElementFlags.CONSTANT);\r\n break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n return _this;\r\n }\r\n return Enum;\r\n}(Element));\r\nexports.Enum = Enum;\r\n/** An enum value. */\r\nvar EnumValue = /** @class */ (function (_super) {\r\n __extends(EnumValue, _super);\r\n function EnumValue(enm, program, simpleName, internalName, declaration) {\r\n var _this = _super.call(this, program, simpleName, internalName) || this;\r\n _this.kind = ElementKind.ENUMVALUE;\r\n /** Constant value, if applicable. */\r\n _this.constantValue = 0;\r\n _this.enum = enm;\r\n _this.declaration = declaration;\r\n return _this;\r\n }\r\n return EnumValue;\r\n}(Element));\r\nexports.EnumValue = EnumValue;\r\nvar ConstantValueKind;\r\n(function (ConstantValueKind) {\r\n ConstantValueKind[ConstantValueKind[\"NONE\"] = 0] = \"NONE\";\r\n ConstantValueKind[ConstantValueKind[\"INTEGER\"] = 1] = \"INTEGER\";\r\n ConstantValueKind[ConstantValueKind[\"FLOAT\"] = 2] = \"FLOAT\";\r\n})(ConstantValueKind = exports.ConstantValueKind || (exports.ConstantValueKind = {}));\r\nvar VariableLikeElement = /** @class */ (function (_super) {\r\n __extends(VariableLikeElement, _super);\r\n function VariableLikeElement() {\r\n // kind varies\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n /** Constant value kind. */\r\n _this.constantValueKind = 0 /* NONE */;\r\n return _this;\r\n }\r\n VariableLikeElement.prototype.withConstantIntegerValue = function (lo, hi) {\r\n this.constantValueKind = 1 /* INTEGER */;\r\n this.constantIntegerValue = i64_new(lo, hi);\r\n this.set(ElementFlags.CONSTANT | ElementFlags.INLINED);\r\n return this;\r\n };\r\n VariableLikeElement.prototype.withConstantFloatValue = function (value) {\r\n this.constantValueKind = 2 /* FLOAT */;\r\n this.constantFloatValue = value;\r\n this.set(ElementFlags.CONSTANT | ElementFlags.INLINED);\r\n return this;\r\n };\r\n return VariableLikeElement;\r\n}(Element));\r\nexports.VariableLikeElement = VariableLikeElement;\r\n/** A global variable. */\r\nvar Global = /** @class */ (function (_super) {\r\n __extends(Global, _super);\r\n function Global(program, simpleName, internalName, declaration, type) {\r\n var _this = _super.call(this, program, simpleName, internalName) || this;\r\n _this.kind = ElementKind.GLOBAL;\r\n _this.declaration = declaration;\r\n if (_this.declaration.modifiers) {\r\n for (var i = 0, k = _this.declaration.modifiers.length; i < k; ++i) {\r\n switch (_this.declaration.modifiers[i].modifierKind) {\r\n case ast_1.ModifierKind.IMPORT:\r\n _this.set(ElementFlags.IMPORTED);\r\n break;\r\n case ast_1.ModifierKind.EXPORT:\r\n _this.set(ElementFlags.EXPORTED);\r\n break;\r\n case ast_1.ModifierKind.CONST:\r\n _this.set(ElementFlags.CONSTANT);\r\n break;\r\n case ast_1.ModifierKind.LET:\r\n _this.set(ElementFlags.SCOPED);\r\n break;\r\n case ast_1.ModifierKind.DECLARE:\r\n _this.set(ElementFlags.DECLARED);\r\n break;\r\n case ast_1.ModifierKind.READONLY:\r\n _this.set(_this.declaration.initializer\r\n ? ElementFlags.CONSTANT | ElementFlags.READONLY\r\n : ElementFlags.READONLY);\r\n break;\r\n case ast_1.ModifierKind.PUBLIC:\r\n case ast_1.ModifierKind.PRIVATE:\r\n case ast_1.ModifierKind.PROTECTED:\r\n case ast_1.ModifierKind.STATIC:\r\n break; // static fields become globals\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n _this.type = type; // resolved later if `void`\r\n return _this;\r\n }\r\n return Global;\r\n}(VariableLikeElement));\r\nexports.Global = Global;\r\n/** A function parameter. */\r\nvar Parameter = /** @class */ (function () {\r\n /** Constructs a new function parameter. */\r\n function Parameter(name, type, initializer) {\r\n if (initializer === void 0) { initializer = null; }\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n return Parameter;\r\n}());\r\nexports.Parameter = Parameter;\r\n/** A function local. */\r\nvar Local = /** @class */ (function (_super) {\r\n __extends(Local, _super);\r\n function Local(program, simpleName, index, type) {\r\n var _this = _super.call(this, program, simpleName, simpleName) || this;\r\n _this.kind = ElementKind.LOCAL;\r\n _this.index = index;\r\n _this.type = type;\r\n return _this;\r\n }\r\n return Local;\r\n}(VariableLikeElement));\r\nexports.Local = Local;\r\n/** A yet unresolved function prototype. */\r\nvar FunctionPrototype = /** @class */ (function (_super) {\r\n __extends(FunctionPrototype, _super);\r\n /** Constructs a new function prototype. */\r\n function FunctionPrototype(program, simpleName, internalName, declaration, classPrototype) {\r\n if (classPrototype === void 0) { classPrototype = null; }\r\n var _this = _super.call(this, program, simpleName, internalName) || this;\r\n _this.kind = ElementKind.FUNCTION_PROTOTYPE;\r\n /** Resolved instances. */\r\n _this.instances = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. */\r\n _this.classTypeArguments = null;\r\n _this.declaration = declaration;\r\n if (_this.declaration.modifiers) {\r\n for (var i = 0, k = _this.declaration.modifiers.length; i < k; ++i) {\r\n switch (_this.declaration.modifiers[i].modifierKind) {\r\n case ast_1.ModifierKind.IMPORT:\r\n _this.set(ElementFlags.IMPORTED);\r\n break;\r\n case ast_1.ModifierKind.EXPORT:\r\n _this.set(ElementFlags.EXPORTED);\r\n break;\r\n case ast_1.ModifierKind.DECLARE:\r\n _this.set(ElementFlags.DECLARED);\r\n break;\r\n case ast_1.ModifierKind.GET:\r\n _this.set(ElementFlags.GETTER);\r\n break;\r\n case ast_1.ModifierKind.SET:\r\n _this.set(ElementFlags.SETTER);\r\n break;\r\n case ast_1.ModifierKind.STATIC:\r\n case ast_1.ModifierKind.ABSTRACT:\r\n case ast_1.ModifierKind.PRIVATE:\r\n case ast_1.ModifierKind.PROTECTED:\r\n case ast_1.ModifierKind.PUBLIC:\r\n break; // already handled\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (_this.declaration.isGeneric) {\r\n _this.set(ElementFlags.GENERIC);\r\n }\r\n if (_this.classPrototype = classPrototype) {\r\n _this.set(ElementFlags.INSTANCE);\r\n }\r\n return _this;\r\n }\r\n FunctionPrototype.prototype.resolve = function (functionTypeArguments, contextualTypeArguments) {\r\n if (functionTypeArguments === void 0) { functionTypeArguments = null; }\r\n if (contextualTypeArguments === void 0) { contextualTypeArguments = null; }\r\n var instanceKey = functionTypeArguments ? types_1.typesToString(functionTypeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance)\r\n return instance;\r\n var declaration = this.declaration;\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n try {\r\n for (var inheritedTypeArguments_1 = __values(inheritedTypeArguments), inheritedTypeArguments_1_1 = inheritedTypeArguments_1.next(); !inheritedTypeArguments_1_1.done; inheritedTypeArguments_1_1 = inheritedTypeArguments_1.next()) {\r\n var _a = __read(inheritedTypeArguments_1_1.value, 2), inheritedName = _a[0], inheritedType = _a[1];\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (inheritedTypeArguments_1_1 && !inheritedTypeArguments_1_1.done && (_b = inheritedTypeArguments_1.return)) _b.call(inheritedTypeArguments_1);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n }\r\n var i, k;\r\n // inherit class type arguments if a partially resolved instance method (classTypeArguments is set)\r\n if (this.classTypeArguments) {\r\n if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n var classDeclaration = this.classPrototype.declaration;\r\n var classTypeParameters = classDeclaration.typeParameters;\r\n if ((k = this.classTypeArguments.length) != classTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(classTypeParameters[i].name.text, this.classTypeArguments[i]);\r\n }\r\n }\r\n // override call specific contextual type arguments\r\n var functionTypeParameters = declaration.typeParameters;\r\n if (functionTypeArguments && (k = functionTypeArguments.length)) {\r\n if (!functionTypeParameters || k != functionTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(functionTypeParameters[i].name.text, functionTypeArguments[i]);\r\n }\r\n }\r\n // resolve parameters\r\n // TODO: 'this' type\r\n k = declaration.parameters.length;\r\n var parameters = new Array(k);\r\n var parameterTypes = new Array(k);\r\n var typeNode;\r\n for (i = 0; i < k; ++i) {\r\n var parameterDeclaration = declaration.parameters[i];\r\n typeNode = assert(parameterDeclaration.type);\r\n var parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (parameterType) {\r\n parameters[i] = new Parameter(parameterDeclaration.name.text, parameterType, parameterDeclaration.initializer);\r\n parameterTypes[i] = parameterType;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n var classInstance = null;\r\n if (this.classPrototype) {\r\n classInstance = this.classPrototype.resolve(this.classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance)\r\n return null;\r\n }\r\n // resolve return type\r\n // TODO: 'this' type\r\n var returnType;\r\n if (this.is(ElementFlags.SETTER) || this.is(ElementFlags.CONSTRUCTOR)) {\r\n returnType = types_1.Type.void; // not annotated\r\n }\r\n else {\r\n typeNode = assert(declaration.returnType);\r\n var type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (type) {\r\n returnType = type;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n instance = new Function(this, internalName, functionTypeArguments, parameters, returnType, classInstance);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n return instance;\r\n var e_2, _b;\r\n };\r\n FunctionPrototype.prototype.resolveInclTypeArguments = function (typeArgumentNodes, contextualTypeArguments, reportNode) {\r\n var resolvedTypeArguments = null;\r\n if (this.is(ElementFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(assert(this.declaration.typeParameters), typeArgumentNodes, contextualTypeArguments, reportNode);\r\n if (!resolvedTypeArguments)\r\n return null;\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n };\r\n FunctionPrototype.prototype.resolvePartial = function (classTypeArguments) {\r\n if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n if (classTypeArguments && classTypeArguments.length) {\r\n var partialPrototype = new FunctionPrototype(this.program, this.simpleName, this.internalName, this.declaration, this.classPrototype);\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n return this; // no need to clone\r\n };\r\n FunctionPrototype.prototype.toString = function () { return this.simpleName; };\r\n return FunctionPrototype;\r\n}(Element));\r\nexports.FunctionPrototype = FunctionPrototype;\r\n/** A resolved function. */\r\nvar Function = /** @class */ (function (_super) {\r\n __extends(Function, _super);\r\n /** Constructs a new concrete function. */\r\n function Function(prototype, internalName, typeArguments, parameters, returnType, instanceMethodOf) {\r\n if (instanceMethodOf === void 0) { instanceMethodOf = null; }\r\n var _this = _super.call(this, prototype.program, prototype.simpleName, internalName) || this;\r\n _this.kind = ElementKind.FUNCTION;\r\n /** Map of locals by name. */\r\n _this.locals = new Map();\r\n /** List of additional non-parameter locals. */\r\n _this.additionalLocals = [];\r\n /** Current break context label. */\r\n _this.breakContext = null;\r\n /** Remembered debug locations. */\r\n _this.debugLocations = null;\r\n /** Function reference, if compiled. */\r\n _this.ref = 0;\r\n /** Function table index, if any. */\r\n _this.functionTableIndex = -1;\r\n _this.nextBreakId = 0;\r\n _this.breakStack = null;\r\n _this.tempI32s = null;\r\n _this.tempI64s = null;\r\n _this.tempF32s = null;\r\n _this.tempF64s = null;\r\n _this.prototype = prototype;\r\n _this.typeArguments = typeArguments;\r\n _this.parameters = parameters || [];\r\n _this.returnType = returnType;\r\n _this.instanceMethodOf = instanceMethodOf;\r\n _this.flags = prototype.flags;\r\n if (!(prototype.is(ElementFlags.BUILTIN) || prototype.is(ElementFlags.DECLARED))) {\r\n var localIndex = 0;\r\n if (instanceMethodOf) {\r\n assert(_this.is(ElementFlags.INSTANCE)); // internal error\r\n _this.locals.set(\"this\", new Local(prototype.program, \"this\", localIndex++, instanceMethodOf.type));\r\n if (instanceMethodOf.contextualTypeArguments) {\r\n if (!_this.contextualTypeArguments) {\r\n _this.contextualTypeArguments = new Map();\r\n }\r\n try {\r\n for (var _a = __values(instanceMethodOf.contextualTypeArguments), _b = _a.next(); !_b.done; _b = _a.next()) {\r\n var _c = __read(_b.value, 2), inheritedName = _c[0], inheritedType = _c[1];\r\n _this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\r\n finally {\r\n try {\r\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\r\n }\r\n finally { if (e_3) throw e_3.error; }\r\n }\r\n }\r\n }\r\n else {\r\n assert(!_this.is(ElementFlags.INSTANCE)); // internal error\r\n }\r\n for (var i = 0, k = _this.parameters.length; i < k; ++i) {\r\n var parameter = _this.parameters[i];\r\n var parameterName = assert(parameter.name, \"parameter must be named\"); // not a builtin or declared\r\n _this.locals.set(parameterName, new Local(prototype.program, parameterName, localIndex++, parameter.type));\r\n }\r\n }\r\n _this.flow = Flow.create(_this);\r\n return _this;\r\n var e_3, _d;\r\n }\r\n /** Adds a local of the specified type, with an optional name. */\r\n Function.prototype.addLocal = function (type, name) {\r\n if (name === void 0) { name = null; }\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = (this.parameters ? this.parameters.length : 0) + this.additionalLocals.length;\r\n if (this.is(ElementFlags.INSTANCE))\r\n localIndex++; // plus 'this'\r\n var local = new Local(this.prototype.program, name\r\n ? name\r\n : \"var$\" + localIndex.toString(10), localIndex, type);\r\n if (name) {\r\n if (this.locals.has(name))\r\n throw new Error(\"duplicate local name\");\r\n this.locals.set(name, local);\r\n }\r\n this.additionalLocals.push(type);\r\n return local;\r\n };\r\n /** Gets a free temporary local of the specified type. */\r\n Function.prototype.getTempLocal = function (type) {\r\n var temps;\r\n switch (type.toNativeType()) {\r\n case module_1.NativeType.I32:\r\n temps = this.tempI32s;\r\n break;\r\n case module_1.NativeType.I64:\r\n temps = this.tempI64s;\r\n break;\r\n case module_1.NativeType.F32:\r\n temps = this.tempF32s;\r\n break;\r\n case module_1.NativeType.F64:\r\n temps = this.tempF64s;\r\n break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps && temps.length) {\r\n var ret = temps.pop();\r\n ret.type = type;\r\n return ret;\r\n }\r\n return this.addLocal(type);\r\n };\r\n /** Frees the temporary local for reuse. */\r\n Function.prototype.freeTempLocal = function (local) {\r\n var temps;\r\n assert(local.type != null); // internal error\r\n switch (local.type.toNativeType()) {\r\n case module_1.NativeType.I32:\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n case module_1.NativeType.I64:\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n case module_1.NativeType.F32:\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n case module_1.NativeType.F64:\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n temps.push(local);\r\n };\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n Function.prototype.getAndFreeTempLocal = function (type) {\r\n var temps;\r\n switch (type.toNativeType()) {\r\n case module_1.NativeType.I32:\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n case module_1.NativeType.I64:\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n case module_1.NativeType.F32:\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n case module_1.NativeType.F64:\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps.length > 0) {\r\n return temps[temps.length - 1];\r\n }\r\n var local = this.addLocal(type);\r\n temps.push(local);\r\n return local;\r\n };\r\n /** Enters a(nother) break context. */\r\n Function.prototype.enterBreakContext = function () {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) {\r\n this.breakStack = [id];\r\n }\r\n else {\r\n this.breakStack.push(id);\r\n }\r\n return this.breakContext = id.toString(10);\r\n };\r\n /** Leaves the current break context. */\r\n Function.prototype.leaveBreakContext = function () {\r\n assert(this.breakStack != null);\r\n var length = this.breakStack.length;\r\n assert(length > 0);\r\n this.breakStack.pop();\r\n if (length > 1) {\r\n this.breakContext = this.breakStack[length - 2].toString(10);\r\n }\r\n else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n };\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n Function.prototype.finalize = function (module, ref) {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n var debugLocations = this.debugLocations;\r\n if (debugLocations) {\r\n for (var i = 0, k = debugLocations.length; i < k; ++i) {\r\n var debugLocation = debugLocations[i];\r\n module.setDebugLocation(ref, debugLocation.debugInfoRef, debugLocation.source.debugInfoIndex, debugLocation.line, debugLocation.column);\r\n }\r\n }\r\n }\r\n this.debugLocations = null;\r\n };\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n Function.prototype.isAssignableTo = function (target) {\r\n return this == target; // TODO\r\n };\r\n /** Returns the TypeScript representation of this function. */\r\n Function.prototype.toString = function () { return this.prototype.simpleName; };\r\n /** Returns the function type TypeScript representation of this function.*/\r\n Function.prototype.toTypeString = function () { throw new Error(\"not implemented\"); };\r\n return Function;\r\n}(Element));\r\nexports.Function = Function;\r\n/** A yet unresolved instance field prototype. */\r\nvar FieldPrototype = /** @class */ (function (_super) {\r\n __extends(FieldPrototype, _super);\r\n /** Constructs a new field prototype. */\r\n function FieldPrototype(classPrototype, simpleName, internalName, declaration) {\r\n var _this = _super.call(this, classPrototype.program, simpleName, internalName) || this;\r\n _this.kind = ElementKind.FIELD_PROTOTYPE;\r\n _this.classPrototype = classPrototype;\r\n _this.declaration = declaration;\r\n if (_this.declaration.modifiers) {\r\n for (var i = 0, k = _this.declaration.modifiers.length; i < k; ++i) {\r\n switch (_this.declaration.modifiers[i].modifierKind) {\r\n case ast_1.ModifierKind.EXPORT:\r\n _this.set(ElementFlags.EXPORTED);\r\n break;\r\n case ast_1.ModifierKind.READONLY:\r\n _this.set(ElementFlags.READONLY);\r\n break;\r\n case ast_1.ModifierKind.PRIVATE:\r\n case ast_1.ModifierKind.PROTECTED:\r\n case ast_1.ModifierKind.PUBLIC:\r\n case ast_1.ModifierKind.STATIC:\r\n break; // already handled\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n return _this;\r\n }\r\n Object.defineProperty(FieldPrototype.prototype, \"isReadonly\", {\r\n /** Whether the field is read-only or not. */\r\n get: function () {\r\n return (this.flags & ElementFlags.READONLY) != 0;\r\n },\r\n set: function (is) {\r\n if (is) {\r\n this.flags |= ElementFlags.READONLY;\r\n }\r\n else {\r\n this.flags &= ~ElementFlags.READONLY;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FieldPrototype;\r\n}(Element));\r\nexports.FieldPrototype = FieldPrototype;\r\n/** A resolved instance field. */\r\nvar Field = /** @class */ (function (_super) {\r\n __extends(Field, _super);\r\n /** Constructs a new field. */\r\n function Field(prototype, internalName, type) {\r\n var _this = _super.call(this, prototype.program, prototype.simpleName, internalName) || this;\r\n _this.kind = ElementKind.FIELD;\r\n /** Field memory offset, if an instance field. */\r\n _this.memoryOffset = -1;\r\n _this.prototype = prototype;\r\n _this.flags = prototype.flags;\r\n _this.type = type;\r\n return _this;\r\n }\r\n return Field;\r\n}(VariableLikeElement));\r\nexports.Field = Field;\r\n/** A property comprised of a getter and a setter function. */\r\nvar Property = /** @class */ (function (_super) {\r\n __extends(Property, _super);\r\n /** Constructs a new property prototype. */\r\n function Property(program, simpleName, internalName, parent) {\r\n var _this = _super.call(this, program, simpleName, internalName) || this;\r\n _this.kind = ElementKind.PROPERTY;\r\n /** Getter prototype. */\r\n _this.getterPrototype = null;\r\n /** Setter prototype. */\r\n _this.setterPrototype = null;\r\n _this.parent = parent;\r\n return _this;\r\n }\r\n return Property;\r\n}(Element));\r\nexports.Property = Property;\r\n/** A yet unresolved class prototype. */\r\nvar ClassPrototype = /** @class */ (function (_super) {\r\n __extends(ClassPrototype, _super);\r\n function ClassPrototype(program, simpleName, internalName, declaration) {\r\n var _this = _super.call(this, program, simpleName, internalName) || this;\r\n _this.kind = ElementKind.CLASS_PROTOTYPE;\r\n /** Resolved instances. */\r\n _this.instances = new Map();\r\n /** Instance member prototypes. */\r\n _this.instanceMembers = null;\r\n /** Base class prototype, if applicable. */\r\n _this.basePrototype = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n _this.constructorPrototype = null;\r\n /** Overloaded indexed get method, if any. */\r\n _this.fnIndexedGet = null;\r\n /** Overloaded indexed set method, if any. */\r\n _this.fnIndexedSet = null;\r\n /** Overloaded concatenation method, if any. */\r\n _this.fnConcat = null;\r\n /** Overloaded equality comparison method, if any. */\r\n _this.fnEquals = null;\r\n _this.declaration = declaration;\r\n if (_this.declaration.modifiers) {\r\n for (var i = 0, k = _this.declaration.modifiers.length; i < k; ++i) {\r\n switch (_this.declaration.modifiers[i].modifierKind) {\r\n case ast_1.ModifierKind.IMPORT:\r\n _this.set(ElementFlags.IMPORTED);\r\n break;\r\n case ast_1.ModifierKind.EXPORT:\r\n _this.set(ElementFlags.EXPORTED);\r\n break;\r\n case ast_1.ModifierKind.DECLARE:\r\n _this.set(ElementFlags.DECLARED);\r\n break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (_this.declaration.typeParameters.length) {\r\n _this.set(ElementFlags.GENERIC);\r\n }\r\n return _this;\r\n }\r\n Object.defineProperty(ClassPrototype.prototype, \"isUnmanaged\", {\r\n /** Whether an unamanaged class or not. */\r\n get: function () {\r\n return (this.flags & ElementFlags.UNMANAGED) != 0;\r\n },\r\n set: function (is) {\r\n if (is) {\r\n this.flags |= ElementFlags.UNMANAGED;\r\n }\r\n else {\r\n this.flags &= ~ElementFlags.UNMANAGED;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ClassPrototype.prototype.resolve = function (typeArguments, contextualTypeArguments) {\r\n if (contextualTypeArguments === void 0) { contextualTypeArguments = null; }\r\n var instanceKey = typeArguments ? types_1.typesToString(typeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance)\r\n return instance;\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n try {\r\n for (var inheritedTypeArguments_2 = __values(inheritedTypeArguments), inheritedTypeArguments_2_1 = inheritedTypeArguments_2.next(); !inheritedTypeArguments_2_1.done; inheritedTypeArguments_2_1 = inheritedTypeArguments_2.next()) {\r\n var _a = __read(inheritedTypeArguments_2_1.value, 2), inheritedName = _a[0], inheritedType = _a[1];\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\r\n finally {\r\n try {\r\n if (inheritedTypeArguments_2_1 && !inheritedTypeArguments_2_1.done && (_b = inheritedTypeArguments_2.return)) _b.call(inheritedTypeArguments_2);\r\n }\r\n finally { if (e_4) throw e_4.error; }\r\n }\r\n }\r\n var declaration = this.declaration;\r\n var baseClass = null;\r\n if (declaration.extendsType) {\r\n var baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType)\r\n return null;\r\n if (!(baseClass = baseClassType.classType)) {\r\n this.program.error(diagnostics_1.DiagnosticCode.A_class_may_only_extend_another_class, declaration.extendsType.range);\r\n return null;\r\n }\r\n if (baseClass.prototype.isUnmanaged != this.isUnmanaged) {\r\n this.program.error(diagnostics_1.DiagnosticCode.Structs_cannot_extend_classes_and_vice_versa, ast_1.Range.join(declaration.name.range, declaration.extendsType.range));\r\n return null;\r\n }\r\n }\r\n // override call specific contextual type arguments if provided\r\n var i, k;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(declaration.typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n else if (declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n var memoryOffset = 0;\r\n if (baseClass) {\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n if (baseClass.members) {\r\n if (!instance.members)\r\n instance.members = new Map();\r\n try {\r\n for (var _c = __values(baseClass.members.values()), _d = _c.next(); !_d.done; _d = _c.next()) {\r\n var inheritedMember = _d.value;\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\r\n finally {\r\n try {\r\n if (_d && !_d.done && (_e = _c.return)) _e.call(_c);\r\n }\r\n finally { if (e_5) throw e_5.error; }\r\n }\r\n }\r\n }\r\n if (this.constructorPrototype) {\r\n var partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) {\r\n instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n // TODO: ^ doesn't know the return type, hence returns null\r\n }\r\n if (this.instanceMembers) {\r\n try {\r\n for (var _f = __values(this.instanceMembers.values()), _g = _f.next(); !_g.done; _g = _f.next()) {\r\n var member = _g.value;\r\n switch (member.kind) {\r\n case ElementKind.FIELD_PROTOTYPE:// fields are layed out in advance\r\n if (!instance.members)\r\n instance.members = new Map();\r\n var fieldDeclaration = member.declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n var fieldType = this.program.resolveType(// reports\r\n fieldDeclaration.type, instance.contextualTypeArguments);\r\n if (fieldType) {\r\n var fieldInstance = new Field(member, member.internalName, fieldType);\r\n switch (fieldType.byteSize) {\r\n case 1: break;\r\n case 2:\r\n if (memoryOffset & 1)\r\n ++memoryOffset;\r\n break;\r\n case 4:\r\n if (memoryOffset & 3)\r\n memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n case 8:\r\n if (memoryOffset & 7)\r\n memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n }\r\n break;\r\n case ElementKind.FUNCTION_PROTOTYPE:// instance methods remain partially resolved prototypes until compiled\r\n if (!instance.members)\r\n instance.members = new Map();\r\n var methodPrototype = member.resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\r\n instance.members.set(member.simpleName, methodPrototype);\r\n }\r\n break;\r\n case ElementKind.PROPERTY:// instance properties are cloned with partially resolved getters and setters\r\n if (!instance.members)\r\n instance.members = new Map();\r\n assert(member.getterPrototype);\r\n var instanceProperty = new Property(this.program, member.simpleName, member.internalName, this);\r\n instanceProperty.getterPrototype = (member.getterPrototype.resolvePartial(typeArguments));\r\n if (member.setterPrototype) {\r\n instanceProperty.setterPrototype = (member.setterPrototype.resolvePartial(typeArguments));\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n default:\r\n throw new Error(\"instance member expected\");\r\n }\r\n }\r\n }\r\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\r\n finally {\r\n try {\r\n if (_g && !_g.done && (_h = _f.return)) _h.call(_f);\r\n }\r\n finally { if (e_6) throw e_6.error; }\r\n }\r\n }\r\n instance.currentMemoryOffset = memoryOffset; // sizeof() is its byte size in memory\r\n return instance;\r\n var e_4, _b, e_5, _e, e_6, _h;\r\n };\r\n ClassPrototype.prototype.resolveInclTypeArguments = function (typeArgumentNodes, contextualTypeArguments, alternativeReportNode) {\r\n var resolvedTypeArguments = null;\r\n if (this.is(ElementFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(this.declaration.typeParameters, typeArgumentNodes, contextualTypeArguments, alternativeReportNode);\r\n if (!resolvedTypeArguments)\r\n return null;\r\n }\r\n else {\r\n assert(typeArgumentNodes == null || !typeArgumentNodes.length);\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n };\r\n ClassPrototype.prototype.toString = function () {\r\n return this.simpleName;\r\n };\r\n return ClassPrototype;\r\n}(Element));\r\nexports.ClassPrototype = ClassPrototype;\r\n/** A resolved class. */\r\nvar Class = /** @class */ (function (_super) {\r\n __extends(Class, _super);\r\n /** Constructs a new class. */\r\n function Class(prototype, internalName, typeArguments, base) {\r\n if (typeArguments === void 0) { typeArguments = null; }\r\n if (base === void 0) { base = null; }\r\n var _this = _super.call(this, prototype.program, prototype.simpleName, internalName) || this;\r\n _this.kind = ElementKind.CLASS;\r\n /** Contextual type arguments for fields and methods. */\r\n _this.contextualTypeArguments = null;\r\n /** Current member memory offset. */\r\n _this.currentMemoryOffset = 0;\r\n /** Constructor instance. */\r\n _this.constructorInstance = null;\r\n _this.prototype = prototype;\r\n _this.flags = prototype.flags;\r\n _this.typeArguments = typeArguments;\r\n _this.type = prototype.program.options.usizeType.asClass(_this);\r\n _this.base = base;\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n if (base.contextualTypeArguments) {\r\n if (!_this.contextualTypeArguments)\r\n _this.contextualTypeArguments = new Map();\r\n try {\r\n for (var _a = __values(base.contextualTypeArguments), _b = _a.next(); !_b.done; _b = _a.next()) {\r\n var _c = __read(_b.value, 2), baseName = _c[0], baseType = _c[1];\r\n _this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\r\n finally {\r\n try {\r\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\r\n }\r\n finally { if (e_7) throw e_7.error; }\r\n }\r\n }\r\n }\r\n // apply instance-specific contextual type arguments\r\n var declaration = _this.prototype.declaration;\r\n var i, k;\r\n if (declaration) {\r\n var typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!_this.contextualTypeArguments)\r\n _this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n _this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n }\r\n else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n return _this;\r\n var e_7, _d;\r\n }\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n Class.prototype.isAssignableTo = function (target) {\r\n var current = this;\r\n do {\r\n if (current == target) {\r\n return true;\r\n }\r\n } while (current = current.base);\r\n return false;\r\n };\r\n Class.prototype.toString = function () {\r\n return this.prototype.simpleName;\r\n };\r\n return Class;\r\n}(Element));\r\nexports.Class = Class;\r\n/** A yet unresolved interface. */\r\nvar InterfacePrototype = /** @class */ (function (_super) {\r\n __extends(InterfacePrototype, _super);\r\n /** Constructs a new interface prototype. */\r\n function InterfacePrototype(program, simpleName, internalName, declaration) {\r\n var _this = _super.call(this, program, simpleName, internalName, declaration) || this;\r\n _this.kind = ElementKind.INTERFACE_PROTOTYPE;\r\n return _this;\r\n }\r\n return InterfacePrototype;\r\n}(ClassPrototype));\r\nexports.InterfacePrototype = InterfacePrototype;\r\n/** A resolved interface. */\r\nvar Interface = /** @class */ (function (_super) {\r\n __extends(Interface, _super);\r\n /** Constructs a new interface. */\r\n function Interface(prototype, internalName, typeArguments, base) {\r\n if (typeArguments === void 0) { typeArguments = []; }\r\n if (base === void 0) { base = null; }\r\n var _this = _super.call(this, prototype, internalName, typeArguments, base) || this;\r\n _this.kind = ElementKind.INTERFACE;\r\n return _this;\r\n }\r\n return Interface;\r\n}(Class));\r\nexports.Interface = Interface;\r\n/** Control flow flags indicating specific conditions. */\r\nvar FlowFlags;\r\n(function (FlowFlags) {\r\n /** No specific conditions. */\r\n FlowFlags[FlowFlags[\"NONE\"] = 0] = \"NONE\";\r\n /** This branch always returns. */\r\n FlowFlags[FlowFlags[\"RETURNS\"] = 1] = \"RETURNS\";\r\n /** This branch possibly throws. */\r\n FlowFlags[FlowFlags[\"POSSIBLY_THROWS\"] = 2] = \"POSSIBLY_THROWS\";\r\n /** This branch possible breaks. */\r\n FlowFlags[FlowFlags[\"POSSIBLY_BREAKS\"] = 4] = \"POSSIBLY_BREAKS\";\r\n /** This branch possible continues. */\r\n FlowFlags[FlowFlags[\"POSSIBLY_CONTINUES\"] = 8] = \"POSSIBLY_CONTINUES\";\r\n})(FlowFlags = exports.FlowFlags || (exports.FlowFlags = {}));\r\n/** A control flow evaluator. */\r\nvar Flow = /** @class */ (function () {\r\n function Flow() {\r\n /** Scoped local variables. */\r\n this.scopedLocals = null;\r\n }\r\n /** Creates the parent flow of the specified function. */\r\n Flow.create = function (currentFunction) {\r\n var parentFlow = new Flow();\r\n parentFlow.parent = null;\r\n parentFlow.flags = 0 /* NONE */;\r\n parentFlow.currentFunction = currentFunction;\r\n parentFlow.continueLabel = null;\r\n parentFlow.breakLabel = null;\r\n return parentFlow;\r\n };\r\n /** Tests if this flow has the specified flag or flags. */\r\n Flow.prototype.is = function (flag) { return (this.flags & flag) == flag; };\r\n /** Sets the specified flag or flags. */\r\n Flow.prototype.set = function (flag) { this.flags |= flag; };\r\n /** Enters a new branch or scope and returns the new flow. */\r\n Flow.prototype.enterBranchOrScope = function () {\r\n var branchFlow = new Flow();\r\n branchFlow.parent = this;\r\n branchFlow.flags = this.flags;\r\n branchFlow.currentFunction = this.currentFunction;\r\n branchFlow.continueLabel = this.continueLabel;\r\n branchFlow.breakLabel = this.breakLabel;\r\n return branchFlow;\r\n };\r\n /** Leaves the current branch or scope and returns the parent flow. */\r\n Flow.prototype.leaveBranchOrScope = function () {\r\n var parent = assert(this.parent);\r\n // Free block-scoped locals\r\n if (this.scopedLocals) {\r\n try {\r\n for (var _a = __values(this.scopedLocals.values()), _b = _a.next(); !_b.done; _b = _a.next()) {\r\n var scopedLocal = _b.value;\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n catch (e_8_1) { e_8 = { error: e_8_1 }; }\r\n finally {\r\n try {\r\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\r\n }\r\n finally { if (e_8) throw e_8.error; }\r\n }\r\n this.scopedLocals = null;\r\n }\r\n // Propagate flags to parent\r\n if (this.is(2 /* POSSIBLY_THROWS */)) {\r\n parent.set(2 /* POSSIBLY_THROWS */);\r\n }\r\n if (this.is(4 /* POSSIBLY_BREAKS */) && parent.breakLabel == this.breakLabel) {\r\n parent.set(4 /* POSSIBLY_BREAKS */);\r\n }\r\n if (this.is(8 /* POSSIBLY_CONTINUES */) && parent.continueLabel == this.continueLabel) {\r\n parent.set(8 /* POSSIBLY_CONTINUES */);\r\n }\r\n return parent;\r\n var e_8, _c;\r\n };\r\n /** Adds a new scoped local of the specified name. */\r\n Flow.prototype.addScopedLocal = function (name, type, reportNode) {\r\n var scopedLocal = this.currentFunction.getTempLocal(type);\r\n if (!this.scopedLocals)\r\n this.scopedLocals = new Map();\r\n else if (this.scopedLocals.has(name)) {\r\n this.currentFunction.program.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, reportNode.range);\r\n return;\r\n }\r\n this.scopedLocals.set(name, scopedLocal);\r\n };\r\n /** Gets the local of the specified name in the current scope. */\r\n Flow.prototype.getScopedLocal = function (name) {\r\n var local;\r\n var current = this;\r\n do {\r\n if (current.scopedLocals && (local = current.scopedLocals.get(name))) {\r\n return local;\r\n }\r\n } while (current = current.parent);\r\n return this.currentFunction.locals.get(name);\r\n };\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n Flow.prototype.finalize = function () {\r\n assert(this.parent == null, \"must be the topmost parent flow\");\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n return this.is(1 /* RETURNS */);\r\n };\r\n return Flow;\r\n}());\r\nexports.Flow = Flow;\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __values = (this && this.__values) || function (o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar builtins_1 = __webpack_require__(16);\r\nvar diagnostics_1 = __webpack_require__(1);\r\nvar module_1 = __webpack_require__(0);\r\nvar program_1 = __webpack_require__(2);\r\nvar tokenizer_1 = __webpack_require__(7);\r\nvar ast_1 = __webpack_require__(6);\r\nvar types_1 = __webpack_require__(5);\r\n/** Compilation target. */\r\nvar Target;\r\n(function (Target) {\r\n /** WebAssembly with 32-bit pointers. */\r\n Target[Target[\"WASM32\"] = 0] = \"WASM32\";\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n Target[Target[\"WASM64\"] = 1] = \"WASM64\";\r\n})(Target = exports.Target || (exports.Target = {}));\r\n/** Compiler options. */\r\nvar Options = /** @class */ (function () {\r\n function Options() {\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n this.target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n this.noTreeShaking = false;\r\n /** If true, replaces assertions with nops. */\r\n this.noAssert = false;\r\n /** If true, does not set up a memory. */\r\n this.noMemory = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n this.importMemory = false;\r\n /** Static memory start offset. */\r\n this.memoryBase = 0;\r\n /** Memory allocation implementation to use. */\r\n this.allocateImpl = \"allocate_memory\";\r\n /** Memory freeing implementation to use. */\r\n this.freeImpl = \"free_memory\";\r\n /** If true, generates information necessary for source maps. */\r\n this.sourceMap = false;\r\n }\r\n Object.defineProperty(Options.prototype, \"isWasm64\", {\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get: function () {\r\n return this.target == Target.WASM64;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Options.prototype, \"usizeType\", {\r\n /** Gets the unsigned size type matching the target. */\r\n get: function () {\r\n return this.target == Target.WASM64 ? types_1.Type.usize64 : types_1.Type.usize32;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Options.prototype, \"isizeType\", {\r\n /** Gets the signed size type matching the target. */\r\n get: function () {\r\n return this.target == Target.WASM64 ? types_1.Type.isize64 : types_1.Type.isize32;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Options.prototype, \"nativeSizeType\", {\r\n /** Gets the native size type matching the target. */\r\n get: function () {\r\n return this.target == Target.WASM64 ? module_1.NativeType.I64 : module_1.NativeType.I32;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Options;\r\n}());\r\nexports.Options = Options;\r\n/** Indicates the desired kind of a conversion. */\r\nvar ConversionKind;\r\n(function (ConversionKind) {\r\n /** No conversion. */\r\n ConversionKind[ConversionKind[\"NONE\"] = 0] = \"NONE\";\r\n /** Implicit conversion. */\r\n ConversionKind[ConversionKind[\"IMPLICIT\"] = 1] = \"IMPLICIT\";\r\n /** Explicit conversion. */\r\n ConversionKind[ConversionKind[\"EXPLICIT\"] = 2] = \"EXPLICIT\";\r\n})(ConversionKind = exports.ConversionKind || (exports.ConversionKind = {}));\r\n/** Compiler interface. */\r\nvar Compiler = /** @class */ (function (_super) {\r\n __extends(Compiler, _super);\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n function Compiler(program, options) {\r\n if (options === void 0) { options = null; }\r\n var _this = _super.call(this, program.diagnostics) || this;\r\n /** Start function statements. */\r\n _this.startFunctionBody = new Array();\r\n /** Current enum in compilation. */\r\n _this.currentEnum = null;\r\n /** Current type in compilation. */\r\n _this.currentType = types_1.Type.void;\r\n /** Memory segments being compiled. */\r\n _this.memorySegments = new Array();\r\n /** Map of already compiled static string segments. */\r\n _this.stringSegments = new Map();\r\n /** Function table being compiled. */\r\n _this.functionTable = new Array();\r\n /** Already processed file names. */\r\n _this.files = new Set();\r\n _this.program = program;\r\n _this.options = options ? options : new Options();\r\n _this.memoryOffset = i64_new(max(_this.options.memoryBase, _this.options.usizeType.byteSize) // leave space for `null`\r\n );\r\n _this.module = module_1.Module.create();\r\n return _this;\r\n }\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n Compiler.compile = function (program, options) {\r\n if (options === void 0) { options = null; }\r\n return new Compiler(program, options).compile();\r\n };\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n Compiler.prototype.compile = function () {\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n this.program.initialize(this.options);\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(this.program.elements.get(\"start\"));\r\n assert(startFunctionPrototype.kind == program_1.ElementKind.FUNCTION_PROTOTYPE);\r\n var startFunctionInstance = new program_1.Function(startFunctionPrototype, startFunctionPrototype.internalName, null, // not generic\r\n null, // no parameters\r\n types_1.Type.void);\r\n startFunctionInstance.set(program_1.ElementFlags.START);\r\n this.currentFunction = this.startFunction = startFunctionInstance;\r\n var sources = this.program.sources;\r\n // compile entry file(s) while traversing to reachable elements\r\n for (var i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) {\r\n this.compileSource(sources[i]);\r\n }\r\n }\r\n // compile the start function if not empty\r\n if (this.startFunctionBody.length) {\r\n var typeRef = this.module.getFunctionTypeBySignature(module_1.NativeType.None, []);\r\n if (!typeRef)\r\n typeRef = this.module.addFunctionType(\"v\", module_1.NativeType.None, []);\r\n var ref;\r\n this.module.setStart(ref = this.module.addFunction(this.startFunction.prototype.internalName, typeRef, types_1.typesToNativeTypes(this.startFunction.additionalLocals), this.module.createBlock(null, this.startFunctionBody)));\r\n this.startFunction.finalize(this.module, ref);\r\n }\r\n // set up static memory segments and the heap base pointer\r\n if (!this.options.noMemory) {\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, this.options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (this.options.isWasm64) {\r\n this.module.addGlobal(\"HEAP_BASE\", module_1.NativeType.I64, false, this.module.createI64(i64_low(memoryOffset), i64_high(memoryOffset)));\r\n }\r\n else {\r\n this.module.addGlobal(\"HEAP_BASE\", module_1.NativeType.I32, false, this.module.createI32(i64_low(memoryOffset)));\r\n }\r\n // determine initial page size\r\n var pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n this.module.setMemory(i64_low(pages), module_1.Module.MAX_MEMORY_WASM32 /* TODO: not WASM64 compatible yet */, this.memorySegments, this.options.target, \"memory\");\r\n }\r\n // import memory if requested\r\n if (this.options.importMemory) {\r\n this.module.addMemoryImport(\"memory\", \"env\", \"memory\");\r\n }\r\n // set up function table\r\n if (k = this.functionTable.length) {\r\n var entries = new Array(k);\r\n for (i = 0; i < k; ++i) {\r\n entries[i] = this.functionTable[i].ref;\r\n }\r\n this.module.setFunctionTable(entries);\r\n }\r\n return this.module;\r\n };\r\n // sources\r\n Compiler.prototype.compileSourceByPath = function (normalizedPathWithoutExtension, reportNode) {\r\n var sources = this.program.sources;\r\n var source;\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (var i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n expected = normalizedPathWithoutExtension + \"/index.ts\";\r\n for (i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n expected = program_1.LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\";\r\n for (i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.File_0_not_found, reportNode.range, normalizedPathWithoutExtension);\r\n };\r\n Compiler.prototype.compileSource = function (source) {\r\n var files = this.files;\r\n if (files.has(source.normalizedPath))\r\n return;\r\n files.add(source.normalizedPath);\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (var i = 0, k = statements.length; i < k; ++i) {\r\n var statement = statements[i];\r\n switch (statement.kind) {\r\n case ast_1.NodeKind.CLASSDECLARATION:\r\n if ((noTreeShaking ||\r\n (isEntry && ast_1.hasModifier(ast_1.ModifierKind.EXPORT, statement.modifiers))) &&\r\n !statement.typeParameters.length) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n case ast_1.NodeKind.ENUMDECLARATION:\r\n if (noTreeShaking ||\r\n (isEntry && ast_1.hasModifier(ast_1.ModifierKind.EXPORT, statement.modifiers))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n case ast_1.NodeKind.FUNCTIONDECLARATION:\r\n if ((noTreeShaking ||\r\n (isEntry && ast_1.hasModifier(ast_1.ModifierKind.EXPORT, statement.modifiers))) &&\r\n !statement.isGeneric) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n case ast_1.NodeKind.IMPORT:\r\n this.compileSourceByPath(statement.normalizedPath, statement.path);\r\n break;\r\n case ast_1.NodeKind.NAMESPACEDECLARATION:\r\n if (noTreeShaking ||\r\n (isEntry && ast_1.hasModifier(ast_1.ModifierKind.EXPORT, statement.modifiers))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n case ast_1.NodeKind.VARIABLE:// global, always compiled as initializers might have side effects\r\n var variableInit = this.compileVariableStatement(statement);\r\n if (variableInit)\r\n startFunctionBody.push(variableInit);\r\n break;\r\n case ast_1.NodeKind.EXPORT:\r\n if (statement.normalizedPath != null) {\r\n this.compileSourceByPath(statement.normalizedPath, statement.path);\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n // otherwise a top-level statement that is part of the start function's body\r\n default:\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = this.startFunction;\r\n var expr = this.compileStatement(statement);\r\n this.startFunctionBody.push(expr);\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n };\r\n // globals\r\n Compiler.prototype.compileGlobalDeclaration = function (declaration) {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != program_1.ElementKind.GLOBAL) {\r\n throw new Error(\"global expected\");\r\n }\r\n if (!this.compileGlobal(element)) {\r\n return null;\r\n }\r\n return element;\r\n };\r\n Compiler.prototype.compileGlobal = function (global) {\r\n if (global.is(program_1.ElementFlags.COMPILED) || global.is(program_1.ElementFlags.BUILTIN)) {\r\n return true;\r\n }\r\n var declaration = global.declaration;\r\n var initExpr = 0;\r\n if (global.type == types_1.Type.void) {\r\n if (declaration.type) {\r\n var resolvedType = this.program.resolveType(declaration.type); // reports\r\n if (!resolvedType)\r\n return false;\r\n if (resolvedType == types_1.Type.void) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_0_is_not_assignable_to_type_1, declaration.type.range, \"*\", resolvedType.toString());\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n }\r\n else if (declaration.initializer) {\r\n initExpr = this.compileExpression(// reports\r\n declaration.initializer, types_1.Type.void, 0 /* NONE */);\r\n if (this.currentType == types_1.Type.void) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_0_is_not_assignable_to_type_1, declaration.initializer.range, this.currentType.toString(), \"\");\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Type_expected, declaration.name.range.atEnd);\r\n return false;\r\n }\r\n }\r\n var nativeType = global.type.toNativeType();\r\n if (global.is(program_1.ElementFlags.DECLARED)) {\r\n if (global.is(program_1.ElementFlags.CONSTANT)) {\r\n this.module.addGlobalImport(global.internalName, global.namespace\r\n ? global.namespace.simpleName\r\n : \"env\", global.simpleName, nativeType);\r\n global.set(program_1.ElementFlags.COMPILED);\r\n return true;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, declaration.range);\r\n }\r\n return false;\r\n }\r\n var initializeInStart = false;\r\n if (global.is(program_1.ElementFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type);\r\n }\r\n else {\r\n if (declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(declaration.initializer, global.type);\r\n }\r\n if (_BinaryenExpressionGetId(initExpr) != module_1.ExpressionId.Const) {\r\n if (global.is(program_1.ElementFlags.CONSTANT)) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(initExpr) != module_1.ExpressionId.Const) {\r\n this.warning(diagnostics_1.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable, declaration.range);\r\n initializeInStart = true;\r\n }\r\n }\r\n else {\r\n initializeInStart = true;\r\n }\r\n }\r\n }\r\n else {\r\n initExpr = global.type.toNativeZero(this.module);\r\n }\r\n }\r\n var internalName = global.internalName;\r\n if (initializeInStart) {\r\n this.module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(this.module));\r\n var setExpr = this.module.createSetGlobal(internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n }\r\n else {\r\n if (global.is(program_1.ElementFlags.CONSTANT)) {\r\n var exprType = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n case module_1.NativeType.I32:\r\n global.constantValueKind = 1 /* INTEGER */;\r\n global.constantIntegerValue = i64_new(_BinaryenConstGetValueI32(initExpr), 0);\r\n break;\r\n case module_1.NativeType.I64:\r\n global.constantValueKind = 1 /* INTEGER */;\r\n global.constantIntegerValue = i64_new(_BinaryenConstGetValueI64Low(initExpr), _BinaryenConstGetValueI64High(initExpr));\r\n break;\r\n case module_1.NativeType.F32:\r\n global.constantValueKind = 2 /* FLOAT */;\r\n global.constantFloatValue = _BinaryenConstGetValueF32(initExpr);\r\n break;\r\n case module_1.NativeType.F64:\r\n global.constantValueKind = 2 /* FLOAT */;\r\n global.constantFloatValue = _BinaryenConstGetValueF64(initExpr);\r\n break;\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n global.set(program_1.ElementFlags.INLINED);\r\n if (declaration.isTopLevel) {\r\n this.module.addGlobal(internalName, nativeType, !global.is(program_1.ElementFlags.CONSTANT), initExpr);\r\n }\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addGlobalExport(global.internalName, declaration.programLevelInternalName);\r\n }\r\n }\r\n else {\r\n this.module.addGlobal(internalName, nativeType, !global.is(program_1.ElementFlags.CONSTANT), initExpr);\r\n }\r\n }\r\n global.set(program_1.ElementFlags.COMPILED);\r\n return true;\r\n };\r\n // enums\r\n Compiler.prototype.compileEnumDeclaration = function (declaration) {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != program_1.ElementKind.ENUM)\r\n throw new Error(\"enum expected\");\r\n return this.compileEnum(element) ? element : null;\r\n };\r\n Compiler.prototype.compileEnum = function (element) {\r\n if (element.is(program_1.ElementFlags.COMPILED))\r\n return true;\r\n // members might reference each other, triggering another compile\r\n element.set(program_1.ElementFlags.COMPILED);\r\n this.currentEnum = element;\r\n var previousValue = null;\r\n if (element.members) {\r\n try {\r\n for (var _a = __values(element.members.values()), _b = _a.next(); !_b.done; _b = _a.next()) {\r\n var member = _b.value;\r\n if (member.kind != program_1.ElementKind.ENUMVALUE)\r\n continue; // happens if an enum is also a namespace\r\n var initInStart = false;\r\n var val = member;\r\n var valueDeclaration = val.declaration;\r\n val.set(program_1.ElementFlags.COMPILED);\r\n if (val.is(program_1.ElementFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n this.module.addGlobal(val.internalName, module_1.NativeType.I32, false, // constant\r\n this.module.createI32(val.constantValue));\r\n }\r\n }\r\n else {\r\n var initExpr;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(valueDeclaration.value, types_1.Type.i32);\r\n if (_BinaryenExpressionGetId(initExpr) != module_1.ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(initExpr) != module_1.ExpressionId.Const) {\r\n if (element.is(program_1.ElementFlags.CONSTANT)) {\r\n this.warning(diagnostics_1.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable, valueDeclaration.range);\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n }\r\n else if (previousValue == null) {\r\n initExpr = this.module.createI32(0);\r\n }\r\n else if (previousValue.is(program_1.ElementFlags.INLINED)) {\r\n initExpr = this.module.createI32(previousValue.constantValue + 1);\r\n }\r\n else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = this.module.createBinary(module_1.BinaryOp.AddI32, this.module.createGetGlobal(previousValue.internalName, module_1.NativeType.I32), this.module.createI32(1));\r\n if (element.is(program_1.ElementFlags.CONSTANT)) {\r\n this.warning(diagnostics_1.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable, valueDeclaration.range);\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n this.module.addGlobal(val.internalName, module_1.NativeType.I32, true, // mutable\r\n this.module.createI32(0));\r\n var setExpr = this.module.createSetGlobal(val.internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n }\r\n else {\r\n this.module.addGlobal(val.internalName, module_1.NativeType.I32, false, initExpr);\r\n if (_BinaryenExpressionGetType(initExpr) == module_1.NativeType.I32) {\r\n val.constantValue = _BinaryenConstGetValueI32(initExpr);\r\n val.set(program_1.ElementFlags.INLINED);\r\n }\r\n else {\r\n throw new Error(\"i32 expected\");\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n // export values if the enum is exported\r\n if (element.declaration.range.source.isEntry && element.declaration.isTopLevelExport) {\r\n if (member.is(program_1.ElementFlags.INLINED)) {\r\n this.module.addGlobalExport(member.internalName, member.internalName);\r\n }\r\n else if (valueDeclaration) {\r\n this.warning(diagnostics_1.DiagnosticCode.Cannot_export_a_mutable_global, valueDeclaration.range);\r\n }\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n var e_1, _c;\r\n };\r\n // functions\r\n Compiler.prototype.compileFunctionDeclaration = function (declaration, typeArguments, contextualTypeArguments) {\r\n if (contextualTypeArguments === void 0) { contextualTypeArguments = null; }\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != program_1.ElementKind.FUNCTION_PROTOTYPE) {\r\n throw new Error(\"function expected\");\r\n }\r\n return this.compileFunctionUsingTypeArguments(// reports\r\n element, typeArguments, contextualTypeArguments, element.declaration.name);\r\n };\r\n Compiler.prototype.compileFunctionUsingTypeArguments = function (prototype, typeArguments, contextualTypeArguments, reportNode) {\r\n var instance = prototype.resolveInclTypeArguments(// reports\r\n typeArguments, contextualTypeArguments, reportNode);\r\n if (!instance)\r\n return null;\r\n return this.compileFunction(instance) ? instance : null;\r\n };\r\n Compiler.prototype.compileFunction = function (instance) {\r\n if (instance.is(program_1.ElementFlags.COMPILED))\r\n return true;\r\n assert(!instance.is(program_1.ElementFlags.BUILTIN) || instance.simpleName == \"abort\");\r\n var declaration = instance.prototype.declaration;\r\n if (instance.is(program_1.ElementFlags.DECLARED)) {\r\n if (declaration.body) {\r\n this.error(diagnostics_1.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts, declaration.name.range);\r\n return false;\r\n }\r\n }\r\n else if (!declaration.body) {\r\n this.error(diagnostics_1.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration, declaration.name.range);\r\n return false;\r\n }\r\n // might trigger compilation of other functions referring to this one\r\n instance.set(program_1.ElementFlags.COMPILED);\r\n // compile statements\r\n var stmt = 0;\r\n if (!instance.is(program_1.ElementFlags.DECLARED)) {\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n var body = assert(declaration.body, \"implementation expected\");\r\n stmt = this.compileStatement(body);\r\n // make sure the top-level branch or all child branches return\r\n var allBranchesReturn = this.currentFunction.flow.finalize();\r\n if (instance.returnType != types_1.Type.void && !allBranchesReturn) {\r\n this.error(diagnostics_1.DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value, assert(declaration.returnType, \"return type expected\").range);\r\n }\r\n this.currentFunction = previousFunction;\r\n }\r\n // create the function type\r\n var numParameters = instance.parameters ? instance.parameters.length : 0;\r\n var numParametersInclThis = instance.instanceMethodOf ? numParameters + 1 : numParameters;\r\n var paramIndex = 0;\r\n var nativeResultType = instance.returnType.toNativeType();\r\n var nativeParamTypes = new Array(numParametersInclThis);\r\n var signatureNameParts = new Array(numParametersInclThis + 1);\r\n if (instance.instanceMethodOf) {\r\n nativeParamTypes[paramIndex] = this.options.isWasm64 ? module_1.NativeType.I64 : module_1.NativeType.I32;\r\n signatureNameParts[paramIndex++] = instance.instanceMethodOf.type.toSignatureString();\r\n }\r\n if (instance.parameters) {\r\n for (var i = 0; i < numParameters; ++i) {\r\n nativeParamTypes[paramIndex] = instance.parameters[i].type.toNativeType();\r\n signatureNameParts[paramIndex++] = instance.parameters[i].type.toSignatureString();\r\n }\r\n }\r\n signatureNameParts[paramIndex] = instance.returnType.toSignatureString();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeResultType, nativeParamTypes);\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(signatureNameParts.join(\"\"), nativeResultType, nativeParamTypes);\r\n }\r\n // create the function\r\n var ref;\r\n if (instance.is(program_1.ElementFlags.DECLARED)) {\r\n ref = this.module.addFunctionImport(instance.internalName, instance.prototype.namespace\r\n ? instance.prototype.namespace.simpleName\r\n : \"env\", instance.simpleName, typeRef);\r\n }\r\n else {\r\n ref = this.module.addFunction(instance.internalName, typeRef, types_1.typesToNativeTypes(instance.additionalLocals), assert(stmt));\r\n }\r\n // check module export\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addFunctionExport(instance.internalName, declaration.name.text);\r\n }\r\n instance.finalize(this.module, ref);\r\n return true;\r\n };\r\n // namespaces\r\n Compiler.prototype.compileNamespaceDeclaration = function (declaration) {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n switch (member.kind) {\r\n case ast_1.NodeKind.CLASSDECLARATION:\r\n if ((noTreeShaking ||\r\n ast_1.hasModifier(ast_1.ModifierKind.EXPORT, member.modifiers)) && !member.typeParameters.length) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n case ast_1.NodeKind.INTERFACEDECLARATION:\r\n if ((noTreeShaking ||\r\n ast_1.hasModifier(ast_1.ModifierKind.EXPORT, member.modifiers)) && !member.typeParameters.length) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n case ast_1.NodeKind.ENUMDECLARATION:\r\n if (noTreeShaking ||\r\n ast_1.hasModifier(ast_1.ModifierKind.EXPORT, member.modifiers)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n case ast_1.NodeKind.FUNCTIONDECLARATION:\r\n if ((noTreeShaking ||\r\n ast_1.hasModifier(ast_1.ModifierKind.EXPORT, member.modifiers)) &&\r\n !member.isGeneric) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n case ast_1.NodeKind.NAMESPACEDECLARATION:\r\n if (noTreeShaking ||\r\n ast_1.hasModifier(ast_1.ModifierKind.EXPORT, member.modifiers)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n case ast_1.NodeKind.VARIABLE:\r\n if (noTreeShaking ||\r\n ast_1.hasModifier(ast_1.ModifierKind.EXPORT, member.modifiers)) {\r\n var variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit)\r\n this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n default:\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n };\r\n Compiler.prototype.compileNamespace = function (ns) {\r\n if (!ns.members)\r\n return;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n try {\r\n for (var _a = __values(ns.members.values()), _b = _a.next(); !_b.done; _b = _a.next()) {\r\n var element = _b.value;\r\n switch (element.kind) {\r\n case program_1.ElementKind.CLASS_PROTOTYPE:\r\n if ((noTreeShaking ||\r\n element.is(program_1.ElementFlags.EXPORTED)) && !element.is(program_1.ElementFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n case program_1.ElementKind.ENUM:\r\n this.compileEnum(element);\r\n break;\r\n case program_1.ElementKind.FUNCTION_PROTOTYPE:\r\n if ((noTreeShaking || element.is(program_1.ElementFlags.EXPORTED)) && !element.is(program_1.ElementFlags.GENERIC)) {\r\n this.compileFunctionUsingTypeArguments(element, [], null, element.declaration.name);\r\n }\r\n break;\r\n case program_1.ElementKind.GLOBAL:\r\n this.compileGlobal(element);\r\n break;\r\n case program_1.ElementKind.NAMESPACE:\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n var e_2, _c;\r\n };\r\n // exports\r\n Compiler.prototype.compileExportStatement = function (statement) {\r\n var members = statement.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n var internalExportName = (statement.range.source.internalPath +\r\n program_1.PATH_DELIMITER +\r\n member.externalName.text);\r\n var element = this.program.exports.get(internalExportName);\r\n if (!element)\r\n continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case program_1.ElementKind.CLASS_PROTOTYPE:\r\n if (!element.is(program_1.ElementFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n case program_1.ElementKind.ENUM:\r\n this.compileEnum(element);\r\n break;\r\n case program_1.ElementKind.FUNCTION_PROTOTYPE:\r\n if (!element.is(program_1.ElementFlags.GENERIC) &&\r\n statement.range.source.isEntry) {\r\n var functionInstance = this.compileFunctionUsingTypeArguments(element, [], null, element.declaration.name);\r\n if (functionInstance) {\r\n var functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n this.module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n case program_1.ElementKind.GLOBAL:\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n var globalDeclaration = element.declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if (element.is(program_1.ElementFlags.INLINED)) {\r\n this.module.addGlobalExport(element.internalName, member.externalName.text);\r\n }\r\n else {\r\n this.warning(diagnostics_1.DiagnosticCode.Cannot_export_a_mutable_global, member.range);\r\n }\r\n }\r\n }\r\n break;\r\n case program_1.ElementKind.NAMESPACE:\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n };\r\n // classes\r\n Compiler.prototype.compileClassDeclaration = function (declaration, typeArguments, contextualTypeArguments, alternativeReportNode) {\r\n if (contextualTypeArguments === void 0) { contextualTypeArguments = null; }\r\n if (alternativeReportNode === void 0) { alternativeReportNode = null; }\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != program_1.ElementKind.CLASS_PROTOTYPE) {\r\n throw new Error(\"class expected\");\r\n }\r\n this.compileClassUsingTypeArguments(element, typeArguments, contextualTypeArguments, alternativeReportNode);\r\n };\r\n Compiler.prototype.compileClassUsingTypeArguments = function (prototype, typeArguments, contextualTypeArguments, alternativeReportNode) {\r\n if (contextualTypeArguments === void 0) { contextualTypeArguments = null; }\r\n if (alternativeReportNode === void 0) { alternativeReportNode = null; }\r\n var instance = prototype.resolveInclTypeArguments(// reports\r\n typeArguments, contextualTypeArguments, alternativeReportNode);\r\n if (!instance)\r\n return;\r\n this.compileClass(instance);\r\n };\r\n Compiler.prototype.compileClass = function (instance) {\r\n if (instance.is(program_1.ElementFlags.COMPILED))\r\n return true;\r\n instance.set(program_1.ElementFlags.COMPILED);\r\n return true;\r\n };\r\n Compiler.prototype.compileInterfaceDeclaration = function (declaration, typeArguments, contextualTypeArguments, alternativeReportNode) {\r\n if (contextualTypeArguments === void 0) { contextualTypeArguments = null; }\r\n if (alternativeReportNode === void 0) { alternativeReportNode = null; }\r\n throw new Error(\"not implemented\");\r\n };\r\n // memory\r\n /** Adds a static memory segment with the specified data. */\r\n Compiler.prototype.addMemorySegment = function (buffer, alignment) {\r\n if (alignment === void 0) { alignment = 8; }\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = module_1.MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n };\r\n // function table\r\n /** Adds a function table entry and returns the assigned index. */\r\n Compiler.prototype.addFunctionTableEntry = function (func) {\r\n assert(func.is(program_1.ElementFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var index = this.functionTable.length;\r\n this.functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n };\r\n // statements\r\n Compiler.prototype.compileStatement = function (statement) {\r\n var expr;\r\n switch (statement.kind) {\r\n case ast_1.NodeKind.BLOCK:\r\n expr = this.compileBlockStatement(statement);\r\n break;\r\n case ast_1.NodeKind.BREAK:\r\n expr = this.compileBreakStatement(statement);\r\n break;\r\n case ast_1.NodeKind.CONTINUE:\r\n expr = this.compileContinueStatement(statement);\r\n break;\r\n case ast_1.NodeKind.DO:\r\n expr = this.compileDoStatement(statement);\r\n break;\r\n case ast_1.NodeKind.EMPTY:\r\n expr = this.compileEmptyStatement(statement);\r\n break;\r\n case ast_1.NodeKind.EXPRESSION:\r\n expr = this.compileExpressionStatement(statement);\r\n break;\r\n case ast_1.NodeKind.FOR:\r\n expr = this.compileForStatement(statement);\r\n break;\r\n case ast_1.NodeKind.IF:\r\n expr = this.compileIfStatement(statement);\r\n break;\r\n case ast_1.NodeKind.RETURN:\r\n expr = this.compileReturnStatement(statement);\r\n break;\r\n case ast_1.NodeKind.SWITCH:\r\n expr = this.compileSwitchStatement(statement);\r\n break;\r\n case ast_1.NodeKind.THROW:\r\n expr = this.compileThrowStatement(statement);\r\n break;\r\n case ast_1.NodeKind.TRY:\r\n expr = this.compileTryStatement(statement);\r\n break;\r\n case ast_1.NodeKind.VARIABLE:\r\n var variableInit = this.compileVariableStatement(statement);\r\n expr = variableInit ? variableInit : this.module.createNop();\r\n break;\r\n case ast_1.NodeKind.WHILE:\r\n expr = this.compileWhileStatement(statement);\r\n break;\r\n case ast_1.NodeKind.TYPEDECLARATION:\r\n if (this.currentFunction == this.startFunction) {\r\n return this.module.createNop();\r\n }\r\n // fall-through: must be top-level; function bodies are not guaranteed to be evaluated\r\n default:\r\n throw new Error(\"statement expected\");\r\n }\r\n this.addDebugLocation(expr, statement.range);\r\n return expr;\r\n };\r\n Compiler.prototype.compileStatements = function (statements) {\r\n var k = statements.length;\r\n var stmts = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n stmts[i] = this.compileStatement(statements[i]);\r\n }\r\n return stmts; // array of 0-es in noEmit-mode\r\n };\r\n Compiler.prototype.compileBlockStatement = function (statement) {\r\n var statements = statement.statements;\r\n // NOTE that we could optimize this to a NOP if empty or unwrap a single\r\n // statement, but that's not what the source told us to do and left to the\r\n // optimizer.\r\n // Not actually a branch, but can contain its own scoped variables.\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var stmt = this.module.createBlock(null, this.compileStatements(statements), module_1.NativeType.None);\r\n var stmtReturns = this.currentFunction.flow.is(1 /* RETURNS */);\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n if (stmtReturns) {\r\n this.currentFunction.flow.set(1 /* RETURNS */);\r\n }\r\n return stmt;\r\n };\r\n Compiler.prototype.compileBreakStatement = function (statement) {\r\n if (statement.label) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, statement.label.range);\r\n return this.module.createUnreachable();\r\n }\r\n var breakLabel = this.currentFunction.flow.breakLabel;\r\n if (breakLabel == null) {\r\n this.error(diagnostics_1.DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement, statement.range);\r\n return this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(4 /* POSSIBLY_BREAKS */);\r\n return this.module.createBreak(breakLabel);\r\n };\r\n Compiler.prototype.compileContinueStatement = function (statement) {\r\n if (statement.label) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, statement.label.range);\r\n return this.module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var continueLabel = this.currentFunction.flow.continueLabel;\r\n if (continueLabel == null) {\r\n this.error(diagnostics_1.DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement, statement.range);\r\n return this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(8 /* POSSIBLY_CONTINUES */);\r\n return this.module.createBreak(continueLabel);\r\n };\r\n Compiler.prototype.compileDoStatement = function (statement) {\r\n // A do statement does not initiate a new branch because it is executed at\r\n // least once, but has its own break and continue labels.\r\n var label = this.currentFunction.enterBreakContext();\r\n var previousBreakLabel = this.currentFunction.flow.breakLabel;\r\n var previousContinueLabel = this.currentFunction.flow.continueLabel;\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\r\n var body = this.compileStatement(statement.statement);\r\n // Reset to the previous break and continue labels, if any.\r\n this.currentFunction.flow.breakLabel = previousBreakLabel;\r\n this.currentFunction.flow.continueLabel = previousContinueLabel;\r\n var condition = makeIsTrueish(this.compileExpression(statement.condition, types_1.Type.i32, 0 /* NONE */), this.currentType, this.module);\r\n this.currentFunction.leaveBreakContext();\r\n return this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel, this.module.createBlock(null, [\r\n body,\r\n this.module.createBreak(continueLabel, condition)\r\n ], module_1.NativeType.None))\r\n ], module_1.NativeType.None);\r\n };\r\n Compiler.prototype.compileEmptyStatement = function (statement) {\r\n return this.module.createNop();\r\n };\r\n Compiler.prototype.compileExpressionStatement = function (statement) {\r\n var expr = this.compileExpression(statement.expression, types_1.Type.void, 0 /* NONE */);\r\n if (this.currentType != types_1.Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = types_1.Type.void;\r\n }\r\n return expr;\r\n };\r\n Compiler.prototype.compileForStatement = function (statement) {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var context = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + context;\r\n // Compile in correct order\r\n var initializer = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : this.module.createNop();\r\n var condition = statement.condition\r\n ? this.compileExpression(statement.condition, types_1.Type.i32)\r\n : this.module.createI32(1);\r\n var incrementor = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, types_1.Type.void)\r\n : this.module.createNop();\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = !statement.condition && this.currentFunction.flow.is(1 /* RETURNS */);\r\n // TODO: check other always-true conditions as well, not just omitted\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n var expr = this.module.createBlock(breakLabel, [\r\n initializer,\r\n this.module.createLoop(continueLabel, this.module.createBlock(null, [\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n incrementor,\r\n this.module.createBreak(continueLabel)\r\n ], module_1.NativeType.None))\r\n ], module_1.NativeType.None))\r\n ], module_1.NativeType.None);\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n this.currentFunction.flow.set(1 /* RETURNS */);\r\n expr = this.module.createBlock(null, [\r\n expr,\r\n this.module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n };\r\n Compiler.prototype.compileIfStatement = function (statement) {\r\n // The condition doesn't initiate a branch yet\r\n var condition = makeIsTrueish(this.compileExpression(statement.condition, types_1.Type.i32, 0 /* NONE */), this.currentType, this.module);\r\n // Each arm initiates a branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var ifTrue = this.compileStatement(statement.ifTrue);\r\n var ifTrueReturns = this.currentFunction.flow.is(1 /* RETURNS */);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n var ifFalse = 0;\r\n var ifFalseReturns = false;\r\n if (statement.ifFalse) {\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n ifFalse = this.compileStatement(statement.ifFalse);\r\n ifFalseReturns = this.currentFunction.flow.is(1 /* RETURNS */);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n }\r\n if (ifTrueReturns && ifFalseReturns) {\r\n this.currentFunction.flow.set(1 /* RETURNS */);\r\n }\r\n return this.module.createIf(condition, ifTrue, ifFalse);\r\n };\r\n Compiler.prototype.compileReturnStatement = function (statement) {\r\n var expression = 0;\r\n if (statement.value) {\r\n expression = this.compileExpression(statement.value, this.currentFunction.returnType);\r\n }\r\n // Remember that this flow returns\r\n this.currentFunction.flow.set(1 /* RETURNS */);\r\n return this.module.createReturn(expression);\r\n };\r\n Compiler.prototype.compileSwitchStatement = function (statement) {\r\n // Everything within a switch uses the same break context\r\n var context = this.currentFunction.enterBreakContext();\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = this.currentFunction.getTempLocal(types_1.Type.u32);\r\n var k = statement.cases.length;\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + k);\r\n breaks[0] = this.module.createSetLocal(// initializer\r\n tempLocal.index, this.compileExpression(statement.condition, types_1.Type.u32));\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (var i = 0; i < k; ++i) {\r\n var case_ = statement.cases[i];\r\n if (case_.label) {\r\n breaks[breakIndex++] = this.module.createBreak(\"case\" + i.toString(10) + \"|\" + context, this.module.createBinary(module_1.BinaryOp.EqI32, this.module.createGetLocal(tempLocal.index, module_1.NativeType.I32), this.compileExpression(case_.label, types_1.Type.i32)));\r\n }\r\n else {\r\n defaultIndex = i;\r\n }\r\n }\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = this.module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\") + \"|\" + context);\r\n // nest blocks in order\r\n var currentBlock = this.module.createBlock(\"case0|\" + context, breaks, module_1.NativeType.None);\r\n var alwaysReturns = true;\r\n for (i = 0; i < k; ++i) {\r\n case_ = statement.cases[i];\r\n var l = case_.statements.length;\r\n var body = new Array(1 + l);\r\n body[0] = currentBlock;\r\n // Each switch case initiates a new branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n var fallsThrough = i != k - 1;\r\n var nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (var j = 0; j < l; ++j) {\r\n body[j + 1] = this.compileStatement(case_.statements[j]);\r\n }\r\n if (!(fallsThrough || this.currentFunction.flow.is(1 /* RETURNS */))) {\r\n alwaysReturns = false; // ignore fall-throughs\r\n }\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n currentBlock = this.module.createBlock(nextLabel, body, module_1.NativeType.None);\r\n }\r\n this.currentFunction.leaveBreakContext();\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0 && alwaysReturns) {\r\n this.currentFunction.flow.set(1 /* RETURNS */);\r\n // Binaryen understands that so we don't need a hint\r\n }\r\n return currentBlock;\r\n };\r\n Compiler.prototype.compileThrowStatement = function (statement) {\r\n // Remember that this branch possibly throws\r\n this.currentFunction.flow.set(2 /* POSSIBLY_THROWS */);\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n this.currentFunction.flow.set(1 /* RETURNS */);\r\n // TODO: requires exception-handling spec.\r\n return this.module.createUnreachable();\r\n };\r\n Compiler.prototype.compileTryStatement = function (statement) {\r\n throw new Error(\"not implemented\");\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n };\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n Compiler.prototype.compileVariableStatement = function (statement, isKnownGlobal) {\r\n if (isKnownGlobal === void 0) { isKnownGlobal = false; }\r\n var declarations = statement.declarations;\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (this.currentFunction == this.startFunction &&\r\n statement.parent && statement.parent.kind == ast_1.NodeKind.SOURCE)) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n // other variables become locals\r\n var initializers = new Array();\r\n for (i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var name = declaration.name.text;\r\n var type = null;\r\n var init = 0;\r\n if (declaration.type) {\r\n type = this.program.resolveType(// reports\r\n declaration.type, this.currentFunction.contextualTypeArguments);\r\n if (!type)\r\n continue;\r\n if (declaration.initializer) {\r\n init = this.compileExpression(declaration.initializer, type); // reports\r\n }\r\n }\r\n else if (declaration.initializer) {\r\n init = this.compileExpression(// reports\r\n declaration.initializer, types_1.Type.void, 0 /* NONE */);\r\n if (this.currentType == types_1.Type.void) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_0_is_not_assignable_to_type_1, declaration.range, this.currentType.toString(), \"\");\r\n continue;\r\n }\r\n type = this.currentType;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Type_expected, declaration.name.range.atEnd);\r\n continue;\r\n }\r\n if (ast_1.hasModifier(ast_1.ModifierKind.CONST, declaration.modifiers)) {\r\n if (init) {\r\n init = this.precomputeExpressionRef(init);\r\n if (_BinaryenExpressionGetId(init) == module_1.ExpressionId.Const) {\r\n var local = new program_1.Local(this.program, name, -1, type);\r\n switch (_BinaryenExpressionGetType(init)) {\r\n case module_1.NativeType.I32:\r\n local = local.withConstantIntegerValue(_BinaryenConstGetValueI32(init), 0);\r\n break;\r\n case module_1.NativeType.I64:\r\n local = local.withConstantIntegerValue(_BinaryenConstGetValueI64Low(init), _BinaryenConstGetValueI64High(init));\r\n break;\r\n case module_1.NativeType.F32:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n case module_1.NativeType.F64:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n var scopedLocals = this.currentFunction.flow.scopedLocals;\r\n if (!scopedLocals)\r\n scopedLocals = this.currentFunction.flow.scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(diagnostics_1.DiagnosticCode.Duplicate_identifier_0, declaration.name.range, name);\r\n return 0;\r\n }\r\n scopedLocals.set(name, local);\r\n return 0;\r\n }\r\n else {\r\n this.warning(diagnostics_1.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable, declaration.range);\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._const_declarations_must_be_initialized, declaration.range);\r\n }\r\n }\r\n if (ast_1.hasModifier(ast_1.ModifierKind.LET, declaration.modifiers)) {\r\n this.currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports\r\n }\r\n else {\r\n this.currentFunction.addLocal(type, name); // reports\r\n }\r\n if (init) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, init));\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, module_1.NativeType.None)\r\n : 0;\r\n };\r\n Compiler.prototype.compileWhileStatement = function (statement) {\r\n // The condition does not yet initialize a branch\r\n var condition = makeIsTrueish(this.compileExpression(statement.condition, types_1.Type.i32, 0 /* NONE */), this.currentType, this.module);\r\n // Statements initiate a new branch with its own break context\r\n var label = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = false && this.currentFunction.flow.is(1 /* RETURNS */);\r\n // TODO: evaluate possible always-true conditions\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n var expr = this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel, this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n this.module.createBreak(continueLabel)\r\n ], module_1.NativeType.None)))\r\n ], module_1.NativeType.None);\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n expr = this.module.createBlock(null, [\r\n expr,\r\n this.module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n };\r\n // expressions\r\n /** Compiles an inlined constant value of a variable-like element. */\r\n Compiler.prototype.compileInlineConstant = function (element, contextualType) {\r\n assert(element.is(program_1.ElementFlags.INLINED));\r\n switch (element.type.is(4 /* INTEGER */) &&\r\n contextualType.is(4 /* INTEGER */) &&\r\n element.type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = element.type).kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n var shift = element.type.computeSmallIntegerShift(types_1.Type.i32);\r\n return this.module.createI32(element.constantValueKind == 1 /* INTEGER */\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0);\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n var mask = element.type.computeSmallIntegerMask(types_1.Type.i32);\r\n return this.module.createI32(element.constantValueKind == 1 /* INTEGER */\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0);\r\n case 2 /* I32 */:\r\n case 7 /* U32 */:\r\n return this.module.createI32(element.constantValueKind == 1 /* INTEGER */\r\n ? i64_low(element.constantIntegerValue)\r\n : 0);\r\n case 4 /* ISIZE */:\r\n case 9 /* USIZE */:\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(element.constantValueKind == 1 /* INTEGER */\r\n ? i64_low(element.constantIntegerValue)\r\n : 0);\r\n }\r\n // fall-through\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n return element.constantValueKind == 1 /* INTEGER */\r\n ? this.module.createI64(i64_low(element.constantIntegerValue), i64_high(element.constantIntegerValue))\r\n : this.module.createI64(0);\r\n case 11 /* F32 */:\r\n return this.module.createF32(element.constantFloatValue);\r\n case 12 /* F64 */:\r\n return this.module.createF64(element.constantFloatValue);\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n };\r\n Compiler.prototype.compileExpression = function (expression, contextualType, conversionKind, wrapSmallIntegers) {\r\n if (conversionKind === void 0) { conversionKind = 1 /* IMPLICIT */; }\r\n if (wrapSmallIntegers === void 0) { wrapSmallIntegers = true; }\r\n this.currentType = contextualType;\r\n var expr;\r\n switch (expression.kind) {\r\n case ast_1.NodeKind.ASSERTION:\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.BINARY:\r\n expr = this.compileBinaryExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n case ast_1.NodeKind.CALL:\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.COMMA:\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.ELEMENTACCESS:\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.FUNCTION:\r\n case ast_1.NodeKind.FUNCTIONARROW:\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.IDENTIFIER:\r\n case ast_1.NodeKind.FALSE:\r\n case ast_1.NodeKind.NULL:\r\n case ast_1.NodeKind.THIS:\r\n case ast_1.NodeKind.TRUE:\r\n expr = this.compileIdentifierExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.LITERAL:\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.NEW:\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.PARENTHESIZED:\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.PROPERTYACCESS:\r\n expr = this.compilePropertyAccessExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.TERNARY:\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.UNARYPOSTFIX:\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n case ast_1.NodeKind.UNARYPREFIX:\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n default:\r\n throw new Error(\"expression expected\");\r\n }\r\n if (conversionKind != 0 /* NONE */ && this.currentType != contextualType) {\r\n expr = this.convertExpression(expr, this.currentType, contextualType, conversionKind, expression);\r\n this.currentType = contextualType;\r\n }\r\n this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n };\r\n Compiler.prototype.precomputeExpression = function (expression, contextualType, conversionKind) {\r\n if (conversionKind === void 0) { conversionKind = 1 /* IMPLICIT */; }\r\n return this.precomputeExpressionRef(this.compileExpression(expression, contextualType, conversionKind));\r\n };\r\n Compiler.prototype.precomputeExpressionRef = function (expr) {\r\n var nativeType = this.currentType.toNativeType();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeType, []);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(this.currentType.toSignatureString(), nativeType, []);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = this.module.addFunction(\"__precompute\", typeRef, [], expr);\r\n this.module.runPasses([\"precompute\"], funcRef);\r\n var ret = _BinaryenFunctionGetBody(funcRef);\r\n this.module.removeFunction(\"__precompute\");\r\n if (typeRefAdded) {\r\n // TODO: also remove the function type somehow if no longer used or make the C-API accept\r\n // a `null` typeRef, using an implicit type.\r\n }\r\n return ret;\r\n };\r\n Compiler.prototype.convertExpression = function (expr, fromType, toType, conversionKind, reportNode) {\r\n if (conversionKind == 0 /* NONE */) {\r\n assert(false, \"concrete type expected\");\r\n return expr;\r\n }\r\n // void to any\r\n if (fromType.kind == 13 /* VOID */) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_0_is_not_assignable_to_type_1, reportNode.range, fromType.toString(), toType.toString());\r\n return this.module.createUnreachable();\r\n }\r\n // any to void\r\n if (toType.kind == 13 /* VOID */) {\r\n return this.module.createDrop(expr);\r\n }\r\n if (conversionKind == 1 /* IMPLICIT */ && !fromType.isAssignableTo(toType)) {\r\n this.error(diagnostics_1.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast, reportNode.range, fromType.toString(), toType.toString());\r\n }\r\n var mod = this.module;\r\n var losesInformation = false;\r\n if (fromType.is(8 /* FLOAT */)) {\r\n // float to float\r\n if (toType.is(8 /* FLOAT */)) {\r\n if (fromType.kind == 11 /* F32 */) {\r\n // f32 to f64\r\n if (toType.kind == 12 /* F64 */) {\r\n expr = mod.createUnary(module_1.UnaryOp.PromoteF32, expr);\r\n }\r\n // otherwise f32 to f32\r\n // f64 to f32\r\n }\r\n else if (toType.kind == 11 /* F32 */) {\r\n losesInformation = true;\r\n expr = mod.createUnary(module_1.UnaryOp.DemoteF64, expr);\r\n }\r\n // otherwise f64 to f64\r\n // float to int\r\n }\r\n else if (toType.is(4 /* INTEGER */)) {\r\n losesInformation = true;\r\n // f32 to int\r\n if (fromType.kind == 11 /* F32 */) {\r\n if (toType.is(1 /* SIGNED */)) {\r\n if (toType.is(64 /* LONG */)) {\r\n expr = mod.createUnary(module_1.UnaryOp.TruncF32ToI64, expr);\r\n }\r\n else {\r\n expr = mod.createUnary(module_1.UnaryOp.TruncF32ToI32, expr);\r\n if (toType.is(32 /* SMALL */)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n }\r\n else {\r\n if (toType.is(64 /* LONG */)) {\r\n expr = mod.createUnary(module_1.UnaryOp.TruncF32ToU64, expr);\r\n }\r\n else {\r\n expr = mod.createUnary(module_1.UnaryOp.TruncF32ToU32, expr);\r\n if (toType.is(32 /* SMALL */)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n }\r\n // f64 to int\r\n }\r\n else {\r\n if (toType.is(1 /* SIGNED */)) {\r\n if (toType.is(64 /* LONG */)) {\r\n expr = mod.createUnary(module_1.UnaryOp.TruncF64ToI64, expr);\r\n }\r\n else {\r\n expr = mod.createUnary(module_1.UnaryOp.TruncF64ToI32, expr);\r\n if (toType.is(32 /* SMALL */)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n }\r\n else {\r\n if (toType.is(64 /* LONG */)) {\r\n expr = mod.createUnary(module_1.UnaryOp.TruncF64ToU64, expr);\r\n }\r\n else {\r\n expr = mod.createUnary(module_1.UnaryOp.TruncF64ToU32, expr);\r\n if (toType.is(32 /* SMALL */)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n }\r\n }\r\n // float to void\r\n }\r\n else {\r\n assert(toType.flags == 0 /* NONE */, \"void type expected\");\r\n expr = this.module.createDrop(expr);\r\n }\r\n // int to float\r\n }\r\n else if (fromType.is(4 /* INTEGER */) && toType.is(8 /* FLOAT */)) {\r\n // int to f32\r\n if (toType.kind == 11 /* F32 */) {\r\n if (fromType.is(64 /* LONG */)) {\r\n losesInformation = true;\r\n expr = mod.createUnary(fromType.is(1 /* SIGNED */)\r\n ? module_1.UnaryOp.ConvertI64ToF32\r\n : module_1.UnaryOp.ConvertU64ToF32, expr);\r\n }\r\n else {\r\n losesInformation = !fromType.is(32 /* SMALL */);\r\n expr = mod.createUnary(fromType.is(1 /* SIGNED */)\r\n ? module_1.UnaryOp.ConvertI32ToF32\r\n : module_1.UnaryOp.ConvertU32ToF32, expr);\r\n }\r\n // int to f64\r\n }\r\n else {\r\n if (fromType.is(64 /* LONG */)) {\r\n losesInformation = true;\r\n expr = mod.createUnary(fromType.is(1 /* SIGNED */)\r\n ? module_1.UnaryOp.ConvertI64ToF64\r\n : module_1.UnaryOp.ConvertU64ToF64, expr);\r\n }\r\n else {\r\n expr = mod.createUnary(fromType.is(1 /* SIGNED */)\r\n ? module_1.UnaryOp.ConvertI32ToF64\r\n : module_1.UnaryOp.ConvertU32ToF64, expr);\r\n }\r\n }\r\n // int to int\r\n }\r\n else {\r\n if (fromType.is(64 /* LONG */)) {\r\n // i64 to i32\r\n if (!toType.is(64 /* LONG */)) {\r\n losesInformation = true;\r\n expr = mod.createUnary(module_1.UnaryOp.WrapI64, expr); // discards upper bits\r\n if (toType.is(32 /* SMALL */)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n // i32 to i64\r\n }\r\n else if (toType.is(64 /* LONG */)) {\r\n expr = mod.createUnary(toType.is(1 /* SIGNED */) ? module_1.UnaryOp.ExtendI32 : module_1.UnaryOp.ExtendU32, expr);\r\n // i32 or smaller to even smaller or same size int with change of sign\r\n }\r\n else if (toType.is(32 /* SMALL */) &&\r\n (fromType.size > toType.size ||\r\n (fromType.size == toType.size &&\r\n fromType.is(1 /* SIGNED */) != toType.is(1 /* SIGNED */)))) {\r\n losesInformation = true;\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n // otherwise (smaller) i32/u32 to (same size) i32/u32\r\n }\r\n return expr;\r\n };\r\n /** Computes the common compatible type of two types. Returns `null` if incompatible. */\r\n Compiler.prototype.computeCommonType = function (leftType, rightType) {\r\n if (leftType.isAssignableTo(rightType)) {\r\n return rightType;\r\n }\r\n else if (rightType.isAssignableTo(leftType)) {\r\n return leftType;\r\n }\r\n return null;\r\n };\r\n Compiler.prototype.compileAssertionExpression = function (expression, contextualType) {\r\n var toType = this.program.resolveType(// reports\r\n expression.toType, this.currentFunction.contextualTypeArguments);\r\n if (!toType)\r\n return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, 2 /* EXPLICIT */);\r\n };\r\n Compiler.prototype.compileBinaryExpression = function (expression, contextualType, wrapSmallIntegers) {\r\n if (wrapSmallIntegers === void 0) { wrapSmallIntegers = true; }\r\n var left;\r\n var right;\r\n // TODO: Currently, the common type of any binary expression is the first operand's type. This\r\n // differs from C and other languages where comparing an int to a long, in this order, upcasts\r\n // left to a long before comparison, instead of failing when trying to downcast right to an int.\r\n // NOTE that if we change the current behaviour, some examples, tests and wiki pages will have\r\n // to be updated, while compound binary operations must retain the previous behavior.\r\n // var left = this.compileExpression(\r\n // expression.left,\r\n // contextualType == Type.void\r\n // ? Type.i32\r\n // : contextualType,\r\n // ConversionKind.NONE\r\n // );\r\n // var leftType = this.currentType;\r\n // var right = this.compileExpression(\r\n // expression.right,\r\n // leftType,\r\n // ConversionKind.NONE\r\n // );\r\n // var rightType = this.currentType;\r\n // var commonType = this.computeCommonType(leftType, rightType);\r\n // if (!commonType) {\r\n // this.error(\r\n // DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n // expression.range,\r\n // Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n // );\r\n // this.currentType = contextualType;\r\n // return this.module.createUnreachable();\r\n // }\r\n var condition;\r\n var expr;\r\n var compound = false;\r\n var possiblyOverflows = false;\r\n var tempLocal = null;\r\n switch (expression.operator) {\r\n case tokenizer_1.Token.LESSTHAN:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */);\r\n right = this.compileExpression(expression.right, this.currentType);\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LtI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LtI64, left, right);\r\n break;\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.LtI64\r\n : module_1.BinaryOp.LtI32, left, right);\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LtU32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.LtU64\r\n : module_1.BinaryOp.LtU32, left, right);\r\n break;\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LtU64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LtF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LtF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = types_1.Type.bool;\r\n break;\r\n case tokenizer_1.Token.GREATERTHAN:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */);\r\n right = this.compileExpression(expression.right, this.currentType);\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GtI32, left, right);\r\n break;\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.GtI64\r\n : module_1.BinaryOp.GtI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GtI64, left, right);\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GtU32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.GtU64\r\n : module_1.BinaryOp.GtU32, left, right);\r\n break;\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GtU64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GtF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GtF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = types_1.Type.bool;\r\n break;\r\n case tokenizer_1.Token.LESSTHAN_EQUALS:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */);\r\n right = this.compileExpression(expression.right, this.currentType);\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LeI32, left, right);\r\n break;\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.LeI64\r\n : module_1.BinaryOp.LeI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LeI64, left, right);\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LeU32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.LeU64\r\n : module_1.BinaryOp.LeU32, left, right);\r\n break;\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LeU64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LeF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.LeF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = types_1.Type.bool;\r\n break;\r\n case tokenizer_1.Token.GREATERTHAN_EQUALS:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */);\r\n right = this.compileExpression(expression.right, this.currentType);\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GeI32, left, right);\r\n break;\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.GeI64\r\n : module_1.BinaryOp.GeI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GeI64, left, right);\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GeU32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.GeU64\r\n : module_1.BinaryOp.GeU32, left, right);\r\n break;\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GeU64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GeF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.GeF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = types_1.Type.bool;\r\n break;\r\n case tokenizer_1.Token.EQUALS_EQUALS_EQUALS:\r\n // TODO?\r\n case tokenizer_1.Token.EQUALS_EQUALS:\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */);\r\n right = this.compileExpression(expression.right, this.currentType);\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n expr = this.module.createBinary(module_1.BinaryOp.EqI32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.EqI64\r\n : module_1.BinaryOp.EqI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.EqI64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.EqF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.EqF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = types_1.Type.bool;\r\n break;\r\n case tokenizer_1.Token.EXCLAMATION_EQUALS_EQUALS:\r\n // TODO?\r\n case tokenizer_1.Token.EXCLAMATION_EQUALS:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */);\r\n right = this.compileExpression(expression.right, this.currentType);\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n expr = this.module.createBinary(module_1.BinaryOp.NeI32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.NeI64\r\n : module_1.BinaryOp.NeI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.NeI64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.NeF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.NeF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = types_1.Type.bool;\r\n break;\r\n case tokenizer_1.Token.EQUALS:\r\n return this.compileAssignment(expression.left, expression.right, contextualType);\r\n case tokenizer_1.Token.PLUS_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.PLUS:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true;\r\n case 2 /* I32 */:\r\n case 7 /* U32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.AddI32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.AddI64\r\n : module_1.BinaryOp.AddI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.AddI64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.AddF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.AddF64, left, right);\r\n break;\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.MINUS_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.MINUS:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true;\r\n case 2 /* I32 */:\r\n case 7 /* U32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubI32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.SubI64\r\n : module_1.BinaryOp.SubI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubI64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.ASTERISK_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.ASTERISK:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true;\r\n // fall-through\r\n case 2 /* I32 */:\r\n case 7 /* U32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.MulI32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.MulI64\r\n : module_1.BinaryOp.MulI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.MulI64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.MulF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.MulF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.SLASH_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.SLASH:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, true // TODO: when can division remain unwrapped? does it overflow?\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n possiblyOverflows = true;\r\n case 2 /* I32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.DivI32, left, right);\r\n break;\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.DivI64\r\n : module_1.BinaryOp.DivI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.DivI64, left, right);\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true;\r\n case 7 /* U32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.DivU32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.DivU64\r\n : module_1.BinaryOp.DivU32, left, right);\r\n break;\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.DivU64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.DivF32, left, right);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.DivF64, left, right);\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.PERCENT_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.PERCENT:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, true // TODO: when can remainder remain unwrapped? may it overflow?\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.RemI32, left, right);\r\n break;\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.RemI64\r\n : module_1.BinaryOp.RemI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.RemI64, left, right);\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n expr = this.module.createBinary(module_1.BinaryOp.RemU32, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.RemU64\r\n : module_1.BinaryOp.RemU32, left, right);\r\n break;\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.RemU64, left, right);\r\n break;\r\n case 11 /* F32 */:\r\n case 12 /* F64 */:\r\n // TODO: internal fmod, possibly simply imported from JS\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n expr = this.module.createUnreachable();\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.LESSTHAN_LESSTHAN_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.LESSTHAN_LESSTHAN:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType.is(8 /* FLOAT */)\r\n ? types_1.Type.i64\r\n : contextualType, 0 /* NONE */, false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true;\r\n default:\r\n expr = this.module.createBinary(module_1.BinaryOp.ShlI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.ShlI64, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.ShlI64\r\n : module_1.BinaryOp.ShlI32, left, right);\r\n break;\r\n case 13 /* VOID */:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType.is(8 /* FLOAT */)\r\n ? types_1.Type.i64\r\n : contextualType, 0 /* NONE */, true // must wrap small integers\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n default:\r\n // assumes signed shr on signed small integers does not overflow\r\n expr = this.module.createBinary(module_1.BinaryOp.ShrI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.ShrI64, left, right);\r\n break;\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.ShrI64\r\n : module_1.BinaryOp.ShrI32, left, right);\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n // assumes unsigned shr on unsigned small integers does not overflow\r\n case 7 /* U32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.ShrU32, left, right);\r\n break;\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.ShrU64, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.ShrU64\r\n : module_1.BinaryOp.ShrU32, left, right);\r\n break;\r\n case 13 /* VOID */:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType == types_1.Type.void\r\n ? types_1.Type.u64\r\n : contextualType, 0 /* NONE */, true // modifies low bits of small integers if unsigned\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n possiblyOverflows = true;\r\n // fall-through\r\n default:\r\n // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = this.module.createBinary(module_1.BinaryOp.ShrU32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.ShrU64, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.ShrU64\r\n : module_1.BinaryOp.ShrU32, left, right);\r\n break;\r\n case 13 /* VOID */:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.AMPERSAND_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.AMPERSAND:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType.is(8 /* FLOAT */)\r\n ? types_1.Type.i64\r\n : contextualType, 0 /* NONE */, false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(module_1.BinaryOp.AndI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.AndI64, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.AndI64\r\n : module_1.BinaryOp.AndI32, left, right);\r\n break;\r\n case 13 /* VOID */:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.BAR_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.BAR:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType.is(8 /* FLOAT */)\r\n ? types_1.Type.i64\r\n : contextualType, 0 /* NONE */, false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(module_1.BinaryOp.OrI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.OrI64, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.OrI64\r\n : module_1.BinaryOp.OrI32, left, right);\r\n break;\r\n case 13 /* VOID */:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.CARET_EQUALS:\r\n compound = true;\r\n case tokenizer_1.Token.CARET:\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType.is(8 /* FLOAT */)\r\n ? types_1.Type.i64\r\n : contextualType, 0 /* NONE */, false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(module_1.BinaryOp.XorI32, left, right);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.XorI64, left, right);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.XorI64\r\n : module_1.BinaryOp.XorI32, left, right);\r\n break;\r\n case 13 /* VOID */:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n // logical (no overloading)\r\n case tokenizer_1.Token.AMPERSAND_AMPERSAND:// left && right\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */);\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false);\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(left, true, 0);\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n possiblyOverflows = this.currentType.is(32 /* SMALL */ | 4 /* INTEGER */);\r\n condition = makeIsTrueish(left, this.currentType, this.module);\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(condition, // left\r\n right, // ? right\r\n expr // : cloned left\r\n );\r\n }\r\n else {\r\n expr = this.module.createIf(condition, right, this.module.createGetLocal(assert(tempLocal, \"tempLocal must be set\").index, this.currentType.toNativeType()));\r\n }\r\n break;\r\n case tokenizer_1.Token.BAR_BAR:// left || right\r\n left = this.compileExpression(expression.left, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */);\r\n right = this.compileExpression(expression.right, this.currentType, 1 /* IMPLICIT */, false);\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(left, true, 0);\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n possiblyOverflows = this.currentType.is(32 /* SMALL */ | 4 /* INTEGER */); // if right did\r\n condition = makeIsTrueish(left, this.currentType, this.module);\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(condition, // left\r\n expr, // ? cloned left\r\n right // : right\r\n );\r\n }\r\n else {\r\n expr = this.module.createIf(condition, this.module.createGetLocal(assert(tempLocal, \"tempLocal must be set\").index, this.currentType.toNativeType()), right);\r\n }\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"not implemented\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(32 /* SMALL */ | 4 /* INTEGER */), \"small integer type expected\");\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.left, expr, contextualType != types_1.Type.void)\r\n : expr;\r\n };\r\n Compiler.prototype.compileAssignment = function (expression, valueExpression, contextualType) {\r\n var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved)\r\n return this.module.createUnreachable();\r\n // to compile just the value, we need to know the target's type\r\n var element = resolved.element;\r\n var elementType;\r\n switch (element.kind) {\r\n case program_1.ElementKind.GLOBAL:\r\n if (!this.compileGlobal(element)) {\r\n return this.module.createUnreachable();\r\n }\r\n assert(element.type != types_1.Type.void, \"concrete type expected\");\r\n // fall-through\r\n case program_1.ElementKind.LOCAL:\r\n case program_1.ElementKind.FIELD:\r\n elementType = element.type;\r\n break;\r\n case program_1.ElementKind.PROPERTY:\r\n var setterPrototype = element.setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance)\r\n return this.module.createUnreachable();\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n elementType = setterInstance.parameters[0].type;\r\n break;\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, expression.range, element.internalName);\r\n return this.module.createUnreachable();\r\n case program_1.ElementKind.FUNCTION_PROTOTYPE:\r\n if (expression.kind == ast_1.NodeKind.ELEMENTACCESS) {\r\n assert(resolved.target &&\r\n resolved.target.kind == program_1.ElementKind.CLASS &&\r\n element.simpleName == resolved.target.prototype.fnIndexedGet);\r\n var resolvedIndexedSet = element.resolve(null);\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.returnType;\r\n break;\r\n }\r\n }\r\n // fall-through\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n // now compile the value and do the assignment\r\n this.currentType = elementType;\r\n return this.compileAssignmentWithValue(expression, this.compileExpression(valueExpression, elementType), contextualType != types_1.Type.void);\r\n };\r\n Compiler.prototype.compileAssignmentWithValue = function (expression, valueWithCorrectType, tee) {\r\n if (tee === void 0) { tee = false; }\r\n var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved)\r\n return this.module.createUnreachable();\r\n var element = resolved.element;\r\n var tempLocal;\r\n var targetExpr;\r\n switch (element.kind) {\r\n case program_1.ElementKind.LOCAL:\r\n this.currentType = tee ? element.type : types_1.Type.void;\r\n if (element.is(program_1.ElementFlags.CONSTANT)) {\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, expression.range, element.internalName);\r\n return this.module.createUnreachable();\r\n }\r\n return tee\r\n ? this.module.createTeeLocal(element.index, valueWithCorrectType)\r\n : this.module.createSetLocal(element.index, valueWithCorrectType);\r\n case program_1.ElementKind.GLOBAL:\r\n if (!this.compileGlobal(element)) {\r\n return this.module.createUnreachable();\r\n }\r\n assert(element.type != types_1.Type.void, \"concrete type expected\");\r\n this.currentType = tee ? element.type : types_1.Type.void;\r\n if (element.is(program_1.ElementFlags.CONSTANT)) {\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, expression.range, element.internalName);\r\n return this.module.createUnreachable();\r\n }\r\n if (!tee) {\r\n return this.module.createSetGlobal(element.internalName, valueWithCorrectType);\r\n }\r\n var globalNativeType = element.type.toNativeType();\r\n return this.module.createBlock(null, [\r\n this.module.createSetGlobal(element.internalName, valueWithCorrectType),\r\n this.module.createGetGlobal(element.internalName, globalNativeType)\r\n ], globalNativeType);\r\n case program_1.ElementKind.FIELD:\r\n if (element.prototype.isReadonly) {\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, expression.range, element.internalName);\r\n return this.module.createUnreachable();\r\n }\r\n assert(resolved.targetExpression != null, \"target expression expected\");\r\n targetExpr = this.compileExpression(resolved.targetExpression, this.options.isWasm64\r\n ? types_1.Type.usize64\r\n : types_1.Type.usize32, 0 /* NONE */);\r\n assert(this.currentType.classType, \"class type expected\");\r\n this.currentType = tee ? element.type : types_1.Type.void;\r\n var elementNativeType = element.type.toNativeType();\r\n if (!tee) {\r\n return this.module.createStore(element.type.size >> 3, targetExpr, valueWithCorrectType, elementNativeType, element.memoryOffset);\r\n }\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(element.type);\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal(tempLocal.index, valueWithCorrectType),\r\n this.module.createStore(element.type.size >> 3, targetExpr, this.module.createGetLocal(tempLocal.index, elementNativeType), elementNativeType, element.memoryOffset),\r\n this.module.createGetLocal(tempLocal.index, elementNativeType)\r\n ], elementNativeType);\r\n case program_1.ElementKind.PROPERTY:\r\n var setterPrototype = element.setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (setterInstance) {\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n if (!tee) {\r\n if (setterInstance.is(program_1.ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(resolved.targetExpression, this.options.isWasm64\r\n ? types_1.Type.usize64\r\n : types_1.Type.usize32, 0 /* NONE */);\r\n assert(this.currentType.classType);\r\n this.currentType = types_1.Type.void;\r\n return this.makeCall(setterInstance, [targetExpr, valueWithCorrectType]);\r\n }\r\n else {\r\n this.currentType = types_1.Type.void;\r\n return this.makeCall(setterInstance, [valueWithCorrectType]);\r\n }\r\n }\r\n var getterPrototype = element.getterPrototype;\r\n assert(getterPrototype != null);\r\n var getterInstance = getterPrototype.resolve(); // reports\r\n if (getterInstance) {\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n if (setterInstance.is(program_1.ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(resolved.targetExpression, this.options.isWasm64\r\n ? types_1.Type.usize64\r\n : types_1.Type.usize32, 0 /* NONE */);\r\n assert(this.currentType.classType);\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(getterInstance.returnType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [\r\n this.module.createTeeLocal(tempLocal.index, targetExpr), valueWithCorrectType\r\n ]),\r\n this.makeCall(getterInstance, [\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ])\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n }\r\n else {\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [valueWithCorrectType]),\r\n this.makeCall(getterInstance)\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, expression.range, element.internalName);\r\n }\r\n return this.module.createUnreachable();\r\n case program_1.ElementKind.FUNCTION_PROTOTYPE:\r\n if (expression.kind == ast_1.NodeKind.ELEMENTACCESS) {\r\n assert(resolved.target && resolved.target.kind == program_1.ElementKind.CLASS);\r\n var resolvedIndexedGet = element.resolve();\r\n if (!resolvedIndexedGet)\r\n return this.module.createUnreachable();\r\n var indexedSetName = resolved.target.prototype.fnIndexedSet;\r\n var indexedSet;\r\n if (indexedSetName != null &&\r\n resolved.target.members &&\r\n (indexedSet = resolved.target.members.get(indexedSetName)) &&\r\n indexedSet.kind == program_1.ElementKind.FUNCTION_PROTOTYPE) {\r\n var resolvedIndexedSet = indexedSet.resolve();\r\n if (!resolvedIndexedSet)\r\n return this.module.createUnreachable();\r\n targetExpr = this.compileExpression(resolved.targetExpression, this.options.isWasm64\r\n ? types_1.Type.usize64\r\n : types_1.Type.usize32, 0 /* NONE */);\r\n assert(this.currentType.classType);\r\n var elementExpr = this.compileExpression(expression.elementExpression, types_1.Type.i32);\r\n if (!tee) {\r\n this.currentType = resolvedIndexedSet.returnType;\r\n return this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n this.currentType = resolvedIndexedGet.returnType;\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n this.module.createTeeLocal(tempLocal.index, valueWithCorrectType)\r\n ]),\r\n // TODO: could be different from an actual __get (needs 2 temp locals)\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ], this.currentType.toNativeType());\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Index_signature_in_type_0_only_permits_reading, expression.range, resolved.target.internalName);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n };\r\n Compiler.prototype.compileCallExpression = function (expression, contextualType) {\r\n var resolved = this.program.resolveExpression(expression.expression, this.currentFunction); // reports\r\n if (!resolved)\r\n return this.module.createUnreachable();\r\n var element = resolved.element;\r\n if (element.kind != program_1.ElementKind.FUNCTION_PROTOTYPE) {\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, expression.range, element.internalName);\r\n return this.module.createUnreachable();\r\n }\r\n var functionPrototype = element;\r\n var functionInstance = null;\r\n // TODO: generalize?\r\n if (functionPrototype.is(program_1.ElementFlags.BUILTIN)) {\r\n var resolvedTypeArguments = null;\r\n if (expression.typeArguments) {\r\n var k = expression.typeArguments.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var resolvedType = this.program.resolveType(// reports\r\n expression.typeArguments[i], this.currentFunction.contextualTypeArguments, true);\r\n if (!resolvedType)\r\n return this.module.createUnreachable();\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n var expr = builtins_1.compileCall(this, functionPrototype, resolvedTypeArguments, expression.arguments, contextualType, expression);\r\n if (!expr) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n // TODO: infer type arguments from parameter types if omitted\r\n functionInstance = functionPrototype.resolveInclTypeArguments(// reports\r\n expression.typeArguments, this.currentFunction.contextualTypeArguments, expression);\r\n if (!functionInstance)\r\n return this.module.createUnreachable();\r\n // TODO: generalize? (see above)\r\n /* if (functionInstance.is(ElementFlags.BUILTIN)) {\r\n var expr = compileBuiltinCall(\r\n this,\r\n functionPrototype,\r\n functionInstance.typeArguments,\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n } */\r\n var numArguments = expression.arguments.length;\r\n var numArgumentsInclThis = functionInstance.instanceMethodOf\r\n ? numArguments + 1\r\n : numArguments;\r\n var argumentIndex = 0;\r\n var args = new Array(numArgumentsInclThis);\r\n if (functionInstance.instanceMethodOf) {\r\n assert(resolved.targetExpression != null);\r\n args[argumentIndex++] = resolved.targetExpression;\r\n }\r\n for (i = 0; i < numArguments; ++i) {\r\n args[argumentIndex++] = expression.arguments[i];\r\n }\r\n return this.compileCall(functionInstance, args, expression);\r\n };\r\n /**\r\n * Compiles a call to a function. If an instance method, `this` is the first element in\r\n * `argumentExpressions` or can be specified explicitly as the last argument.\r\n */\r\n Compiler.prototype.compileCall = function (functionInstance, argumentExpressions, reportNode, thisArg) {\r\n if (thisArg === void 0) { thisArg = 0; }\r\n // validate and compile arguments\r\n var parameters = functionInstance.parameters;\r\n var numParameters = parameters ? parameters.length : 0;\r\n var numParametersInclThis = functionInstance.instanceMethodOf != null\r\n ? numParameters + 1\r\n : numParameters;\r\n var numArgumentsInclThis = argumentExpressions.length;\r\n var numArguments = functionInstance.instanceMethodOf != null\r\n ? numArgumentsInclThis - 1\r\n : numArgumentsInclThis;\r\n if (thisArg)\r\n numArgumentsInclThis++;\r\n if (numArgumentsInclThis > numParametersInclThis) {\r\n this.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, numParameters.toString(10), numArguments.toString(10));\r\n return this.module.createUnreachable();\r\n }\r\n var operands = new Array(numParametersInclThis);\r\n var operandIndex = 0;\r\n var argumentIndex = 0;\r\n if (functionInstance.instanceMethodOf) {\r\n if (thisArg) {\r\n operands[operandIndex++] = thisArg;\r\n }\r\n else {\r\n operands[operandIndex++] = this.compileExpression(argumentExpressions[argumentIndex++], functionInstance.instanceMethodOf.type);\r\n }\r\n }\r\n if (parameters) {\r\n for (; operandIndex < numParametersInclThis; ++operandIndex) {\r\n // argument has been provided\r\n if (numArgumentsInclThis > operandIndex) {\r\n operands[operandIndex] = this.compileExpression(argumentExpressions[argumentIndex++], parameters[operandIndex + numParameters - numParametersInclThis].type);\r\n // argument has been omitted\r\n }\r\n else {\r\n var initializer = parameters[operandIndex + numParameters - numParametersInclThis].initializer;\r\n if (initializer) {\r\n operands[operandIndex] = this.compileExpression(initializer, parameters[operandIndex + numParameters - numParametersInclThis].type);\r\n // FIXME: here, the initializer is compiled in the caller's scope.\r\n // a solution could be to use a stub for each possible overload, calling the\r\n // full function with optional arguments being part of the stub's body.\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Expected_at_least_0_arguments_but_got_1, reportNode.range, (operandIndex + numParameters - numParametersInclThis).toString(10), numArguments.toString(10));\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n }\r\n this.currentType = functionInstance.returnType;\r\n return this.makeCall(functionInstance, operands);\r\n };\r\n /** Makes a call operation as is. */\r\n Compiler.prototype.makeCall = function (functionInstance, operands) {\r\n if (operands === void 0) { operands = null; }\r\n if (!(functionInstance.is(program_1.ElementFlags.COMPILED) || this.compileFunction(functionInstance))) {\r\n return this.module.createUnreachable();\r\n }\r\n // imported function\r\n if (functionInstance.is(program_1.ElementFlags.DECLARED)) {\r\n return this.module.createCallImport(functionInstance.internalName, operands, functionInstance.returnType.toNativeType());\r\n }\r\n // internal function\r\n return this.module.createCall(functionInstance.internalName, operands, functionInstance.returnType.toNativeType());\r\n };\r\n Compiler.prototype.compileCommaExpression = function (expression, contextualType) {\r\n var expressions = expression.expressions;\r\n var k = expressions.length;\r\n var exprs = new Array(k--);\r\n for (var i = 0; i < k; ++i) {\r\n exprs[i] = this.compileExpression(expressions[i], types_1.Type.void); // drop all\r\n }\r\n exprs[i] = this.compileExpression(expressions[i], contextualType); // except last\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n };\r\n Compiler.prototype.compileElementAccessExpression = function (expression, contextualType) {\r\n var resolved = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!resolved)\r\n return this.module.createUnreachable();\r\n assert(resolved.element.kind == program_1.ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == program_1.ElementKind.CLASS);\r\n var instance = resolved.element.resolve(null, resolved.target.contextualTypeArguments);\r\n if (!instance)\r\n return this.module.createUnreachable();\r\n return this.compileCall(instance, [\r\n expression.expression,\r\n expression.elementExpression\r\n ], expression);\r\n };\r\n Compiler.prototype.compileFunctionExpression = function (expression, contextualType) {\r\n var declaration = expression.declaration;\r\n var simpleName = (declaration.name.text.length\r\n ? declaration.name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var prototype = new program_1.FunctionPrototype(this.program, simpleName, this.currentFunction.internalName + \"~\" + simpleName, declaration);\r\n var instance = this.compileFunctionUsingTypeArguments(prototype, [], null, declaration);\r\n if (!instance)\r\n return this.module.createUnreachable();\r\n this.currentType = types_1.Type.u32.asFunction(instance);\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.addFunctionTableEntry(instance);\r\n if (index < 0)\r\n return this.module.createUnreachable();\r\n return this.module.createI32(index);\r\n };\r\n Compiler.prototype.compileIdentifierExpression = function (expression, contextualType) {\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case ast_1.NodeKind.NULL:\r\n if (this.options.isWasm64) {\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == 9 /* USIZE */);\r\n this.currentType = types_1.Type.usize64;\r\n }\r\n return this.module.createI64(0);\r\n }\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == 9 /* USIZE */);\r\n this.currentType = types_1.Type.usize32;\r\n }\r\n return this.module.createI32(0);\r\n case ast_1.NodeKind.TRUE:\r\n this.currentType = types_1.Type.bool;\r\n return this.module.createI32(1);\r\n case ast_1.NodeKind.FALSE:\r\n this.currentType = types_1.Type.bool;\r\n return this.module.createI32(0);\r\n case ast_1.NodeKind.THIS:\r\n if (this.currentFunction.instanceMethodOf) {\r\n this.currentType = this.currentFunction.instanceMethodOf.type;\r\n return this.module.createGetLocal(0, this.currentType.toNativeType());\r\n }\r\n this.error(diagnostics_1.DiagnosticCode._this_cannot_be_referenced_in_current_location, expression.range);\r\n this.currentType = this.options.isWasm64 ? types_1.Type.usize64 : types_1.Type.usize32;\r\n return this.module.createUnreachable();\r\n case ast_1.NodeKind.SUPER:\r\n if (this.currentFunction.instanceMethodOf && this.currentFunction.instanceMethodOf.base) {\r\n this.currentType = this.currentFunction.instanceMethodOf.base.type;\r\n return this.module.createGetLocal(0, this.currentType.toNativeType());\r\n }\r\n this.error(diagnostics_1.DiagnosticCode._super_can_only_be_referenced_in_a_derived_class, expression.range);\r\n this.currentType = this.options.isWasm64 ? types_1.Type.usize64 : types_1.Type.usize32;\r\n return this.module.createUnreachable();\r\n }\r\n // otherwise resolve\r\n var resolved = this.program.resolveIdentifier(// reports\r\n expression, this.currentFunction, this.currentEnum);\r\n if (!resolved)\r\n return this.module.createUnreachable();\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n case program_1.ElementKind.LOCAL:\r\n if (element.is(program_1.ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType);\r\n }\r\n assert(element.index >= 0);\r\n this.currentType = element.type;\r\n return this.module.createGetLocal(element.index, this.currentType.toNativeType());\r\n case program_1.ElementKind.GLOBAL:\r\n if (element.is(program_1.ElementFlags.BUILTIN)) {\r\n return builtins_1.compileGetConstant(this, element, expression);\r\n }\r\n if (!this.compileGlobal(element)) {\r\n return this.module.createUnreachable();\r\n }\r\n assert(element.type != types_1.Type.void);\r\n if (element.is(program_1.ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType);\r\n }\r\n this.currentType = element.type;\r\n return this.module.createGetGlobal(element.internalName, this.currentType.toNativeType());\r\n case program_1.ElementKind.ENUMVALUE:// here: if referenced from within the same enum\r\n if (!element.is(program_1.ElementFlags.COMPILED)) {\r\n this.error(diagnostics_1.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums, expression.range);\r\n this.currentType = types_1.Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = types_1.Type.i32;\r\n if (element.is(program_1.ElementFlags.INLINED)) {\r\n return this.module.createI32(element.constantValue);\r\n }\r\n return this.module.createGetGlobal(element.internalName, module_1.NativeType.I32);\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n };\r\n Compiler.prototype.compileLiteralExpression = function (expression, contextualType, implicitNegate) {\r\n if (implicitNegate === void 0) { implicitNegate = false; }\r\n switch (expression.literalKind) {\r\n case 4 /* ARRAY */:\r\n assert(!implicitNegate);\r\n var classType = contextualType.classType;\r\n if (classType &&\r\n classType == this.program.elements.get(\"Array\") &&\r\n classType.typeArguments && classType.typeArguments.length == 1) {\r\n return this.compileStaticArray(classType.typeArguments[0], expression.elementExpressions);\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n case 0 /* FLOAT */: {\r\n var floatValue = expression.value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == types_1.Type.f32) {\r\n return this.module.createF32(floatValue);\r\n }\r\n this.currentType = types_1.Type.f64;\r\n return this.module.createF64(floatValue);\r\n }\r\n case 1 /* INTEGER */:\r\n var intValue = expression.value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(i64_new(0), intValue);\r\n }\r\n switch (contextualType.kind) {\r\n // compile to contextualType if matching\r\n case 0 /* I8 */:\r\n if (i64_is_i8(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n case 1 /* I16 */:\r\n if (i64_is_i16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n case 2 /* I32 */:\r\n if (i64_is_i32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n case 5 /* U8 */:\r\n if (i64_is_u8(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n case 6 /* U16 */:\r\n if (i64_is_u16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n case 7 /* U32 */:\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n case 10 /* BOOL */:\r\n if (i64_is_bool(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n case 4 /* ISIZE */:\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n case 9 /* USIZE */:\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n case 11 /* F32 */:\r\n if (i64_is_f32(intValue)) {\r\n return this.module.createF32(i64_to_f32(intValue));\r\n }\r\n break;\r\n case 12 /* F64 */:\r\n if (i64_is_f64(intValue)) {\r\n return this.module.createF64(i64_to_f64(intValue));\r\n }\r\n break;\r\n case 13 /* VOID */:\r\n break;\r\n default:\r\n assert(false);\r\n break;\r\n }\r\n // otherwise compile to best fitting native type\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = types_1.Type.i32;\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n else {\r\n this.currentType = types_1.Type.i64;\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case 2 /* STRING */:\r\n assert(!implicitNegate);\r\n return this.compileStaticString(expression.value);\r\n }\r\n throw new Error(\"not implemented\");\r\n };\r\n Compiler.prototype.compileStaticString = function (stringValue) {\r\n var stringSegment = this.stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n var stringLength = stringValue.length;\r\n var stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (var i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, this.options.usizeType.byteSize);\r\n this.stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.types.get(\"string\");\r\n this.currentType = stringType ? stringType : this.options.usizeType;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n };\r\n Compiler.prototype.compileStaticArray = function (elementType, expressions) {\r\n // compile as static if all element expressions are precomputable, otherwise\r\n // initialize in place.\r\n var isStatic = true;\r\n var size = expressions.length;\r\n var nativeType = elementType.toNativeType();\r\n var values;\r\n switch (nativeType) {\r\n case module_1.NativeType.I32:\r\n values = changetype(new Int32Array(size));\r\n break;\r\n case module_1.NativeType.I64:\r\n values = changetype(new Array(size));\r\n break;\r\n case module_1.NativeType.F32:\r\n values = changetype(new Float32Array(size));\r\n break;\r\n case module_1.NativeType.F64:\r\n values = changetype(new Float64Array(size));\r\n break;\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n var exprs = new Array(size);\r\n var expr;\r\n for (var i = 0; i < size; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType)\r\n : elementType.toNativeZero(this.module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (_BinaryenExpressionGetId(expr) == module_1.ExpressionId.Const) {\r\n assert(_BinaryenExpressionGetType(expr) == nativeType);\r\n switch (nativeType) {\r\n case module_1.NativeType.I32:\r\n changetype(values)[i] = _BinaryenConstGetValueI32(expr);\r\n break;\r\n case module_1.NativeType.I64:\r\n changetype(values)[i] = i64_new(_BinaryenConstGetValueI64Low(expr), _BinaryenConstGetValueI64High(expr));\r\n break;\r\n case module_1.NativeType.F32:\r\n changetype(values)[i] = _BinaryenConstGetValueF32(expr);\r\n break;\r\n case module_1.NativeType.F64:\r\n changetype(values)[i] = _BinaryenConstGetValueF64(expr);\r\n break;\r\n default:\r\n assert(false); // checked above\r\n }\r\n }\r\n else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n if (isStatic) {\r\n // TODO: convert to Uint8Array and create the segment\r\n }\r\n else {\r\n // TODO: initialize in place\r\n }\r\n // TODO: alternatively, static elements could go into data segments while\r\n // dynamic ones are initialized on top? any benefits? (doesn't seem so)\r\n throw new Error(\"not implemented\");\r\n };\r\n Compiler.prototype.compileNewExpression = function (expression, contextualType) {\r\n var resolved = this.program.resolveExpression(// reports\r\n expression.expression, this.currentFunction);\r\n if (resolved) {\r\n if (resolved.element.kind == program_1.ElementKind.CLASS_PROTOTYPE) {\r\n var prototype = resolved.element;\r\n var instance = prototype.resolveInclTypeArguments(// reports\r\n expression.typeArguments, null, expression);\r\n if (instance) {\r\n var thisExpr = builtins_1.compileAllocate(this, instance, expression);\r\n var initializers = new Array();\r\n // use a temp local for 'this'\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n initializers.push(this.module.createSetLocal(tempLocal.index, thisExpr));\r\n // apply field initializers\r\n if (instance.members) {\r\n try {\r\n for (var _a = __values(instance.members.values()), _b = _a.next(); !_b.done; _b = _a.next()) {\r\n var member = _b.value;\r\n if (member.kind == program_1.ElementKind.FIELD) {\r\n var field = member;\r\n var fieldDeclaration = field.prototype.declaration;\r\n if (field.is(program_1.ElementFlags.CONSTANT)) {\r\n assert(false); // there are no built-in fields currently\r\n }\r\n else if (fieldDeclaration && fieldDeclaration.initializer) {\r\n initializers.push(this.module.createStore(field.type.byteSize, this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType), this.compileExpression(fieldDeclaration.initializer, field.type), field.type.toNativeType(), field.memoryOffset));\r\n }\r\n }\r\n }\r\n }\r\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\r\n finally {\r\n try {\r\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\r\n }\r\n finally { if (e_3) throw e_3.error; }\r\n }\r\n }\r\n // apply constructor\r\n var constructorInstance = instance.constructorInstance;\r\n if (constructorInstance) {\r\n initializers.push(this.compileCall(constructorInstance, expression.arguments, expression, this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType)));\r\n }\r\n // return 'this'\r\n initializers.push(this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType));\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n thisExpr = this.module.createBlock(null, initializers, this.options.nativeSizeType);\r\n this.currentType = instance.type;\r\n return thisExpr;\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature, expression.expression.range);\r\n }\r\n }\r\n return this.module.createUnreachable();\r\n var e_3, _c;\r\n };\r\n Compiler.prototype.compileParenthesizedExpression = function (expression, contextualType) {\r\n // does not change types, just order\r\n return this.compileExpression(expression.expression, contextualType, 0 /* NONE */);\r\n };\r\n Compiler.prototype.compilePropertyAccessExpression = function (propertyAccess, contextualType) {\r\n var resolved = this.program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!resolved)\r\n return this.module.createUnreachable();\r\n var element = resolved.element;\r\n var targetExpr;\r\n switch (element.kind) {\r\n case program_1.ElementKind.GLOBAL:// static property\r\n if (element.is(program_1.ElementFlags.BUILTIN)) {\r\n return builtins_1.compileGetConstant(this, element, propertyAccess);\r\n }\r\n if (!this.compileGlobal(element)) {\r\n return this.module.createUnreachable();\r\n }\r\n assert(element.type != types_1.Type.void);\r\n if (element.is(program_1.ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType);\r\n }\r\n this.currentType = element.type;\r\n return this.module.createGetGlobal(element.internalName, this.currentType.toNativeType());\r\n case program_1.ElementKind.ENUMVALUE:// enum value\r\n if (!this.compileEnum(element.enum)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = types_1.Type.i32;\r\n if (element.is(program_1.ElementFlags.INLINED)) {\r\n return this.module.createI32(element.constantValue);\r\n }\r\n return this.module.createGetGlobal(element.internalName, module_1.NativeType.I32);\r\n case program_1.ElementKind.FIELD:// instance field\r\n assert(resolved.target != null);\r\n assert(resolved.targetExpression != null);\r\n assert(element.memoryOffset >= 0);\r\n targetExpr = this.compileExpression(resolved.targetExpression, this.options.usizeType, 0 /* NONE */);\r\n this.currentType = element.type;\r\n return this.module.createLoad(element.type.size >> 3, element.type.is(1 /* SIGNED */ | 4 /* INTEGER */), targetExpr, element.type.toNativeType(), element.memoryOffset);\r\n case program_1.ElementKind.PROPERTY:// instance property (here: getter)\r\n var getter = element.getterPrototype;\r\n assert(getter != null);\r\n var getterInstance = getter.resolve(null); // reports\r\n if (!getterInstance)\r\n return this.module.createUnreachable();\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n this.currentType = getterInstance.returnType;\r\n if (getterInstance.is(program_1.ElementFlags.INSTANCE)) {\r\n targetExpr = this.compileExpression(resolved.targetExpression, this.options.usizeType, 0 /* NONE */);\r\n this.currentType = getterInstance.returnType;\r\n return this.makeCall(getterInstance, [targetExpr]);\r\n }\r\n else {\r\n return this.makeCall(getterInstance);\r\n }\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, propertyAccess.range);\r\n return this.module.createUnreachable();\r\n };\r\n Compiler.prototype.compileTernaryExpression = function (expression, contextualType) {\r\n var condition = makeIsTrueish(this.compileExpression(expression.condition, types_1.Type.u32, 0 /* NONE */), this.currentType, this.module);\r\n var ifThen = this.compileExpression(expression.ifThen, contextualType);\r\n var ifElse = this.compileExpression(expression.ifElse, contextualType);\r\n return this.module.createIf(condition, ifThen, ifElse);\r\n };\r\n Compiler.prototype.compileUnaryPostfixExpression = function (expression, contextualType) {\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression(expression.operand, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, false // wrapped below\r\n );\r\n var op;\r\n var nativeType;\r\n var nativeOne;\r\n var possiblyOverflows = false;\r\n switch (expression.operator) {\r\n case tokenizer_1.Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true;\r\n default:\r\n op = module_1.BinaryOp.AddI32;\r\n nativeType = module_1.NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n op = this.options.isWasm64\r\n ? module_1.BinaryOp.AddI64\r\n : module_1.BinaryOp.AddI32;\r\n nativeType = this.options.isWasm64\r\n ? module_1.NativeType.I64\r\n : module_1.NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.module);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n op = module_1.BinaryOp.AddI64;\r\n nativeType = module_1.NativeType.I64;\r\n nativeOne = this.module.createI64(1);\r\n break;\r\n case 11 /* F32 */:\r\n op = module_1.BinaryOp.AddF32;\r\n nativeType = module_1.NativeType.F32;\r\n nativeOne = this.module.createF32(1);\r\n break;\r\n case 12 /* F64 */:\r\n op = module_1.BinaryOp.AddF64;\r\n nativeType = module_1.NativeType.F64;\r\n nativeOne = this.module.createF64(1);\r\n break;\r\n case 13 /* VOID */:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n case tokenizer_1.Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true;\r\n default:\r\n op = module_1.BinaryOp.SubI32;\r\n nativeType = module_1.NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: check operator overload\r\n case 4 /* ISIZE */:\r\n op = this.options.isWasm64\r\n ? module_1.BinaryOp.SubI64\r\n : module_1.BinaryOp.SubI32;\r\n nativeType = this.options.isWasm64\r\n ? module_1.NativeType.I64\r\n : module_1.NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.module);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n op = module_1.BinaryOp.SubI64;\r\n nativeType = module_1.NativeType.I64;\r\n nativeOne = this.module.createI64(1);\r\n break;\r\n case 11 /* F32 */:\r\n op = module_1.BinaryOp.SubF32;\r\n nativeType = module_1.NativeType.F32;\r\n nativeOne = this.module.createF32(1);\r\n break;\r\n case 12 /* F64 */:\r\n op = module_1.BinaryOp.SubF64;\r\n nativeType = module_1.NativeType.F64;\r\n nativeOne = this.module.createF64(1);\r\n break;\r\n case 13 /* VOID */:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"unary postfix operator expected\");\r\n }\r\n var setValue;\r\n var tempLocal = null;\r\n // simplify if dropped anyway\r\n if (contextualType == types_1.Type.void) {\r\n setValue = this.module.createBinary(op, getValue, nativeOne);\r\n // otherwise use a temp local for the intermediate value\r\n }\r\n else {\r\n tempLocal = this.currentFunction.getTempLocal(this.currentType);\r\n setValue = this.module.createBinary(op, this.module.createGetLocal(tempLocal.index, nativeType), nativeOne);\r\n }\r\n if (possiblyOverflows) {\r\n assert(this.currentType.is(32 /* SMALL */ | 4 /* INTEGER */));\r\n setValue = makeSmallIntegerWrap(setValue, this.currentType, this.module);\r\n }\r\n setValue = this.compileAssignmentWithValue(expression.operand, setValue, false);\r\n // ^ sets currentType = void\r\n if (contextualType == types_1.Type.void) {\r\n assert(!tempLocal);\r\n return setValue;\r\n }\r\n this.currentType = assert(tempLocal).type;\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal(tempLocal.index, getValue),\r\n setValue,\r\n this.module.createGetLocal(tempLocal.index, nativeType)\r\n ], nativeType);\r\n };\r\n Compiler.prototype.compileUnaryPrefixExpression = function (expression, contextualType, wrapSmallIntegers) {\r\n if (wrapSmallIntegers === void 0) { wrapSmallIntegers = true; }\r\n var possiblyOverflows = false;\r\n var compound = false;\r\n var expr;\r\n switch (expression.operator) {\r\n case tokenizer_1.Token.PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n expr = this.compileExpression(expression.operand, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, false // wrapped below\r\n );\r\n possiblyOverflows = this.currentType.is(32 /* SMALL */ | 4 /* INTEGER */); // if operand already did\r\n break;\r\n case tokenizer_1.Token.MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n if (expression.operand.kind == ast_1.NodeKind.LITERAL && (expression.operand.literalKind == 1 /* INTEGER */ ||\r\n expression.operand.literalKind == 0 /* FLOAT */)) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n this.addDebugLocation(expr, expression.range); // compileExpression normally does this\r\n }\r\n else {\r\n expr = this.compileExpression(expression.operand, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, false // wrapped below\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubI32, this.module.createI32(0), expr);\r\n break;\r\n case 9 /* USIZE */:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.SubI64\r\n : module_1.BinaryOp.SubI32, this.currentType.toNativeZero(this.module), expr);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubI64, this.module.createI64(0), expr);\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createUnary(module_1.UnaryOp.NegF32, expr);\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createUnary(module_1.UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n }\r\n break;\r\n case tokenizer_1.Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n compound = true;\r\n expr = this.compileExpression(expression.operand, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, false // wrapped below\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(module_1.BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n case 9 /* USIZE */:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.AddI64\r\n : module_1.BinaryOp.AddI32, expr, this.currentType.toNativeOne(this.module));\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.AddI64, expr, this.module.createI64(1));\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.AddF32, expr, this.module.createF32(1));\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.AddF64, expr, this.module.createF64(1));\r\n break;\r\n }\r\n break;\r\n case tokenizer_1.Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n compound = true;\r\n expr = this.compileExpression(expression.operand, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, false // wrapped below\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true; // or if operand already did\r\n // fall-through\r\n default:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubI32, expr, this.module.createI32(1));\r\n break;\r\n case 9 /* USIZE */:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.SubI64\r\n : module_1.BinaryOp.SubI32, expr, this.currentType.toNativeOne(this.module));\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubI64, expr, this.module.createI64(1));\r\n break;\r\n case 11 /* F32 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubF32, expr, this.module.createF32(1));\r\n break;\r\n case 12 /* F64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.SubF64, expr, this.module.createF64(1));\r\n break;\r\n }\r\n break;\r\n case tokenizer_1.Token.EXCLAMATION:\r\n expr = this.compileExpression(expression.operand, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType, 0 /* NONE */, true // must wrap small integers\r\n );\r\n expr = makeIsFalseish(expr, this.currentType, this.module);\r\n this.currentType = types_1.Type.bool;\r\n break;\r\n case tokenizer_1.Token.TILDE:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n expr = this.compileExpression(expression.operand, contextualType == types_1.Type.void\r\n ? types_1.Type.i32\r\n : contextualType.is(8 /* FLOAT */)\r\n ? types_1.Type.i64\r\n : contextualType, contextualType == types_1.Type.void\r\n ? 0 /* NONE */\r\n : 1 /* IMPLICIT */, false // retains low bits of small integers\r\n );\r\n switch (this.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(module_1.BinaryOp.XorI32, expr, this.module.createI32(-1));\r\n break;\r\n case 9 /* USIZE */:\r\n if (this.currentType.isReference) {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n expr = this.module.createBinary(this.options.isWasm64\r\n ? module_1.BinaryOp.XorI64\r\n : module_1.BinaryOp.XorI32, expr, this.currentType.toNativeNegOne(this.module));\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = this.module.createBinary(module_1.BinaryOp.XorI64, expr, this.module.createI64(-1, -1));\r\n break;\r\n }\r\n break;\r\n case tokenizer_1.Token.TYPEOF:\r\n // it might make sense to implement typeof in a way that a generic function can detect\r\n // whether its type argument is a class type or string. that could then be used, for\r\n // example, to generate hash codes for sets and maps, depending on the kind of type\r\n // parameter we have. ideally the comparison would not involve actual string comparison and\r\n // limit available operations to hard-coded string literals.\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"not implemented\");\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n throw new Error(\"unary operator expected\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(32 /* SMALL */ | 4 /* INTEGER */));\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != types_1.Type.void)\r\n : expr;\r\n };\r\n Compiler.prototype.addDebugLocation = function (expr, range) {\r\n if (this.options.sourceMap != null) {\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) {\r\n source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n }\r\n range.debugInfoRef = expr;\r\n if (!this.currentFunction.debugLocations)\r\n this.currentFunction.debugLocations = [];\r\n this.currentFunction.debugLocations.push(range);\r\n }\r\n };\r\n return Compiler;\r\n}(diagnostics_1.DiagnosticEmitter));\r\nexports.Compiler = Compiler;\r\n// helpers\r\n/** Wraps a 32-bit integer expression so it evaluates to a valid value of the specified type. */\r\nfunction makeSmallIntegerWrap(expr, type, module) {\r\n switch (type.kind) {\r\n case 0 /* I8 */:\r\n expr = module.createBinary(module_1.BinaryOp.ShrI32, module.createBinary(module_1.BinaryOp.ShlI32, expr, module.createI32(24)), module.createI32(24));\r\n break;\r\n case 1 /* I16 */:\r\n expr = module.createBinary(module_1.BinaryOp.ShrI32, module.createBinary(module_1.BinaryOp.ShlI32, expr, module.createI32(16)), module.createI32(16));\r\n break;\r\n case 5 /* U8 */:\r\n expr = module.createBinary(module_1.BinaryOp.AndI32, expr, module.createI32(0xff));\r\n break;\r\n case 6 /* U16 */:\r\n expr = module.createBinary(module_1.BinaryOp.AndI32, expr, module.createI32(0xffff));\r\n break;\r\n case 10 /* BOOL */:\r\n expr = module.createBinary(module_1.BinaryOp.AndI32, expr, module.createI32(0x1));\r\n break;\r\n case 13 /* VOID */:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\nexports.makeSmallIntegerWrap = makeSmallIntegerWrap;\r\n/** Creates a comparison whether an expression is not 'true' in a broader sense. */\r\nfunction makeIsFalseish(expr, type, module) {\r\n switch (type.kind) {\r\n default:// any integer up to 32 bits\r\n expr = module.createUnary(module_1.UnaryOp.EqzI32, expr);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = module.createUnary(module_1.UnaryOp.EqzI64, expr);\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: strings\r\n case 4 /* ISIZE */:\r\n expr = module.createUnary(type.size == 64 ? module_1.UnaryOp.EqzI64 : module_1.UnaryOp.EqzI32, expr);\r\n break;\r\n case 11 /* F32 */:\r\n expr = module.createBinary(module_1.BinaryOp.EqF32, expr, module.createF32(0));\r\n break;\r\n case 12 /* F64 */:\r\n expr = module.createBinary(module_1.BinaryOp.EqF64, expr, module.createF64(0));\r\n break;\r\n case 13 /* VOID */:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\nexports.makeIsFalseish = makeIsFalseish;\r\n/** Creates a comparison whether an expression is 'true' in a broader sense. */\r\nfunction makeIsTrueish(expr, type, module) {\r\n switch (type.kind) {\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n expr = module.createBinary(module_1.BinaryOp.NeI64, expr, module.createI64(0));\r\n break;\r\n case 9 /* USIZE */:\r\n // TODO: strings\r\n case 4 /* ISIZE */:\r\n if (type.size == 64) {\r\n expr = module.createBinary(module_1.BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n break;\r\n case 11 /* F32 */:\r\n expr = module.createBinary(module_1.BinaryOp.NeF32, expr, module.createF32(0));\r\n break;\r\n case 12 /* F64 */:\r\n expr = module.createBinary(module_1.BinaryOp.NeF64, expr, module.createF64(0));\r\n break;\r\n case 13 /* VOID */:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\nexports.makeIsTrueish = makeIsTrueish;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar module_1 = __webpack_require__(0);\r\n/** Indicates the kind of a type. */\r\nvar TypeKind;\r\n(function (TypeKind) {\r\n // signed integers\r\n TypeKind[TypeKind[\"I8\"] = 0] = \"I8\";\r\n TypeKind[TypeKind[\"I16\"] = 1] = \"I16\";\r\n TypeKind[TypeKind[\"I32\"] = 2] = \"I32\";\r\n TypeKind[TypeKind[\"I64\"] = 3] = \"I64\";\r\n TypeKind[TypeKind[\"ISIZE\"] = 4] = \"ISIZE\";\r\n // unsigned integers\r\n TypeKind[TypeKind[\"U8\"] = 5] = \"U8\";\r\n TypeKind[TypeKind[\"U16\"] = 6] = \"U16\";\r\n TypeKind[TypeKind[\"U32\"] = 7] = \"U32\";\r\n TypeKind[TypeKind[\"U64\"] = 8] = \"U64\";\r\n TypeKind[TypeKind[\"USIZE\"] = 9] = \"USIZE\";\r\n TypeKind[TypeKind[\"BOOL\"] = 10] = \"BOOL\";\r\n // floats\r\n TypeKind[TypeKind[\"F32\"] = 11] = \"F32\";\r\n TypeKind[TypeKind[\"F64\"] = 12] = \"F64\";\r\n // other\r\n TypeKind[TypeKind[\"VOID\"] = 13] = \"VOID\";\r\n})(TypeKind = exports.TypeKind || (exports.TypeKind = {}));\r\n/** Indicates capabilities of a type. */\r\nvar TypeFlags;\r\n(function (TypeFlags) {\r\n TypeFlags[TypeFlags[\"NONE\"] = 0] = \"NONE\";\r\n /** Is a signed type that can represent negative values. */\r\n TypeFlags[TypeFlags[\"SIGNED\"] = 1] = \"SIGNED\";\r\n /** Is an unsigned type that cannot represent negative values. */\r\n TypeFlags[TypeFlags[\"UNSIGNED\"] = 2] = \"UNSIGNED\";\r\n /** Is an integer type. */\r\n TypeFlags[TypeFlags[\"INTEGER\"] = 4] = \"INTEGER\";\r\n /** Is a floating point type. */\r\n TypeFlags[TypeFlags[\"FLOAT\"] = 8] = \"FLOAT\";\r\n /** Is a sized integer type with a target specific bit size. */\r\n TypeFlags[TypeFlags[\"SIZE\"] = 16] = \"SIZE\";\r\n /** Is a small type that is emulated in a larger type. */\r\n TypeFlags[TypeFlags[\"SMALL\"] = 32] = \"SMALL\";\r\n /** Is a long type larger than 32-bits. */\r\n TypeFlags[TypeFlags[\"LONG\"] = 64] = \"LONG\";\r\n /** Is a value type. */\r\n TypeFlags[TypeFlags[\"VALUE\"] = 128] = \"VALUE\";\r\n /** Is a reference type. */\r\n TypeFlags[TypeFlags[\"REFERENCE\"] = 256] = \"REFERENCE\";\r\n /** Is a nullable type. */\r\n TypeFlags[TypeFlags[\"NULLABLE\"] = 512] = \"NULLABLE\";\r\n})(TypeFlags = exports.TypeFlags || (exports.TypeFlags = {}));\r\n/** Represents a resolved type. */\r\nvar Type = /** @class */ (function () {\r\n /** Constructs a new resolved type. */\r\n function Type(kind, flags, size) {\r\n /** Respective nullable type, if non-nullable. */\r\n this.nullableType = null;\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classType = null;\r\n this.nonNullableType = this;\r\n }\r\n /** Computes the sign-extending shift in the target type. */\r\n Type.prototype.computeSmallIntegerShift = function (targetType) {\r\n return targetType.size - this.size;\r\n };\r\n /** Computes the truncating mask in the target type. */\r\n Type.prototype.computeSmallIntegerMask = function (targetType) {\r\n return -1 >>> (targetType.size - this.size);\r\n };\r\n /** Tests if this type has the specified capabilities. */\r\n Type.prototype.is = function (flags) {\r\n return (this.flags & flags) == flags;\r\n };\r\n Object.defineProperty(Type.prototype, \"isClass\", {\r\n /** Tests if this type is a class type. */\r\n get: function () { return this.classType != null; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Type.prototype, \"isFunction\", {\r\n /** Tests if this type is a function type. */\r\n get: function () { return this.functionType != null; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Type.prototype, \"isReference\", {\r\n /** Tests if this type is a reference type. */\r\n get: function () { return this.classType != null || this.functionType != null; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /** Composes a class type from this type and a class. */\r\n Type.prototype.asClass = function (classType) {\r\n assert(this.kind == 9 /* USIZE */);\r\n var ret = new Type(this.kind, this.flags & ~128 /* VALUE */ | 256 /* REFERENCE */, this.size);\r\n ret.classType = classType;\r\n return ret;\r\n };\r\n /** Composes a function type from this type and a function. */\r\n Type.prototype.asFunction = function (functionType) {\r\n assert(this.kind == 7 /* U32 */ && !this.isReference);\r\n var ret = new Type(this.kind, this.flags & ~128 /* VALUE */ | 256 /* REFERENCE */, this.size);\r\n ret.functionType = functionType;\r\n return ret;\r\n };\r\n /** Composes the respective nullable type of this type. */\r\n Type.prototype.asNullable = function () {\r\n assert(this.kind == 9 /* USIZE */);\r\n if (!this.nullableType) {\r\n assert(!this.is(512 /* NULLABLE */) && this.isReference);\r\n this.nullableType = new Type(this.kind, this.flags | 512 /* NULLABLE */, this.size);\r\n this.nullableType.classType = this.classType;\r\n this.nullableType.functionType = this.functionType;\r\n }\r\n return this.nullableType;\r\n };\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n Type.prototype.isAssignableTo = function (target) {\r\n var currentClass;\r\n var targetClass;\r\n var currentFunction;\r\n var targetFunction;\r\n if (this.isReference) {\r\n if (target.isReference) {\r\n if (currentClass = this.classType) {\r\n if (targetClass = target.classType) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n }\r\n else if (currentFunction = this.functionType) {\r\n if (targetFunction = target.functionType) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n }\r\n else if (!target.isReference) {\r\n switch (this.kind) {\r\n case 0 /* I8 */:\r\n switch (target.kind) {\r\n case 0 /* I8 */: // same\r\n case 1 /* I16 */: // larger\r\n case 2 /* I32 */: // larger\r\n case 3 /* I64 */: // larger\r\n case 4 /* ISIZE */: // larger\r\n case 5 /* U8 */: // signed to unsigned\r\n case 6 /* U16 */: // larger\r\n case 7 /* U32 */: // larger\r\n case 8 /* U64 */: // larger\r\n case 9 /* USIZE */: // larger\r\n case 11 /* F32 */: // safe\r\n case 12 /* F64 */:// safe\r\n return true;\r\n }\r\n break;\r\n case 1 /* I16 */:\r\n switch (target.kind) {\r\n case 1 /* I16 */: // same\r\n case 2 /* I32 */: // larger\r\n case 3 /* I64 */: // larger\r\n case 4 /* ISIZE */: // larger\r\n case 6 /* U16 */: // signed to unsigned\r\n case 7 /* U32 */: // larger\r\n case 8 /* U64 */: // larger\r\n case 9 /* USIZE */: // larger\r\n case 11 /* F32 */: // safe\r\n case 12 /* F64 */:// safe\r\n return true;\r\n }\r\n break;\r\n case 2 /* I32 */:\r\n switch (target.kind) {\r\n case 2 /* I32 */: // same\r\n case 3 /* I64 */: // larger\r\n case 4 /* ISIZE */: // same or larger\r\n case 7 /* U32 */: // signed to unsigned\r\n case 8 /* U64 */: // larger\r\n case 9 /* USIZE */: // signed to unsigned or larger\r\n case 12 /* F64 */:// safe\r\n return true;\r\n }\r\n break;\r\n case 3 /* I64 */:\r\n switch (target.kind) {\r\n case 3 /* I64 */: // same\r\n case 8 /* U64 */:// signed to unsigned\r\n return true;\r\n case 4 /* ISIZE */: // possibly same\r\n case 9 /* USIZE */:// possibly signed to unsigned\r\n return target.size == 64;\r\n }\r\n break;\r\n case 4 /* ISIZE */:\r\n switch (target.kind) {\r\n case 2 /* I32 */: // possibly same\r\n case 7 /* U32 */:// possibly signed to unsigned\r\n return this.size == 32;\r\n case 3 /* I64 */: // same or larger\r\n case 4 /* ISIZE */: // same\r\n case 8 /* U64 */: // signed to unsigned or larger\r\n case 9 /* USIZE */:// signed to unsigned\r\n return true;\r\n case 12 /* F64 */:// possibly safe\r\n return target.size == 32;\r\n }\r\n break;\r\n case 5 /* U8 */:\r\n switch (target.kind) {\r\n case 1 /* I16 */: // larger\r\n case 2 /* I32 */: // larger\r\n case 3 /* I64 */: // larger\r\n case 4 /* ISIZE */: // larger\r\n case 5 /* U8 */: // same\r\n case 6 /* U16 */: // larger\r\n case 7 /* U32 */: // larger\r\n case 8 /* U64 */: // larger\r\n case 9 /* USIZE */: // larger\r\n case 11 /* F32 */: // safe\r\n case 12 /* F64 */:// safe\r\n return true;\r\n }\r\n break;\r\n case 6 /* U16 */:\r\n switch (target.kind) {\r\n case 2 /* I32 */: // larger\r\n case 3 /* I64 */: // larger\r\n case 4 /* ISIZE */: // larger\r\n case 6 /* U16 */: // same\r\n case 7 /* U32 */: // larger\r\n case 8 /* U64 */: // larger\r\n case 9 /* USIZE */: // larger\r\n case 11 /* F32 */: // safe\r\n case 12 /* F64 */:// safe\r\n return true;\r\n }\r\n break;\r\n case 7 /* U32 */:\r\n switch (target.kind) {\r\n case 3 /* I64 */: // larger\r\n case 7 /* U32 */: // same\r\n case 8 /* U64 */: // larger\r\n case 9 /* USIZE */: // same or larger\r\n case 12 /* F64 */:// safe\r\n return true;\r\n }\r\n break;\r\n case 8 /* U64 */:\r\n switch (target.kind) {\r\n case 8 /* U64 */:// same\r\n return true;\r\n case 9 /* USIZE */:// possibly same\r\n return target.size == 64;\r\n }\r\n break;\r\n case 9 /* USIZE */:\r\n switch (target.kind) {\r\n case 7 /* U32 */:// possibly same\r\n return this.size == 32;\r\n case 8 /* U64 */: // same or larger\r\n case 9 /* USIZE */:// same\r\n return true;\r\n case 12 /* F64 */:// possibly safe\r\n return target.size == 32;\r\n }\r\n break;\r\n case 10 /* BOOL */:\r\n switch (target.kind) {\r\n case 0 /* I8 */: // larger\r\n case 1 /* I16 */: // larger\r\n case 2 /* I32 */: // larger\r\n case 3 /* I64 */: // larger\r\n case 4 /* ISIZE */: // larger\r\n case 5 /* U8 */: // larger\r\n case 6 /* U16 */: // larger\r\n case 7 /* U32 */: // larger\r\n case 8 /* U64 */: // larger\r\n case 9 /* USIZE */: // larger\r\n case 10 /* BOOL */:// same\r\n return true;\r\n }\r\n break;\r\n case 11 /* F32 */:\r\n switch (target.kind) {\r\n case 11 /* F32 */: // same\r\n case 12 /* F64 */:// larger\r\n return true;\r\n }\r\n break;\r\n case 12 /* F64 */:\r\n return target.kind == 12 /* F64 */;\r\n }\r\n }\r\n return false;\r\n };\r\n /** Converts this type to its TypeScript representation. */\r\n Type.prototype.toString = function (kindOnly) {\r\n if (kindOnly === void 0) { kindOnly = false; }\r\n switch (this.kind) {\r\n case 0 /* I8 */: return \"i8\";\r\n case 1 /* I16 */: return \"i16\";\r\n case 2 /* I32 */: return \"i32\";\r\n case 3 /* I64 */: return \"i64\";\r\n case 4 /* ISIZE */: return \"isize\";\r\n case 5 /* U8 */: return \"u8\";\r\n case 6 /* U16 */: return \"u16\";\r\n case 7 /* U32 */: return \"u32\";\r\n case 8 /* U64 */: return \"u64\";\r\n case 9 /* USIZE */:\r\n if (kindOnly)\r\n return \"usize\";\r\n return this.classType\r\n ? this.classType.toString()\r\n : this.functionType\r\n ? this.functionType.toTypeString()\r\n : \"usize\";\r\n case 10 /* BOOL */: return \"bool\";\r\n case 11 /* F32 */: return \"f32\";\r\n case 12 /* F64 */: return \"f64\";\r\n case 13 /* VOID */: return \"void\";\r\n default:\r\n assert(false);\r\n return \"\";\r\n }\r\n };\r\n // Binaryen specific\r\n /** Converts this type to its respective native type. */\r\n Type.prototype.toNativeType = function () {\r\n switch (this.kind) {\r\n default:\r\n return module_1.NativeType.I32;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n return module_1.NativeType.I64;\r\n case 4 /* ISIZE */:\r\n case 9 /* USIZE */:\r\n return this.size == 64 ? module_1.NativeType.I64 : module_1.NativeType.I32;\r\n case 11 /* F32 */:\r\n return module_1.NativeType.F32;\r\n case 12 /* F64 */:\r\n return module_1.NativeType.F64;\r\n case 13 /* VOID */:\r\n return module_1.NativeType.None;\r\n }\r\n };\r\n /** Converts this type to its native `0` value. */\r\n Type.prototype.toNativeZero = function (module) {\r\n switch (this.kind) {\r\n case 13 /* VOID */:\r\n assert(false);\r\n default:\r\n return module.createI32(0);\r\n case 4 /* ISIZE */:\r\n case 9 /* USIZE */:\r\n if (this.size != 64)\r\n return module.createI32(0);\r\n // fall-through\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n return module.createI64(0);\r\n case 11 /* F32 */:\r\n return module.createF32(0);\r\n case 12 /* F64 */:\r\n return module.createF64(0);\r\n }\r\n };\r\n /** Converts this type to its native `1` value. */\r\n Type.prototype.toNativeOne = function (module) {\r\n switch (this.kind) {\r\n case 13 /* VOID */:\r\n assert(false);\r\n default:\r\n return module.createI32(1);\r\n case 4 /* ISIZE */:\r\n case 9 /* USIZE */:\r\n if (this.size != 64)\r\n return module.createI32(1);\r\n // fall-through\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n return module.createI64(1);\r\n case 11 /* F32 */:\r\n return module.createF32(1);\r\n case 12 /* F64 */:\r\n return module.createF64(1);\r\n }\r\n };\r\n /** Converts this type to its native `-1` value. */\r\n Type.prototype.toNativeNegOne = function (module) {\r\n switch (this.kind) {\r\n case 13 /* VOID */:\r\n assert(false);\r\n default:\r\n return module.createI32(-1);\r\n case 4 /* ISIZE */:\r\n case 9 /* USIZE */:\r\n if (this.size != 64)\r\n return module.createI32(-1);\r\n // fall-through\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n return module.createI64(-1, -1);\r\n case 11 /* F32 */:\r\n return module.createF32(-1);\r\n case 12 /* F64 */:\r\n return module.createF64(-1);\r\n }\r\n };\r\n /** Converts this type to its signature string. */\r\n Type.prototype.toSignatureString = function () {\r\n switch (this.kind) {\r\n default:\r\n return \"i\";\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n return \"I\";\r\n case 4 /* ISIZE */:\r\n case 9 /* USIZE */:\r\n return this.size == 64 ? \"I\" : \"i\";\r\n case 11 /* F32 */:\r\n return \"f\";\r\n case 12 /* F64 */:\r\n return \"F\";\r\n case 13 /* VOID */:\r\n return \"v\";\r\n }\r\n };\r\n // Types\r\n /** An 8-bit signed integer. */\r\n Type.i8 = new Type(0 /* I8 */, 1 /* SIGNED */ |\r\n 32 /* SMALL */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 8);\r\n /** A 16-bit signed integer. */\r\n Type.i16 = new Type(1 /* I16 */, 1 /* SIGNED */ |\r\n 32 /* SMALL */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 16);\r\n /** A 32-bit signed integer. */\r\n Type.i32 = new Type(2 /* I32 */, 1 /* SIGNED */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 32);\r\n /** A 64-bit signed integer. */\r\n Type.i64 = new Type(3 /* I64 */, 1 /* SIGNED */ |\r\n 64 /* LONG */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 64);\r\n /** A 32-bit signed size. WASM32 only. */\r\n Type.isize32 = new Type(4 /* ISIZE */, 1 /* SIGNED */ |\r\n 16 /* SIZE */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 32);\r\n /** A 64-bit signed size. WASM64 only. */\r\n Type.isize64 = new Type(4 /* ISIZE */, 1 /* SIGNED */ |\r\n 64 /* LONG */ |\r\n 16 /* SIZE */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 64);\r\n /** An 8-bit unsigned integer. */\r\n Type.u8 = new Type(5 /* U8 */, 2 /* UNSIGNED */ |\r\n 32 /* SMALL */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 8);\r\n /** A 16-bit unsigned integer. */\r\n Type.u16 = new Type(6 /* U16 */, 2 /* UNSIGNED */ |\r\n 32 /* SMALL */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 16);\r\n /** A 32-bit unsigned integer. */\r\n Type.u32 = new Type(7 /* U32 */, 2 /* UNSIGNED */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 32);\r\n /** A 64-bit unsigned integer. */\r\n Type.u64 = new Type(8 /* U64 */, 2 /* UNSIGNED */ |\r\n 64 /* LONG */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 64);\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n Type.usize32 = new Type(9 /* USIZE */, 2 /* UNSIGNED */ |\r\n 16 /* SIZE */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 32);\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n Type.usize64 = new Type(9 /* USIZE */, 2 /* UNSIGNED */ |\r\n 64 /* LONG */ |\r\n 16 /* SIZE */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 64);\r\n /** A 1-bit unsigned integer. */\r\n Type.bool = new Type(10 /* BOOL */, 2 /* UNSIGNED */ |\r\n 32 /* SMALL */ |\r\n 4 /* INTEGER */ |\r\n 128 /* VALUE */, 1);\r\n /** A 32-bit float. */\r\n Type.f32 = new Type(11 /* F32 */, 1 /* SIGNED */ |\r\n 8 /* FLOAT */ |\r\n 128 /* VALUE */, 32);\r\n /** A 64-bit float. */\r\n Type.f64 = new Type(12 /* F64 */, 1 /* SIGNED */ |\r\n 64 /* LONG */ |\r\n 8 /* FLOAT */ |\r\n 128 /* VALUE */, 64);\r\n /** No return type. */\r\n Type.void = new Type(13 /* VOID */, 0 /* NONE */, 0);\r\n return Type;\r\n}());\r\nexports.Type = Type;\r\n/** Converts an array of types to an array of native types. */\r\nfunction typesToNativeTypes(types) {\r\n var k = types.length;\r\n var ret = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n ret[i] = types[i].toNativeType();\r\n }\r\n return ret;\r\n}\r\nexports.typesToNativeTypes = typesToNativeTypes;\r\n/** Converts an array of types to its combined string representation. */\r\nfunction typesToString(types) {\r\n var k = types.length;\r\n if (!k)\r\n return \"\";\r\n var sb = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n sb[i] = types[i].toString();\r\n }\r\n return sb.join(\", \");\r\n}\r\nexports.typesToString = typesToString;\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar program_1 = __webpack_require__(2);\r\nvar tokenizer_1 = __webpack_require__(7);\r\nexports.Token = tokenizer_1.Token;\r\nexports.Range = tokenizer_1.Range;\r\nvar path_1 = __webpack_require__(10);\r\n/** Indicates the kind of a node. */\r\nvar NodeKind;\r\n(function (NodeKind) {\r\n NodeKind[NodeKind[\"SOURCE\"] = 0] = \"SOURCE\";\r\n // types\r\n NodeKind[NodeKind[\"TYPE\"] = 1] = \"TYPE\";\r\n NodeKind[NodeKind[\"TYPEPARAMETER\"] = 2] = \"TYPEPARAMETER\";\r\n // expressions\r\n NodeKind[NodeKind[\"IDENTIFIER\"] = 3] = \"IDENTIFIER\";\r\n NodeKind[NodeKind[\"ASSERTION\"] = 4] = \"ASSERTION\";\r\n NodeKind[NodeKind[\"BINARY\"] = 5] = \"BINARY\";\r\n NodeKind[NodeKind[\"CALL\"] = 6] = \"CALL\";\r\n NodeKind[NodeKind[\"COMMA\"] = 7] = \"COMMA\";\r\n NodeKind[NodeKind[\"ELEMENTACCESS\"] = 8] = \"ELEMENTACCESS\";\r\n NodeKind[NodeKind[\"FALSE\"] = 9] = \"FALSE\";\r\n NodeKind[NodeKind[\"FUNCTION\"] = 10] = \"FUNCTION\";\r\n NodeKind[NodeKind[\"FUNCTIONARROW\"] = 11] = \"FUNCTIONARROW\";\r\n NodeKind[NodeKind[\"LITERAL\"] = 12] = \"LITERAL\";\r\n NodeKind[NodeKind[\"NEW\"] = 13] = \"NEW\";\r\n NodeKind[NodeKind[\"NULL\"] = 14] = \"NULL\";\r\n NodeKind[NodeKind[\"PARENTHESIZED\"] = 15] = \"PARENTHESIZED\";\r\n NodeKind[NodeKind[\"PROPERTYACCESS\"] = 16] = \"PROPERTYACCESS\";\r\n NodeKind[NodeKind[\"TERNARY\"] = 17] = \"TERNARY\";\r\n NodeKind[NodeKind[\"SUPER\"] = 18] = \"SUPER\";\r\n NodeKind[NodeKind[\"THIS\"] = 19] = \"THIS\";\r\n NodeKind[NodeKind[\"TRUE\"] = 20] = \"TRUE\";\r\n NodeKind[NodeKind[\"CONSTRUCTOR\"] = 21] = \"CONSTRUCTOR\";\r\n NodeKind[NodeKind[\"UNARYPOSTFIX\"] = 22] = \"UNARYPOSTFIX\";\r\n NodeKind[NodeKind[\"UNARYPREFIX\"] = 23] = \"UNARYPREFIX\";\r\n // statements\r\n NodeKind[NodeKind[\"BLOCK\"] = 24] = \"BLOCK\";\r\n NodeKind[NodeKind[\"BREAK\"] = 25] = \"BREAK\";\r\n NodeKind[NodeKind[\"CONTINUE\"] = 26] = \"CONTINUE\";\r\n NodeKind[NodeKind[\"DO\"] = 27] = \"DO\";\r\n NodeKind[NodeKind[\"EMPTY\"] = 28] = \"EMPTY\";\r\n NodeKind[NodeKind[\"EXPORT\"] = 29] = \"EXPORT\";\r\n NodeKind[NodeKind[\"EXPORTIMPORT\"] = 30] = \"EXPORTIMPORT\";\r\n NodeKind[NodeKind[\"EXPRESSION\"] = 31] = \"EXPRESSION\";\r\n NodeKind[NodeKind[\"FOR\"] = 32] = \"FOR\";\r\n NodeKind[NodeKind[\"IF\"] = 33] = \"IF\";\r\n NodeKind[NodeKind[\"IMPORT\"] = 34] = \"IMPORT\";\r\n NodeKind[NodeKind[\"RETURN\"] = 35] = \"RETURN\";\r\n NodeKind[NodeKind[\"SWITCH\"] = 36] = \"SWITCH\";\r\n NodeKind[NodeKind[\"THROW\"] = 37] = \"THROW\";\r\n NodeKind[NodeKind[\"TRY\"] = 38] = \"TRY\";\r\n NodeKind[NodeKind[\"VARIABLE\"] = 39] = \"VARIABLE\";\r\n NodeKind[NodeKind[\"WHILE\"] = 40] = \"WHILE\";\r\n // declaration statements\r\n NodeKind[NodeKind[\"CLASSDECLARATION\"] = 41] = \"CLASSDECLARATION\";\r\n NodeKind[NodeKind[\"ENUMDECLARATION\"] = 42] = \"ENUMDECLARATION\";\r\n NodeKind[NodeKind[\"ENUMVALUEDECLARATION\"] = 43] = \"ENUMVALUEDECLARATION\";\r\n NodeKind[NodeKind[\"FIELDDECLARATION\"] = 44] = \"FIELDDECLARATION\";\r\n NodeKind[NodeKind[\"FUNCTIONDECLARATION\"] = 45] = \"FUNCTIONDECLARATION\";\r\n NodeKind[NodeKind[\"IMPORTDECLARATION\"] = 46] = \"IMPORTDECLARATION\";\r\n NodeKind[NodeKind[\"INTERFACEDECLARATION\"] = 47] = \"INTERFACEDECLARATION\";\r\n NodeKind[NodeKind[\"METHODDECLARATION\"] = 48] = \"METHODDECLARATION\";\r\n NodeKind[NodeKind[\"NAMESPACEDECLARATION\"] = 49] = \"NAMESPACEDECLARATION\";\r\n NodeKind[NodeKind[\"TYPEDECLARATION\"] = 50] = \"TYPEDECLARATION\";\r\n NodeKind[NodeKind[\"VARIABLEDECLARATION\"] = 51] = \"VARIABLEDECLARATION\";\r\n // other\r\n NodeKind[NodeKind[\"DECORATOR\"] = 52] = \"DECORATOR\";\r\n NodeKind[NodeKind[\"EXPORTMEMBER\"] = 53] = \"EXPORTMEMBER\";\r\n NodeKind[NodeKind[\"MODIFIER\"] = 54] = \"MODIFIER\";\r\n NodeKind[NodeKind[\"PARAMETER\"] = 55] = \"PARAMETER\";\r\n NodeKind[NodeKind[\"SWITCHCASE\"] = 56] = \"SWITCHCASE\";\r\n})(NodeKind = exports.NodeKind || (exports.NodeKind = {}));\r\n/** Base class of all nodes. */\r\nvar Node = /** @class */ (function () {\r\n function Node() {\r\n /** Parent node. */\r\n this.parent = null;\r\n }\r\n // types\r\n Node.createType = function (identifier, typeArguments, isNullable, range) {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = identifier;\r\n type.typeArguments = typeArguments;\r\n type.isNullable = isNullable;\r\n return type;\r\n };\r\n // expressions\r\n Node.createIdentifierExpression = function (name, range) {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n };\r\n Node.createArrayLiteralExpression = function (elements, range) {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements;\r\n setParentOpt(elements, expr);\r\n return expr;\r\n };\r\n Node.createAssertionExpression = function (assertionKind, expression, toType, range) {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression;\r\n expression.parent = expr;\r\n expr.toType = toType;\r\n toType.parent = expr;\r\n return expr;\r\n };\r\n Node.createBinaryExpression = function (operator, left, right, range) {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left;\r\n left.parent = expr;\r\n expr.right = right;\r\n right.parent = expr;\r\n return expr;\r\n };\r\n Node.createCallExpression = function (expression, typeArgs, args, range) {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression;\r\n expression.parent = expr;\r\n expr.typeArguments = typeArgs;\r\n if (typeArgs)\r\n setParent(typeArgs, expr);\r\n expr.arguments = args;\r\n setParent(args, expr);\r\n return expr;\r\n };\r\n Node.createCommaExpression = function (expressions, range) {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions;\r\n setParent(expressions, expr);\r\n return expr;\r\n };\r\n Node.createConstructorExpression = function (range) {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n };\r\n Node.createElementAccessExpression = function (expression, element, range) {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression;\r\n expression.parent = expr;\r\n expr.elementExpression = element;\r\n element.parent = expr;\r\n return expr;\r\n };\r\n Node.createFalseExpression = function (range) {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n };\r\n Node.createFloatLiteralExpression = function (value, range) {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n };\r\n Node.createFunctionExpression = function (declaration, isArrow) {\r\n if (isArrow === void 0) { isArrow = false; }\r\n var expr = isArrow\r\n ? new FunctionArrowExpression()\r\n : new FunctionExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n };\r\n Node.createIntegerLiteralExpression = function (value, range) {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n };\r\n Node.createNewExpression = function (expression, typeArgs, args, range) {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression;\r\n expression.parent = expr;\r\n expr.typeArguments = typeArgs;\r\n if (typeArgs)\r\n setParent(typeArgs, expr);\r\n expr.arguments = args;\r\n setParent(args, expr);\r\n return expr;\r\n };\r\n Node.createNullExpression = function (range) {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n };\r\n Node.createParenthesizedExpression = function (expression, range) {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression;\r\n expression.parent = expr;\r\n return expr;\r\n };\r\n Node.createPropertyAccessExpression = function (expression, property, range) {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression;\r\n expression.parent = expr;\r\n expr.property = property;\r\n property.parent = expr;\r\n return expr;\r\n };\r\n Node.createRegexpLiteralExpression = function (pattern, flags, range) {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n };\r\n Node.createTernaryExpression = function (condition, ifThen, ifElse, range) {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition;\r\n condition.parent = expr;\r\n expr.ifThen = ifThen;\r\n ifThen.parent = expr;\r\n expr.ifElse = ifElse;\r\n ifElse.parent = expr;\r\n return expr;\r\n };\r\n Node.createStringLiteralExpression = function (value, range) {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n };\r\n Node.createSuperExpression = function (range) {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n };\r\n Node.createThisExpression = function (range) {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n };\r\n Node.createTrueExpression = function (range) {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n };\r\n Node.createUnaryPostfixExpression = function (operator, operand, range) {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand;\r\n operand.parent = expr;\r\n return expr;\r\n };\r\n Node.createUnaryPrefixExpression = function (operator, operand, range) {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand;\r\n operand.parent = expr;\r\n return expr;\r\n };\r\n // statements\r\n Node.createBlockStatement = function (statements, range) {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements;\r\n setParent(statements, stmt);\r\n return stmt;\r\n };\r\n Node.createBreakStatement = function (label, range) {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label;\r\n if (label)\r\n label.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createClassDeclaration = function (identifier, typeParameters, extendsType, implementsTypes, members, modifiers, decorators, range) {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.name = identifier;\r\n identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters;\r\n setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType;\r\n if (extendsType)\r\n extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes;\r\n setParent(implementsTypes, stmt);\r\n stmt.members = members;\r\n setParent(members, stmt);\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n stmt.decorators = decorators;\r\n if (decorators)\r\n setParent(decorators, stmt);\r\n return stmt;\r\n };\r\n Node.createContinueStatement = function (label, range) {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label;\r\n if (label)\r\n label.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createDecorator = function (expression, args, range) {\r\n var stmt = new Decorator();\r\n stmt.range = range;\r\n stmt.name = expression;\r\n expression.parent = stmt;\r\n stmt.arguments = args;\r\n if (args)\r\n setParent(args, stmt);\r\n if (expression.kind == NodeKind.IDENTIFIER) {\r\n switch (expression.text) {\r\n case \"global\":\r\n stmt.decoratorKind = 1 /* GLOBAL */;\r\n break;\r\n case \"operator\":\r\n stmt.decoratorKind = 2 /* OPERATOR */;\r\n break;\r\n case \"unmanaged\":\r\n stmt.decoratorKind = 3 /* UNMANAGED */;\r\n break;\r\n case \"offset\":\r\n stmt.decoratorKind = 4 /* OFFSET */;\r\n break;\r\n default:\r\n stmt.decoratorKind = 0 /* CUSTOM */;\r\n break;\r\n }\r\n }\r\n else {\r\n stmt.decoratorKind = 0 /* CUSTOM */;\r\n }\r\n return stmt;\r\n };\r\n Node.createDoStatement = function (statement, condition, range) {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement;\r\n statement.parent = stmt;\r\n stmt.condition = condition;\r\n condition.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createEmptyStatement = function (range) {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n };\r\n Node.createEnumDeclaration = function (name, members, modifiers, decorators, range) {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.values = members;\r\n setParent(members, stmt);\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n stmt.decorators = decorators;\r\n if (decorators)\r\n setParent(decorators, stmt);\r\n return stmt;\r\n };\r\n Node.createEnumValueDeclaration = function (name, value, range) {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.value = value;\r\n if (value)\r\n value.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createExportStatement = function (members, path, modifiers, range) {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.members = members;\r\n setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n var normalizedPath = path_1.normalize(path.value);\r\n if (path.value.startsWith(\".\")) {\r\n stmt.normalizedPath = path_1.resolve(normalizedPath, range.source.normalizedPath);\r\n }\r\n else {\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n }\r\n else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n return stmt;\r\n };\r\n Node.createExportImportStatement = function (name, externalName, range) {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.externalName = externalName;\r\n externalName.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createExportMember = function (name, externalName, range) {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name;\r\n name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n }\r\n else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n };\r\n Node.createExpressionStatement = function (expression) {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression;\r\n expression.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createIfStatement = function (condition, ifTrue, ifFalse, range) {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition;\r\n condition.parent = stmt;\r\n stmt.ifTrue = ifTrue;\r\n ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse;\r\n if (ifFalse)\r\n ifFalse.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createImportStatement = function (decls, path, range) {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls;\r\n if (decls)\r\n setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = path_1.normalize(path.value);\r\n if (path.value.startsWith(\".\")) {\r\n stmt.normalizedPath = path_1.resolve(normalizedPath, range.source.normalizedPath);\r\n }\r\n else {\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n };\r\n Node.createImportStatementWithWildcard = function (identifier, path, range) {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = path_1.resolve(path_1.normalize(path.value), range.source.normalizedPath);\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n };\r\n Node.createImportDeclaration = function (externalName, name, range) {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName;\r\n externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n }\r\n else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n };\r\n Node.createInterfaceDeclaration = function (name, extendsType, members, modifiers, range) {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.extendsType = extendsType;\r\n if (extendsType)\r\n extendsType.parent = stmt;\r\n stmt.members = members;\r\n setParent(members, stmt);\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n return stmt;\r\n };\r\n Node.createFieldDeclaration = function (name, type, initializer, modifiers, decorators, range) {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.type = type;\r\n if (type)\r\n type.parent = stmt;\r\n stmt.initializer = initializer;\r\n if (initializer)\r\n initializer.parent = stmt;\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n stmt.decorators = decorators;\r\n if (decorators)\r\n setParent(decorators, stmt);\r\n return stmt;\r\n };\r\n Node.createForStatement = function (initializer, condition, incrementor, statement, range) {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer;\r\n if (initializer)\r\n initializer.parent = stmt;\r\n stmt.condition = condition;\r\n if (condition)\r\n condition.parent = stmt;\r\n stmt.incrementor = incrementor;\r\n if (incrementor)\r\n incrementor.parent = stmt;\r\n stmt.statement = statement;\r\n statement.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createTypeParameter = function (name, extendsType, range) {\r\n var elem = new TypeParameter();\r\n elem.range = range;\r\n elem.name = name;\r\n name.parent = elem;\r\n elem.extendsType = extendsType;\r\n if (extendsType)\r\n extendsType.parent = elem;\r\n return elem;\r\n };\r\n Node.createParameter = function (name, type, initializer, kind, range) {\r\n var elem = new Parameter();\r\n elem.range = range;\r\n elem.name = name;\r\n name.parent = elem;\r\n elem.type = type;\r\n if (type)\r\n type.parent = elem;\r\n elem.initializer = initializer;\r\n if (initializer)\r\n initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n };\r\n Node.createFunctionDeclaration = function (name, typeParameters, parameters, returnType, body, modifiers, decorators, range) {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.typeParameters = typeParameters;\r\n if (typeParameters)\r\n setParent(typeParameters, stmt);\r\n stmt.parameters = parameters;\r\n setParent(parameters, stmt);\r\n stmt.returnType = returnType;\r\n if (returnType)\r\n returnType.parent = stmt;\r\n stmt.body = body;\r\n if (body)\r\n body.parent = stmt;\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n stmt.decorators = decorators;\r\n if (decorators)\r\n setParent(decorators, stmt);\r\n return stmt;\r\n };\r\n Node.createMethodDeclaration = function (name, typeParameters, parameters, returnType, body, modifiers, decorators, range) {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.typeParameters = typeParameters;\r\n if (typeParameters)\r\n setParent(typeParameters, stmt);\r\n stmt.parameters = parameters;\r\n setParent(parameters, stmt);\r\n stmt.returnType = returnType;\r\n if (returnType)\r\n returnType.parent = stmt;\r\n stmt.body = body;\r\n if (body)\r\n body.parent = stmt;\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n stmt.decorators = decorators;\r\n if (decorators)\r\n setParent(decorators, stmt);\r\n return stmt;\r\n };\r\n Node.createModifier = function (kind, range) {\r\n var elem = new Modifier();\r\n elem.range = range;\r\n elem.modifierKind = kind;\r\n return elem;\r\n };\r\n Node.createNamespaceDeclaration = function (name, members, modifiers, decorators, range) {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.members = members;\r\n setParent(members, stmt);\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n stmt.decorators = decorators;\r\n if (decorators)\r\n setParent(decorators, stmt);\r\n return stmt;\r\n };\r\n Node.createReturnStatement = function (value, range) {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value;\r\n if (value)\r\n value.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createSwitchStatement = function (condition, cases, range) {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition;\r\n condition.parent = stmt;\r\n stmt.cases = cases;\r\n setParent(cases, stmt);\r\n return stmt;\r\n };\r\n Node.createSwitchCase = function (label, statements, range) {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label;\r\n if (label)\r\n label.parent = elem;\r\n elem.statements = statements;\r\n setParent(statements, elem);\r\n return elem;\r\n };\r\n Node.createThrowStatement = function (value, range) {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value;\r\n value.parent = stmt;\r\n return stmt;\r\n };\r\n Node.createTryStatement = function (statements, catchVariable, catchStatements, finallyStatements, range) {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements;\r\n setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable)\r\n catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements)\r\n setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements)\r\n setParent(finallyStatements, stmt);\r\n return stmt;\r\n };\r\n Node.createTypeDeclaration = function (name, alias, modifiers, decorators, range) {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.name = name;\r\n name.parent = stmt;\r\n stmt.alias = alias;\r\n alias.parent = stmt;\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n stmt.decorators = decorators;\r\n if (decorators)\r\n setParent(decorators, stmt);\r\n return stmt;\r\n };\r\n Node.createVariableStatement = function (declarations, modifiers, decorators, range) {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.declarations = declarations;\r\n setParent(declarations, stmt);\r\n stmt.modifiers = modifiers;\r\n if (modifiers)\r\n setParent(modifiers, stmt);\r\n stmt.decorators = decorators;\r\n if (decorators)\r\n setParent(decorators, stmt);\r\n return stmt;\r\n };\r\n Node.createVariableDeclaration = function (name, type, initializer, modifiers, decorators, range) {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.name = name;\r\n name.parent = elem;\r\n elem.type = type;\r\n if (type)\r\n type.parent = elem;\r\n elem.initializer = initializer;\r\n if (initializer)\r\n initializer.parent = elem;\r\n elem.modifiers = modifiers; // inherited from parent VariableStatement\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n };\r\n Node.createWhileStatement = function (condition, statement, range) {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition;\r\n condition.parent = stmt;\r\n stmt.statement = statement;\r\n statement.parent = stmt;\r\n return stmt;\r\n };\r\n return Node;\r\n}());\r\nexports.Node = Node;\r\n// types\r\n/** Represents a type annotation. */\r\nvar TypeNode = /** @class */ (function (_super) {\r\n __extends(TypeNode, _super);\r\n function TypeNode() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.TYPE;\r\n return _this;\r\n }\r\n return TypeNode;\r\n}(Node));\r\nexports.TypeNode = TypeNode;\r\n/** Represents a type parameter. */\r\nvar TypeParameter = /** @class */ (function (_super) {\r\n __extends(TypeParameter, _super);\r\n function TypeParameter() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.TYPEPARAMETER;\r\n return _this;\r\n }\r\n return TypeParameter;\r\n}(Node));\r\nexports.TypeParameter = TypeParameter;\r\n// expressions\r\n/** Base class of all expression nodes. */\r\nvar Expression = /** @class */ (function (_super) {\r\n __extends(Expression, _super);\r\n function Expression() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return Expression;\r\n}(Node));\r\nexports.Expression = Expression;\r\n/** Represents an identifier expression. */\r\nvar IdentifierExpression = /** @class */ (function (_super) {\r\n __extends(IdentifierExpression, _super);\r\n function IdentifierExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.IDENTIFIER;\r\n return _this;\r\n }\r\n return IdentifierExpression;\r\n}(Expression));\r\nexports.IdentifierExpression = IdentifierExpression;\r\n/** Indicates the kind of a literal. */\r\nvar LiteralKind;\r\n(function (LiteralKind) {\r\n LiteralKind[LiteralKind[\"FLOAT\"] = 0] = \"FLOAT\";\r\n LiteralKind[LiteralKind[\"INTEGER\"] = 1] = \"INTEGER\";\r\n LiteralKind[LiteralKind[\"STRING\"] = 2] = \"STRING\";\r\n LiteralKind[LiteralKind[\"REGEXP\"] = 3] = \"REGEXP\";\r\n LiteralKind[LiteralKind[\"ARRAY\"] = 4] = \"ARRAY\";\r\n LiteralKind[LiteralKind[\"OBJECT\"] = 5] = \"OBJECT\";\r\n})(LiteralKind = exports.LiteralKind || (exports.LiteralKind = {}));\r\n/** Base class of all literal expressions. */\r\nvar LiteralExpression = /** @class */ (function (_super) {\r\n __extends(LiteralExpression, _super);\r\n function LiteralExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.LITERAL;\r\n return _this;\r\n }\r\n return LiteralExpression;\r\n}(Expression));\r\nexports.LiteralExpression = LiteralExpression;\r\n/** Represents an `[]` literal expression. */\r\nvar ArrayLiteralExpression = /** @class */ (function (_super) {\r\n __extends(ArrayLiteralExpression, _super);\r\n function ArrayLiteralExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.literalKind = 4 /* ARRAY */;\r\n return _this;\r\n }\r\n return ArrayLiteralExpression;\r\n}(LiteralExpression));\r\nexports.ArrayLiteralExpression = ArrayLiteralExpression;\r\n/** Indicates the kind of an assertion. */\r\nvar AssertionKind;\r\n(function (AssertionKind) {\r\n AssertionKind[AssertionKind[\"PREFIX\"] = 0] = \"PREFIX\";\r\n AssertionKind[AssertionKind[\"AS\"] = 1] = \"AS\";\r\n})(AssertionKind = exports.AssertionKind || (exports.AssertionKind = {}));\r\n/** Represents an assertion expression. */\r\nvar AssertionExpression = /** @class */ (function (_super) {\r\n __extends(AssertionExpression, _super);\r\n function AssertionExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.ASSERTION;\r\n return _this;\r\n }\r\n return AssertionExpression;\r\n}(Expression));\r\nexports.AssertionExpression = AssertionExpression;\r\n/** Represents a binary expression. */\r\nvar BinaryExpression = /** @class */ (function (_super) {\r\n __extends(BinaryExpression, _super);\r\n function BinaryExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.BINARY;\r\n return _this;\r\n }\r\n return BinaryExpression;\r\n}(Expression));\r\nexports.BinaryExpression = BinaryExpression;\r\n/** Represents a call expression. */\r\nvar CallExpression = /** @class */ (function (_super) {\r\n __extends(CallExpression, _super);\r\n function CallExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.CALL;\r\n return _this;\r\n }\r\n return CallExpression;\r\n}(Expression));\r\nexports.CallExpression = CallExpression;\r\n/** Represents a comma expression composed of multiple expressions. */\r\nvar CommaExpression = /** @class */ (function (_super) {\r\n __extends(CommaExpression, _super);\r\n function CommaExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.COMMA;\r\n return _this;\r\n }\r\n return CommaExpression;\r\n}(Expression));\r\nexports.CommaExpression = CommaExpression;\r\n/** Represents a `constructor` expression. */\r\nvar ConstructorExpression = /** @class */ (function (_super) {\r\n __extends(ConstructorExpression, _super);\r\n function ConstructorExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.CONSTRUCTOR;\r\n _this.text = \"constructor\";\r\n return _this;\r\n }\r\n return ConstructorExpression;\r\n}(IdentifierExpression));\r\nexports.ConstructorExpression = ConstructorExpression;\r\n/** Represents an element access expression, e.g., array access. */\r\nvar ElementAccessExpression = /** @class */ (function (_super) {\r\n __extends(ElementAccessExpression, _super);\r\n function ElementAccessExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.ELEMENTACCESS;\r\n return _this;\r\n }\r\n return ElementAccessExpression;\r\n}(Expression));\r\nexports.ElementAccessExpression = ElementAccessExpression;\r\n/** Represents a float literal expression. */\r\nvar FloatLiteralExpression = /** @class */ (function (_super) {\r\n __extends(FloatLiteralExpression, _super);\r\n function FloatLiteralExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.literalKind = 0 /* FLOAT */;\r\n return _this;\r\n }\r\n return FloatLiteralExpression;\r\n}(LiteralExpression));\r\nexports.FloatLiteralExpression = FloatLiteralExpression;\r\n/** Represents a function expression using the 'function' keyword. */\r\nvar FunctionExpression = /** @class */ (function (_super) {\r\n __extends(FunctionExpression, _super);\r\n function FunctionExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.FUNCTION;\r\n return _this;\r\n }\r\n return FunctionExpression;\r\n}(Expression));\r\nexports.FunctionExpression = FunctionExpression;\r\n/** Represents an arrow function expression. */\r\nvar FunctionArrowExpression = /** @class */ (function (_super) {\r\n __extends(FunctionArrowExpression, _super);\r\n function FunctionArrowExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.FUNCTIONARROW;\r\n return _this;\r\n }\r\n return FunctionArrowExpression;\r\n}(FunctionExpression));\r\nexports.FunctionArrowExpression = FunctionArrowExpression;\r\n/** Represents an integer literal expression. */\r\nvar IntegerLiteralExpression = /** @class */ (function (_super) {\r\n __extends(IntegerLiteralExpression, _super);\r\n function IntegerLiteralExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.literalKind = 1 /* INTEGER */;\r\n return _this;\r\n }\r\n return IntegerLiteralExpression;\r\n}(LiteralExpression));\r\nexports.IntegerLiteralExpression = IntegerLiteralExpression;\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nvar NewExpression = /** @class */ (function (_super) {\r\n __extends(NewExpression, _super);\r\n function NewExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.NEW;\r\n return _this;\r\n }\r\n return NewExpression;\r\n}(CallExpression));\r\nexports.NewExpression = NewExpression;\r\n/** Represents a `null` expression. */\r\nvar NullExpression = /** @class */ (function (_super) {\r\n __extends(NullExpression, _super);\r\n function NullExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.NULL;\r\n _this.text = \"null\";\r\n return _this;\r\n }\r\n return NullExpression;\r\n}(IdentifierExpression));\r\nexports.NullExpression = NullExpression;\r\n/** Represents a parenthesized expression. */\r\nvar ParenthesizedExpression = /** @class */ (function (_super) {\r\n __extends(ParenthesizedExpression, _super);\r\n function ParenthesizedExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.PARENTHESIZED;\r\n return _this;\r\n }\r\n return ParenthesizedExpression;\r\n}(Expression));\r\nexports.ParenthesizedExpression = ParenthesizedExpression;\r\n/** Represents a property access expression. */\r\nvar PropertyAccessExpression = /** @class */ (function (_super) {\r\n __extends(PropertyAccessExpression, _super);\r\n function PropertyAccessExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.PROPERTYACCESS;\r\n return _this;\r\n }\r\n return PropertyAccessExpression;\r\n}(Expression));\r\nexports.PropertyAccessExpression = PropertyAccessExpression;\r\n/** Represents a regular expression literal expression. */\r\nvar RegexpLiteralExpression = /** @class */ (function (_super) {\r\n __extends(RegexpLiteralExpression, _super);\r\n function RegexpLiteralExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.literalKind = 3 /* REGEXP */;\r\n return _this;\r\n }\r\n return RegexpLiteralExpression;\r\n}(LiteralExpression));\r\nexports.RegexpLiteralExpression = RegexpLiteralExpression;\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nvar TernaryExpression = /** @class */ (function (_super) {\r\n __extends(TernaryExpression, _super);\r\n function TernaryExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.TERNARY;\r\n return _this;\r\n }\r\n return TernaryExpression;\r\n}(Expression));\r\nexports.TernaryExpression = TernaryExpression;\r\n/** Represents a string literal expression. */\r\nvar StringLiteralExpression = /** @class */ (function (_super) {\r\n __extends(StringLiteralExpression, _super);\r\n function StringLiteralExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.literalKind = 2 /* STRING */;\r\n return _this;\r\n }\r\n return StringLiteralExpression;\r\n}(LiteralExpression));\r\nexports.StringLiteralExpression = StringLiteralExpression;\r\n/** Represents a `super` expression. */\r\nvar SuperExpression = /** @class */ (function (_super) {\r\n __extends(SuperExpression, _super);\r\n function SuperExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.SUPER;\r\n _this.text = \"super\";\r\n return _this;\r\n }\r\n return SuperExpression;\r\n}(IdentifierExpression));\r\nexports.SuperExpression = SuperExpression;\r\n/** Represents a `this` expression. */\r\nvar ThisExpression = /** @class */ (function (_super) {\r\n __extends(ThisExpression, _super);\r\n function ThisExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.THIS;\r\n _this.text = \"this\";\r\n return _this;\r\n }\r\n return ThisExpression;\r\n}(IdentifierExpression));\r\nexports.ThisExpression = ThisExpression;\r\n/** Represents a `true` expression. */\r\nvar TrueExpression = /** @class */ (function (_super) {\r\n __extends(TrueExpression, _super);\r\n function TrueExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.TRUE;\r\n _this.text = \"true\";\r\n return _this;\r\n }\r\n return TrueExpression;\r\n}(IdentifierExpression));\r\nexports.TrueExpression = TrueExpression;\r\n/** Represents a `false` expression. */\r\nvar FalseExpression = /** @class */ (function (_super) {\r\n __extends(FalseExpression, _super);\r\n function FalseExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.FALSE;\r\n _this.text = \"false\";\r\n return _this;\r\n }\r\n return FalseExpression;\r\n}(IdentifierExpression));\r\nexports.FalseExpression = FalseExpression;\r\n/** Base class of all unary expressions. */\r\nvar UnaryExpression = /** @class */ (function (_super) {\r\n __extends(UnaryExpression, _super);\r\n function UnaryExpression() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return UnaryExpression;\r\n}(Expression));\r\nexports.UnaryExpression = UnaryExpression;\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nvar UnaryPostfixExpression = /** @class */ (function (_super) {\r\n __extends(UnaryPostfixExpression, _super);\r\n function UnaryPostfixExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.UNARYPOSTFIX;\r\n return _this;\r\n }\r\n return UnaryPostfixExpression;\r\n}(UnaryExpression));\r\nexports.UnaryPostfixExpression = UnaryPostfixExpression;\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nvar UnaryPrefixExpression = /** @class */ (function (_super) {\r\n __extends(UnaryPrefixExpression, _super);\r\n function UnaryPrefixExpression() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.UNARYPREFIX;\r\n return _this;\r\n }\r\n return UnaryPrefixExpression;\r\n}(UnaryExpression));\r\nexports.UnaryPrefixExpression = UnaryPrefixExpression;\r\n// statements\r\n/** Indicates the specific kind of a modifier. */\r\nvar ModifierKind;\r\n(function (ModifierKind) {\r\n ModifierKind[ModifierKind[\"ASYNC\"] = 0] = \"ASYNC\";\r\n ModifierKind[ModifierKind[\"CONST\"] = 1] = \"CONST\";\r\n ModifierKind[ModifierKind[\"LET\"] = 2] = \"LET\";\r\n ModifierKind[ModifierKind[\"DECLARE\"] = 3] = \"DECLARE\";\r\n ModifierKind[ModifierKind[\"EXPORT\"] = 4] = \"EXPORT\";\r\n ModifierKind[ModifierKind[\"IMPORT\"] = 5] = \"IMPORT\";\r\n ModifierKind[ModifierKind[\"STATIC\"] = 6] = \"STATIC\";\r\n ModifierKind[ModifierKind[\"ABSTRACT\"] = 7] = \"ABSTRACT\";\r\n ModifierKind[ModifierKind[\"PUBLIC\"] = 8] = \"PUBLIC\";\r\n ModifierKind[ModifierKind[\"PRIVATE\"] = 9] = \"PRIVATE\";\r\n ModifierKind[ModifierKind[\"PROTECTED\"] = 10] = \"PROTECTED\";\r\n ModifierKind[ModifierKind[\"READONLY\"] = 11] = \"READONLY\";\r\n ModifierKind[ModifierKind[\"GET\"] = 12] = \"GET\";\r\n ModifierKind[ModifierKind[\"SET\"] = 13] = \"SET\";\r\n})(ModifierKind = exports.ModifierKind || (exports.ModifierKind = {}));\r\n/** Base class of all statement nodes. */\r\nvar Statement = /** @class */ (function (_super) {\r\n __extends(Statement, _super);\r\n function Statement() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return Statement;\r\n}(Node));\r\nexports.Statement = Statement;\r\n/** Indicates the specific kind of a source. */\r\nvar SourceKind;\r\n(function (SourceKind) {\r\n /** Default source. Usually imported from an entry file. */\r\n SourceKind[SourceKind[\"DEFAULT\"] = 0] = \"DEFAULT\";\r\n /** Entry file. */\r\n SourceKind[SourceKind[\"ENTRY\"] = 1] = \"ENTRY\";\r\n /** Library file. */\r\n SourceKind[SourceKind[\"LIBRARY\"] = 2] = \"LIBRARY\";\r\n})(SourceKind = exports.SourceKind || (exports.SourceKind = {}));\r\n/** A top-level source node. */\r\nvar Source = /** @class */ (function (_super) {\r\n __extends(Source, _super);\r\n /** Constructs a new source node. */\r\n function Source(normalizedPath, text, kind) {\r\n var _this = _super.call(this) || this;\r\n _this.kind = NodeKind.SOURCE;\r\n _this.parent = null;\r\n /** Tokenizer reference. */\r\n _this.tokenizer = null;\r\n /** Source map index. */\r\n _this.debugInfoIndex = -1;\r\n _this.sourceKind = kind;\r\n _this.normalizedPath = normalizedPath;\r\n _this.internalPath = mangleInternalPath(_this.normalizedPath);\r\n _this.statements = new Array();\r\n _this.range = new tokenizer_1.Range(_this, 0, text.length);\r\n _this.text = text;\r\n return _this;\r\n }\r\n Object.defineProperty(Source.prototype, \"isEntry\", {\r\n /** Tests if this source is an entry file. */\r\n get: function () { return this.sourceKind == SourceKind.ENTRY; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Source.prototype, \"isLibrary\", {\r\n /** Tests if this source is a stdlib file. */\r\n get: function () { return this.sourceKind == SourceKind.LIBRARY; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Source;\r\n}(Node));\r\nexports.Source = Source;\r\n/** Base class of all declaration statements. */\r\nvar DeclarationStatement = /** @class */ (function (_super) {\r\n __extends(DeclarationStatement, _super);\r\n function DeclarationStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n /** Array of decorators. */\r\n _this.decorators = null;\r\n _this.cachedProgramLevelInternalName = null;\r\n _this.cachedFileLevelInternalName = null;\r\n return _this;\r\n }\r\n Object.defineProperty(DeclarationStatement.prototype, \"programLevelInternalName\", {\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get: function () {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DeclarationStatement.prototype, \"fileLevelInternalName\", {\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get: function () {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DeclarationStatement.prototype, \"isTopLevel\", {\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get: function () {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DeclarationStatement.prototype, \"isTopLevelExport\", {\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get: function () {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return (hasModifier(ModifierKind.EXPORT, this.modifiers) &&\r\n parent.isTopLevelExport);\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return (hasModifier(ModifierKind.STATIC, this.modifiers) &&\r\n parent.isTopLevelExport);\r\n }\r\n return (parent.kind == NodeKind.SOURCE &&\r\n hasModifier(ModifierKind.EXPORT, this.modifiers));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /** Tests if this declaration needs an explicit export. */\r\n DeclarationStatement.prototype.needsExplicitExport = function (member) {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n };\r\n return DeclarationStatement;\r\n}(Statement));\r\nexports.DeclarationStatement = DeclarationStatement;\r\n/** Base class of all variable-like declaration statements. */\r\nvar VariableLikeDeclarationStatement = /** @class */ (function (_super) {\r\n __extends(VariableLikeDeclarationStatement, _super);\r\n function VariableLikeDeclarationStatement() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return VariableLikeDeclarationStatement;\r\n}(DeclarationStatement));\r\nexports.VariableLikeDeclarationStatement = VariableLikeDeclarationStatement;\r\n/** Represents a block statement. */\r\nvar BlockStatement = /** @class */ (function (_super) {\r\n __extends(BlockStatement, _super);\r\n function BlockStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.BLOCK;\r\n return _this;\r\n }\r\n return BlockStatement;\r\n}(Statement));\r\nexports.BlockStatement = BlockStatement;\r\n/** Represents a `break` statement. */\r\nvar BreakStatement = /** @class */ (function (_super) {\r\n __extends(BreakStatement, _super);\r\n function BreakStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.BREAK;\r\n return _this;\r\n }\r\n return BreakStatement;\r\n}(Statement));\r\nexports.BreakStatement = BreakStatement;\r\n/** Represents a `class` declaration. */\r\nvar ClassDeclaration = /** @class */ (function (_super) {\r\n __extends(ClassDeclaration, _super);\r\n function ClassDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.CLASSDECLARATION;\r\n return _this;\r\n }\r\n return ClassDeclaration;\r\n}(DeclarationStatement));\r\nexports.ClassDeclaration = ClassDeclaration;\r\n/** Represents a `continue` statement. */\r\nvar ContinueStatement = /** @class */ (function (_super) {\r\n __extends(ContinueStatement, _super);\r\n function ContinueStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.CONTINUE;\r\n return _this;\r\n }\r\n return ContinueStatement;\r\n}(Statement));\r\nexports.ContinueStatement = ContinueStatement;\r\n/** Built-in decorator kinds. */\r\nvar DecoratorKind;\r\n(function (DecoratorKind) {\r\n DecoratorKind[DecoratorKind[\"CUSTOM\"] = 0] = \"CUSTOM\";\r\n DecoratorKind[DecoratorKind[\"GLOBAL\"] = 1] = \"GLOBAL\";\r\n DecoratorKind[DecoratorKind[\"OPERATOR\"] = 2] = \"OPERATOR\";\r\n DecoratorKind[DecoratorKind[\"UNMANAGED\"] = 3] = \"UNMANAGED\";\r\n DecoratorKind[DecoratorKind[\"OFFSET\"] = 4] = \"OFFSET\";\r\n})(DecoratorKind = exports.DecoratorKind || (exports.DecoratorKind = {}));\r\n/** Depresents a decorator. */\r\nvar Decorator = /** @class */ (function (_super) {\r\n __extends(Decorator, _super);\r\n function Decorator() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.DECORATOR;\r\n return _this;\r\n }\r\n return Decorator;\r\n}(Statement));\r\nexports.Decorator = Decorator;\r\n/** Represents a `do` statement. */\r\nvar DoStatement = /** @class */ (function (_super) {\r\n __extends(DoStatement, _super);\r\n function DoStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.DO;\r\n return _this;\r\n }\r\n return DoStatement;\r\n}(Statement));\r\nexports.DoStatement = DoStatement;\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nvar EmptyStatement = /** @class */ (function (_super) {\r\n __extends(EmptyStatement, _super);\r\n function EmptyStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.EMPTY;\r\n return _this;\r\n }\r\n return EmptyStatement;\r\n}(Statement));\r\nexports.EmptyStatement = EmptyStatement;\r\n/** Represents an `enum` declaration. */\r\nvar EnumDeclaration = /** @class */ (function (_super) {\r\n __extends(EnumDeclaration, _super);\r\n function EnumDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.ENUMDECLARATION;\r\n return _this;\r\n }\r\n return EnumDeclaration;\r\n}(DeclarationStatement));\r\nexports.EnumDeclaration = EnumDeclaration;\r\n/** Represents a value of an `enum` declaration. */\r\nvar EnumValueDeclaration = /** @class */ (function (_super) {\r\n __extends(EnumValueDeclaration, _super);\r\n function EnumValueDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.ENUMVALUEDECLARATION;\r\n _this.modifiers = null;\r\n return _this;\r\n }\r\n return EnumValueDeclaration;\r\n}(DeclarationStatement));\r\nexports.EnumValueDeclaration = EnumValueDeclaration;\r\n/** Represents an `export import` statement of an interface. */\r\nvar ExportImportStatement = /** @class */ (function (_super) {\r\n __extends(ExportImportStatement, _super);\r\n function ExportImportStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.EXPORTIMPORT;\r\n return _this;\r\n }\r\n return ExportImportStatement;\r\n}(Node));\r\nexports.ExportImportStatement = ExportImportStatement;\r\n/** Represents a member of an `export` statement. */\r\nvar ExportMember = /** @class */ (function (_super) {\r\n __extends(ExportMember, _super);\r\n function ExportMember() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.EXPORTMEMBER;\r\n return _this;\r\n }\r\n return ExportMember;\r\n}(Node));\r\nexports.ExportMember = ExportMember;\r\n/** Represents an `export` statement. */\r\nvar ExportStatement = /** @class */ (function (_super) {\r\n __extends(ExportStatement, _super);\r\n function ExportStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.EXPORT;\r\n return _this;\r\n }\r\n return ExportStatement;\r\n}(Statement));\r\nexports.ExportStatement = ExportStatement;\r\n/** Represents an expression that is used as a statement. */\r\nvar ExpressionStatement = /** @class */ (function (_super) {\r\n __extends(ExpressionStatement, _super);\r\n function ExpressionStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.EXPRESSION;\r\n return _this;\r\n }\r\n return ExpressionStatement;\r\n}(Statement));\r\nexports.ExpressionStatement = ExpressionStatement;\r\n/** Represents a field declaration within a `class`. */\r\nvar FieldDeclaration = /** @class */ (function (_super) {\r\n __extends(FieldDeclaration, _super);\r\n function FieldDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.FIELDDECLARATION;\r\n return _this;\r\n }\r\n return FieldDeclaration;\r\n}(VariableLikeDeclarationStatement));\r\nexports.FieldDeclaration = FieldDeclaration;\r\n/** Represents a `for` statement. */\r\nvar ForStatement = /** @class */ (function (_super) {\r\n __extends(ForStatement, _super);\r\n function ForStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.FOR;\r\n return _this;\r\n }\r\n return ForStatement;\r\n}(Statement));\r\nexports.ForStatement = ForStatement;\r\n/** Represents a `function` declaration. */\r\nvar FunctionDeclaration = /** @class */ (function (_super) {\r\n __extends(FunctionDeclaration, _super);\r\n function FunctionDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.FUNCTIONDECLARATION;\r\n return _this;\r\n }\r\n Object.defineProperty(FunctionDeclaration.prototype, \"isGeneric\", {\r\n get: function () {\r\n return this.typeParameters != null && this.typeParameters.length > 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FunctionDeclaration;\r\n}(DeclarationStatement));\r\nexports.FunctionDeclaration = FunctionDeclaration;\r\n/** Represents an `if` statement. */\r\nvar IfStatement = /** @class */ (function (_super) {\r\n __extends(IfStatement, _super);\r\n function IfStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.IF;\r\n return _this;\r\n }\r\n return IfStatement;\r\n}(Statement));\r\nexports.IfStatement = IfStatement;\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nvar ImportDeclaration = /** @class */ (function (_super) {\r\n __extends(ImportDeclaration, _super);\r\n function ImportDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.IMPORTDECLARATION;\r\n _this.modifiers = null;\r\n return _this;\r\n }\r\n return ImportDeclaration;\r\n}(DeclarationStatement));\r\nexports.ImportDeclaration = ImportDeclaration;\r\n/** Represents an `import` statement. */\r\nvar ImportStatement = /** @class */ (function (_super) {\r\n __extends(ImportStatement, _super);\r\n function ImportStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.IMPORT;\r\n return _this;\r\n }\r\n return ImportStatement;\r\n}(Statement));\r\nexports.ImportStatement = ImportStatement;\r\n/** Represents an `interfarce` declaration. */\r\nvar InterfaceDeclaration = /** @class */ (function (_super) {\r\n __extends(InterfaceDeclaration, _super);\r\n function InterfaceDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.INTERFACEDECLARATION;\r\n return _this;\r\n }\r\n return InterfaceDeclaration;\r\n}(ClassDeclaration));\r\nexports.InterfaceDeclaration = InterfaceDeclaration;\r\n/** Represents a method declaration within a `class`. */\r\nvar MethodDeclaration = /** @class */ (function (_super) {\r\n __extends(MethodDeclaration, _super);\r\n function MethodDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.METHODDECLARATION;\r\n return _this;\r\n }\r\n return MethodDeclaration;\r\n}(FunctionDeclaration));\r\nexports.MethodDeclaration = MethodDeclaration;\r\n/** Represents a `namespace` declaration. */\r\nvar NamespaceDeclaration = /** @class */ (function (_super) {\r\n __extends(NamespaceDeclaration, _super);\r\n function NamespaceDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.NAMESPACEDECLARATION;\r\n return _this;\r\n }\r\n return NamespaceDeclaration;\r\n}(DeclarationStatement));\r\nexports.NamespaceDeclaration = NamespaceDeclaration;\r\n/** Represents the kind of a parameter. */\r\nvar ParameterKind;\r\n(function (ParameterKind) {\r\n /** No specific flags. */\r\n ParameterKind[ParameterKind[\"DEFAULT\"] = 0] = \"DEFAULT\";\r\n /** Is an optional parameter. */\r\n ParameterKind[ParameterKind[\"OPTIONAL\"] = 1] = \"OPTIONAL\";\r\n /** Is a rest parameter. */\r\n ParameterKind[ParameterKind[\"REST\"] = 2] = \"REST\";\r\n})(ParameterKind = exports.ParameterKind || (exports.ParameterKind = {}));\r\n/** Represents a function parameter. */\r\nvar Parameter = /** @class */ (function (_super) {\r\n __extends(Parameter, _super);\r\n function Parameter() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.PARAMETER;\r\n return _this;\r\n }\r\n return Parameter;\r\n}(Node));\r\nexports.Parameter = Parameter;\r\n/** Represents a single modifier. */\r\nvar Modifier = /** @class */ (function (_super) {\r\n __extends(Modifier, _super);\r\n function Modifier() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.MODIFIER;\r\n return _this;\r\n }\r\n return Modifier;\r\n}(Node));\r\nexports.Modifier = Modifier;\r\n/** Represents a `return` statement. */\r\nvar ReturnStatement = /** @class */ (function (_super) {\r\n __extends(ReturnStatement, _super);\r\n function ReturnStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.RETURN;\r\n return _this;\r\n }\r\n return ReturnStatement;\r\n}(Statement));\r\nexports.ReturnStatement = ReturnStatement;\r\n/** Represents a single `case` within a `switch` statement. */\r\nvar SwitchCase = /** @class */ (function (_super) {\r\n __extends(SwitchCase, _super);\r\n function SwitchCase() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.SWITCHCASE;\r\n return _this;\r\n }\r\n return SwitchCase;\r\n}(Node));\r\nexports.SwitchCase = SwitchCase;\r\n/** Represents a `switch` statement. */\r\nvar SwitchStatement = /** @class */ (function (_super) {\r\n __extends(SwitchStatement, _super);\r\n function SwitchStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.SWITCH;\r\n return _this;\r\n }\r\n return SwitchStatement;\r\n}(Statement));\r\nexports.SwitchStatement = SwitchStatement;\r\n/** Represents a `throw` statement. */\r\nvar ThrowStatement = /** @class */ (function (_super) {\r\n __extends(ThrowStatement, _super);\r\n function ThrowStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.THROW;\r\n return _this;\r\n }\r\n return ThrowStatement;\r\n}(Statement));\r\nexports.ThrowStatement = ThrowStatement;\r\n/** Represents a `try` statement. */\r\nvar TryStatement = /** @class */ (function (_super) {\r\n __extends(TryStatement, _super);\r\n function TryStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.TRY;\r\n return _this;\r\n }\r\n return TryStatement;\r\n}(Statement));\r\nexports.TryStatement = TryStatement;\r\n/** Represents a `type` declaration. */\r\nvar TypeDeclaration = /** @class */ (function (_super) {\r\n __extends(TypeDeclaration, _super);\r\n function TypeDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.TYPEDECLARATION;\r\n return _this;\r\n }\r\n return TypeDeclaration;\r\n}(DeclarationStatement));\r\nexports.TypeDeclaration = TypeDeclaration;\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nvar VariableDeclaration = /** @class */ (function (_super) {\r\n __extends(VariableDeclaration, _super);\r\n function VariableDeclaration() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.VARIABLEDECLARATION;\r\n return _this;\r\n }\r\n return VariableDeclaration;\r\n}(VariableLikeDeclarationStatement));\r\nexports.VariableDeclaration = VariableDeclaration;\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nvar VariableStatement = /** @class */ (function (_super) {\r\n __extends(VariableStatement, _super);\r\n function VariableStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.VARIABLE;\r\n return _this;\r\n }\r\n return VariableStatement;\r\n}(Statement));\r\nexports.VariableStatement = VariableStatement;\r\n/** Represents a `while` statement. */\r\nvar WhileStatement = /** @class */ (function (_super) {\r\n __extends(WhileStatement, _super);\r\n function WhileStatement() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.kind = NodeKind.WHILE;\r\n return _this;\r\n }\r\n return WhileStatement;\r\n}(Statement));\r\nexports.WhileStatement = WhileStatement;\r\n/** Cached unused modifiers for reuse. */\r\nvar reusableModifiers = null;\r\nfunction setReusableModifiers(modifiers) {\r\n reusableModifiers = modifiers;\r\n}\r\nexports.setReusableModifiers = setReusableModifiers;\r\n/** Creates a new modifiers array. */\r\nfunction createModifiers() {\r\n var ret;\r\n if (reusableModifiers != null) {\r\n ret = reusableModifiers;\r\n reusableModifiers = null;\r\n }\r\n else {\r\n ret = [];\r\n }\r\n ret.length = 0;\r\n return ret;\r\n}\r\nexports.createModifiers = createModifiers;\r\n// Utility\r\n/** Adds a modifier to a set of modifiers. Creates a new set if `null`. */\r\nfunction addModifier(modifier, modifiers) {\r\n if (modifiers == null)\r\n modifiers = createModifiers();\r\n modifiers.push(modifier);\r\n return modifiers;\r\n}\r\nexports.addModifier = addModifier;\r\n/** Gets a specific modifier from the specified set of modifiers. */\r\nfunction getModifier(kind, modifiers) {\r\n if (modifiers) {\r\n for (var i = 0, k = modifiers.length; i < k; ++i) {\r\n if (modifiers[i].modifierKind == kind) {\r\n return modifiers[i];\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\nexports.getModifier = getModifier;\r\n/** Tests whether a modifier exists in the specified set of modifiers. */\r\nfunction hasModifier(kind, modifiers) {\r\n return getModifier(kind, modifiers) != null;\r\n}\r\nexports.hasModifier = hasModifier;\r\n/** Gets the first decorator by name within at set of decorators, if present. */\r\nfunction getFirstDecorator(name, decorators) {\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n var decorator = decorators[i];\r\n var expression = decorator.name;\r\n if (expression.kind == NodeKind.IDENTIFIER && expression.text == name) {\r\n return decorator;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\nexports.getFirstDecorator = getFirstDecorator;\r\n/** Tests if a specific decorator is present within the specified decorators. */\r\nfunction hasDecorator(name, decorators) {\r\n return getFirstDecorator(name, decorators) != null;\r\n}\r\nexports.hasDecorator = hasDecorator;\r\n/** Mangles a declaration's name to an internal name. */\r\nfunction mangleInternalName(declaration, asGlobal) {\r\n if (asGlobal === void 0) { asGlobal = false; }\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent)\r\n return name;\r\n if (declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE) {\r\n if (!(parent = parent.parent))\r\n return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (hasModifier(ModifierKind.STATIC, declaration.modifiers)\r\n ? program_1.STATIC_DELIMITER\r\n : program_1.INSTANCE_DELIMITER) + name;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) +\r\n program_1.STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + program_1.PATH_DELIMITER + name;\r\n}\r\nexports.mangleInternalName = mangleInternalName;\r\n/** Mangles an external to an internal path. */\r\nfunction mangleInternalPath(path) {\r\n if (path.endsWith(\".ts\"))\r\n path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\nexports.mangleInternalPath = mangleInternalPath;\r\n// Helpers\r\nfunction setParent(nodes, parent) {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\nfunction setParentOpt(nodes, parent) {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n var node = nodes[i];\r\n if (node)\r\n node.parent = parent;\r\n }\r\n}\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\n/*\r\n\r\n This is a modified version of TypeScript's scanner that doesn't perform as much bookkeeping, simply\r\n skips over trivia and provides a more general mark/reset mechanism for the parser to utilize on\r\n ambiguous tokens.\r\n\r\n next() advances the token\r\n peek() peeks for the next token\r\n skip(token) skips over a token if possible\r\n mark() marks at current token\r\n reset() resets to marked state\r\n range() gets the range of the current token\r\n\r\n readFloat() on FLOATLITERAL\r\n readIdentifier() on IDENTIFIER\r\n readInteger() on INTEGERLITERAL\r\n readString() on STRINGLITERAL\r\n\r\n*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar diagnostics_1 = __webpack_require__(1);\r\nvar charcode_1 = __webpack_require__(9);\r\n/** Named token types. */\r\nvar Token;\r\n(function (Token) {\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n Token[Token[\"ABSTRACT\"] = 0] = \"ABSTRACT\";\r\n Token[Token[\"AS\"] = 1] = \"AS\";\r\n Token[Token[\"ASYNC\"] = 2] = \"ASYNC\";\r\n Token[Token[\"AWAIT\"] = 3] = \"AWAIT\";\r\n Token[Token[\"BREAK\"] = 4] = \"BREAK\";\r\n Token[Token[\"CASE\"] = 5] = \"CASE\";\r\n Token[Token[\"CATCH\"] = 6] = \"CATCH\";\r\n Token[Token[\"CLASS\"] = 7] = \"CLASS\";\r\n Token[Token[\"CONST\"] = 8] = \"CONST\";\r\n Token[Token[\"CONTINUE\"] = 9] = \"CONTINUE\";\r\n Token[Token[\"CONSTRUCTOR\"] = 10] = \"CONSTRUCTOR\";\r\n Token[Token[\"DEBUGGER\"] = 11] = \"DEBUGGER\";\r\n Token[Token[\"DECLARE\"] = 12] = \"DECLARE\";\r\n Token[Token[\"DEFAULT\"] = 13] = \"DEFAULT\";\r\n Token[Token[\"DELETE\"] = 14] = \"DELETE\";\r\n Token[Token[\"DO\"] = 15] = \"DO\";\r\n Token[Token[\"ELSE\"] = 16] = \"ELSE\";\r\n Token[Token[\"ENUM\"] = 17] = \"ENUM\";\r\n Token[Token[\"EXPORT\"] = 18] = \"EXPORT\";\r\n Token[Token[\"EXTENDS\"] = 19] = \"EXTENDS\";\r\n Token[Token[\"FALSE\"] = 20] = \"FALSE\";\r\n Token[Token[\"FINALLY\"] = 21] = \"FINALLY\";\r\n Token[Token[\"FOR\"] = 22] = \"FOR\";\r\n Token[Token[\"FROM\"] = 23] = \"FROM\";\r\n Token[Token[\"FUNCTION\"] = 24] = \"FUNCTION\";\r\n Token[Token[\"GET\"] = 25] = \"GET\";\r\n Token[Token[\"IF\"] = 26] = \"IF\";\r\n Token[Token[\"IMPLEMENTS\"] = 27] = \"IMPLEMENTS\";\r\n Token[Token[\"IMPORT\"] = 28] = \"IMPORT\";\r\n Token[Token[\"IN\"] = 29] = \"IN\";\r\n Token[Token[\"INSTANCEOF\"] = 30] = \"INSTANCEOF\";\r\n Token[Token[\"INTERFACE\"] = 31] = \"INTERFACE\";\r\n Token[Token[\"IS\"] = 32] = \"IS\";\r\n Token[Token[\"KEYOF\"] = 33] = \"KEYOF\";\r\n Token[Token[\"LET\"] = 34] = \"LET\";\r\n Token[Token[\"MODULE\"] = 35] = \"MODULE\";\r\n Token[Token[\"NAMESPACE\"] = 36] = \"NAMESPACE\";\r\n Token[Token[\"NEW\"] = 37] = \"NEW\";\r\n Token[Token[\"NULL\"] = 38] = \"NULL\";\r\n Token[Token[\"OF\"] = 39] = \"OF\";\r\n Token[Token[\"PACKAGE\"] = 40] = \"PACKAGE\";\r\n Token[Token[\"PRIVATE\"] = 41] = \"PRIVATE\";\r\n Token[Token[\"PROTECTED\"] = 42] = \"PROTECTED\";\r\n Token[Token[\"PUBLIC\"] = 43] = \"PUBLIC\";\r\n Token[Token[\"READONLY\"] = 44] = \"READONLY\";\r\n Token[Token[\"RETURN\"] = 45] = \"RETURN\";\r\n Token[Token[\"SET\"] = 46] = \"SET\";\r\n Token[Token[\"STATIC\"] = 47] = \"STATIC\";\r\n Token[Token[\"SUPER\"] = 48] = \"SUPER\";\r\n Token[Token[\"SWITCH\"] = 49] = \"SWITCH\";\r\n Token[Token[\"THIS\"] = 50] = \"THIS\";\r\n Token[Token[\"THROW\"] = 51] = \"THROW\";\r\n Token[Token[\"TRUE\"] = 52] = \"TRUE\";\r\n Token[Token[\"TRY\"] = 53] = \"TRY\";\r\n Token[Token[\"TYPE\"] = 54] = \"TYPE\";\r\n Token[Token[\"TYPEOF\"] = 55] = \"TYPEOF\";\r\n Token[Token[\"VAR\"] = 56] = \"VAR\";\r\n Token[Token[\"VOID\"] = 57] = \"VOID\";\r\n Token[Token[\"WHILE\"] = 58] = \"WHILE\";\r\n Token[Token[\"WITH\"] = 59] = \"WITH\";\r\n Token[Token[\"YIELD\"] = 60] = \"YIELD\";\r\n // punctuation\r\n Token[Token[\"OPENBRACE\"] = 61] = \"OPENBRACE\";\r\n Token[Token[\"CLOSEBRACE\"] = 62] = \"CLOSEBRACE\";\r\n Token[Token[\"OPENPAREN\"] = 63] = \"OPENPAREN\";\r\n Token[Token[\"CLOSEPAREN\"] = 64] = \"CLOSEPAREN\";\r\n Token[Token[\"OPENBRACKET\"] = 65] = \"OPENBRACKET\";\r\n Token[Token[\"CLOSEBRACKET\"] = 66] = \"CLOSEBRACKET\";\r\n Token[Token[\"DOT\"] = 67] = \"DOT\";\r\n Token[Token[\"DOT_DOT_DOT\"] = 68] = \"DOT_DOT_DOT\";\r\n Token[Token[\"SEMICOLON\"] = 69] = \"SEMICOLON\";\r\n Token[Token[\"COMMA\"] = 70] = \"COMMA\";\r\n Token[Token[\"LESSTHAN\"] = 71] = \"LESSTHAN\";\r\n Token[Token[\"GREATERTHAN\"] = 72] = \"GREATERTHAN\";\r\n Token[Token[\"LESSTHAN_EQUALS\"] = 73] = \"LESSTHAN_EQUALS\";\r\n Token[Token[\"GREATERTHAN_EQUALS\"] = 74] = \"GREATERTHAN_EQUALS\";\r\n Token[Token[\"EQUALS_EQUALS\"] = 75] = \"EQUALS_EQUALS\";\r\n Token[Token[\"EXCLAMATION_EQUALS\"] = 76] = \"EXCLAMATION_EQUALS\";\r\n Token[Token[\"EQUALS_EQUALS_EQUALS\"] = 77] = \"EQUALS_EQUALS_EQUALS\";\r\n Token[Token[\"EXCLAMATION_EQUALS_EQUALS\"] = 78] = \"EXCLAMATION_EQUALS_EQUALS\";\r\n Token[Token[\"EQUALS_GREATERTHAN\"] = 79] = \"EQUALS_GREATERTHAN\";\r\n Token[Token[\"PLUS\"] = 80] = \"PLUS\";\r\n Token[Token[\"MINUS\"] = 81] = \"MINUS\";\r\n Token[Token[\"ASTERISK_ASTERISK\"] = 82] = \"ASTERISK_ASTERISK\";\r\n Token[Token[\"ASTERISK\"] = 83] = \"ASTERISK\";\r\n Token[Token[\"SLASH\"] = 84] = \"SLASH\";\r\n Token[Token[\"PERCENT\"] = 85] = \"PERCENT\";\r\n Token[Token[\"PLUS_PLUS\"] = 86] = \"PLUS_PLUS\";\r\n Token[Token[\"MINUS_MINUS\"] = 87] = \"MINUS_MINUS\";\r\n Token[Token[\"LESSTHAN_LESSTHAN\"] = 88] = \"LESSTHAN_LESSTHAN\";\r\n Token[Token[\"GREATERTHAN_GREATERTHAN\"] = 89] = \"GREATERTHAN_GREATERTHAN\";\r\n Token[Token[\"GREATERTHAN_GREATERTHAN_GREATERTHAN\"] = 90] = \"GREATERTHAN_GREATERTHAN_GREATERTHAN\";\r\n Token[Token[\"AMPERSAND\"] = 91] = \"AMPERSAND\";\r\n Token[Token[\"BAR\"] = 92] = \"BAR\";\r\n Token[Token[\"CARET\"] = 93] = \"CARET\";\r\n Token[Token[\"EXCLAMATION\"] = 94] = \"EXCLAMATION\";\r\n Token[Token[\"TILDE\"] = 95] = \"TILDE\";\r\n Token[Token[\"AMPERSAND_AMPERSAND\"] = 96] = \"AMPERSAND_AMPERSAND\";\r\n Token[Token[\"BAR_BAR\"] = 97] = \"BAR_BAR\";\r\n Token[Token[\"QUESTION\"] = 98] = \"QUESTION\";\r\n Token[Token[\"COLON\"] = 99] = \"COLON\";\r\n Token[Token[\"EQUALS\"] = 100] = \"EQUALS\";\r\n Token[Token[\"PLUS_EQUALS\"] = 101] = \"PLUS_EQUALS\";\r\n Token[Token[\"MINUS_EQUALS\"] = 102] = \"MINUS_EQUALS\";\r\n Token[Token[\"ASTERISK_EQUALS\"] = 103] = \"ASTERISK_EQUALS\";\r\n Token[Token[\"ASTERISK_ASTERISK_EQUALS\"] = 104] = \"ASTERISK_ASTERISK_EQUALS\";\r\n Token[Token[\"SLASH_EQUALS\"] = 105] = \"SLASH_EQUALS\";\r\n Token[Token[\"PERCENT_EQUALS\"] = 106] = \"PERCENT_EQUALS\";\r\n Token[Token[\"LESSTHAN_LESSTHAN_EQUALS\"] = 107] = \"LESSTHAN_LESSTHAN_EQUALS\";\r\n Token[Token[\"GREATERTHAN_GREATERTHAN_EQUALS\"] = 108] = \"GREATERTHAN_GREATERTHAN_EQUALS\";\r\n Token[Token[\"GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS\"] = 109] = \"GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS\";\r\n Token[Token[\"AMPERSAND_EQUALS\"] = 110] = \"AMPERSAND_EQUALS\";\r\n Token[Token[\"BAR_EQUALS\"] = 111] = \"BAR_EQUALS\";\r\n Token[Token[\"CARET_EQUALS\"] = 112] = \"CARET_EQUALS\";\r\n Token[Token[\"AT\"] = 113] = \"AT\";\r\n // literals\r\n Token[Token[\"IDENTIFIER\"] = 114] = \"IDENTIFIER\";\r\n Token[Token[\"STRINGLITERAL\"] = 115] = \"STRINGLITERAL\";\r\n Token[Token[\"INTEGERLITERAL\"] = 116] = \"INTEGERLITERAL\";\r\n Token[Token[\"FLOATLITERAL\"] = 117] = \"FLOATLITERAL\";\r\n // meta\r\n Token[Token[\"INVALID\"] = 118] = \"INVALID\";\r\n Token[Token[\"ENDOFFILE\"] = 119] = \"ENDOFFILE\";\r\n})(Token = exports.Token || (exports.Token = {}));\r\n(function (Token) {\r\n function fromKeyword(text) {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n case \"break\": return Token.BREAK;\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n case \"get\": return Token.GET;\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n case \"keyof\": return Token.KEYOF;\r\n case \"let\": return Token.LET;\r\n case \"module\": return Token.MODULE;\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n case \"of\": return Token.OF;\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n case \"yield\": return Token.YIELD;\r\n default: return Token.INVALID;\r\n }\r\n }\r\n Token.fromKeyword = fromKeyword;\r\n function isAlsoIdentifier(token) {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n Token.isAlsoIdentifier = isAlsoIdentifier;\r\n function operatorToString(token) {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default:\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n Token.operatorToString = operatorToString;\r\n})(Token = exports.Token || (exports.Token = {}));\r\nvar Range = /** @class */ (function () {\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n function Range(source, start, end) {\r\n this.debugInfoRef = 0;\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n Range.join = function (a, b) {\r\n if (a.source != b.source)\r\n throw new Error(\"source mismatch\");\r\n return new Range(a.source, a.start < b.start ? a.start : b.start, a.end > b.end ? a.end : b.end);\r\n };\r\n Object.defineProperty(Range.prototype, \"atStart\", {\r\n get: function () {\r\n return new Range(this.source, this.start, this.start);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Range.prototype, \"atEnd\", {\r\n get: function () {\r\n return new Range(this.source, this.end, this.end);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Range.prototype, \"line\", {\r\n get: function () {\r\n var text = this.source.text;\r\n var pos = this.start;\r\n var line = 1;\r\n while (pos-- > 0) {\r\n if (text.charCodeAt(pos) == 10 /* LINEFEED */) {\r\n line++;\r\n }\r\n }\r\n return line;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Range.prototype, \"column\", {\r\n get: function () {\r\n var text = this.source.text;\r\n var pos = this.start;\r\n var column = 0;\r\n while (pos-- > 0) {\r\n if (text.charCodeAt(pos) == 10 /* LINEFEED */)\r\n break;\r\n column++;\r\n }\r\n return column;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Range.prototype.toString = function () {\r\n return this.source.text.substring(this.start, this.end);\r\n };\r\n return Range;\r\n}());\r\nexports.Range = Range;\r\nvar Tokenizer = /** @class */ (function (_super) {\r\n __extends(Tokenizer, _super);\r\n function Tokenizer(source, diagnostics) {\r\n if (diagnostics === void 0) { diagnostics = null; }\r\n var _this = _super.call(this, diagnostics) || this;\r\n _this.end = 0;\r\n _this.pos = 0;\r\n _this.token = -1;\r\n _this.tokenPos = 0;\r\n _this.markedPos = 0;\r\n _this.markedToken = -1;\r\n _this.markedTokenPos = 0;\r\n _this.nextToken = -1;\r\n _this.nextTokenOnNewLine = false;\r\n _this.source = source;\r\n _this.pos = 0;\r\n _this.end = source.text.length;\r\n _this.diagnostics = diagnostics ? diagnostics : new Array();\r\n var text = source.text;\r\n // skip bom\r\n if (_this.pos < _this.end &&\r\n text.charCodeAt(_this.pos) == 65279 /* BYTEORDERMARK */) {\r\n ++_this.pos;\r\n }\r\n // skip shebang\r\n if (_this.pos + 1 < _this.end &&\r\n text.charCodeAt(_this.pos) == 35 /* HASH */ &&\r\n text.charCodeAt(_this.pos + 1) == 33 /* EXCLAMATION */) {\r\n _this.pos += 2;\r\n while (_this.pos < _this.end &&\r\n text.charCodeAt(_this.pos) != 10 /* LINEFEED */) {\r\n ++_this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n return _this;\r\n }\r\n Tokenizer.prototype.next = function (preferIdentifier) {\r\n if (preferIdentifier === void 0) { preferIdentifier = false; }\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(preferIdentifier);\r\n };\r\n Tokenizer.prototype.unsafeNext = function (preferIdentifier, maxTokenLength) {\r\n if (preferIdentifier === void 0) { preferIdentifier = false; }\r\n if (maxTokenLength === void 0) { maxTokenLength = i32.MAX_VALUE; }\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n var c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case 13 /* CARRIAGERETURN */:\r\n if (++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 10 /* LINEFEED */) {\r\n ++this.pos;\r\n }\r\n break;\r\n case 10 /* LINEFEED */:\r\n case 9 /* TAB */:\r\n case 11 /* VERTICALTAB */:\r\n case 12 /* FORMFEED */:\r\n case 32 /* SPACE */:\r\n ++this.pos;\r\n break;\r\n case 33 /* EXCLAMATION */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n case 34 /* DOUBLEQUOTE */:\r\n case 39 /* SINGLEQUOTE */:\r\n case 96 /* BACKTICK */:// TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n case 37 /* PERCENT */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n case 38 /* AMPERSAND */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 38 /* AMPERSAND */) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n case 40 /* OPENPAREN */:\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n case 41 /* CLOSEPAREN */:\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n case 42 /* ASTERISK */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == 42 /* ASTERISK */) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n case 43 /* PLUS */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 43 /* PLUS */) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n case 44 /* COMMA */:\r\n ++this.pos;\r\n return Token.COMMA;\r\n case 45 /* MINUS */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 45 /* MINUS */) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n case 46 /* DOT */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (charcode_1.isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == 46 /* DOT */ &&\r\n text.charCodeAt(this.pos + 1) == 46 /* DOT */) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n case 47 /* SLASH */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 47 /* SLASH */) {\r\n // TODO: triple-slash?\r\n // if (\r\n // this.pos + 1 < this.end &&\r\n // text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n // ) {\r\n // }\r\n while (++this.pos < this.end) {\r\n if (charcode_1.isLineBreak(text.charCodeAt(this.pos)))\r\n break;\r\n }\r\n continue;\r\n }\r\n if (text.charCodeAt(this.pos) == 42 /* ASTERISK */) {\r\n var closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (c == 42 /* ASTERISK */ &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == 47 /* SLASH */) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, this.range(this.pos), \"*/\");\r\n }\r\n continue;\r\n }\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n case 48 /* _0 */:\r\n case 49 /* _1 */:\r\n case 50 /* _2 */:\r\n case 51 /* _3 */:\r\n case 52 /* _4 */:\r\n case 53 /* _5 */:\r\n case 54 /* _6 */:\r\n case 55 /* _7 */:\r\n case 56 /* _8 */:\r\n case 57 /* _9 */:\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n case 58 /* COLON */:\r\n ++this.pos;\r\n return Token.COLON;\r\n case 59 /* SEMICOLON */:\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n case 60 /* LESSTHAN */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 60 /* LESSTHAN */) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n case 61 /* EQUALS */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == 62 /* GREATERTHAN */) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n case 62 /* GREATERTHAN */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 62 /* GREATERTHAN */) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 62 /* GREATERTHAN */) {\r\n ++this.pos;\r\n if (maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n case 63 /* QUESTION */:\r\n ++this.pos;\r\n return Token.QUESTION;\r\n case 91 /* OPENBRACKET */:\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n case 93 /* CLOSEBRACKET */:\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n case 94 /* CARET */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n case 123 /* OPENBRACE */:\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n case 124 /* BAR */:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == 124 /* BAR */) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == 61 /* EQUALS */) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n case 125 /* CLOSEBRACE */:\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n case 126 /* TILDE */:\r\n ++this.pos;\r\n return Token.TILDE;\r\n case 64 /* AT */:\r\n ++this.pos;\r\n return Token.AT;\r\n default:\r\n if (charcode_1.isIdentifierStart(c)) {\r\n if (charcode_1.isKeywordCharacter(c)) {\r\n var posBefore = this.pos;\r\n while (++this.pos < this.end &&\r\n charcode_1.isIdentifierPart(c = text.charCodeAt(this.pos))) {\r\n if (!charcode_1.isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n var keywordText = text.substring(posBefore, this.pos);\r\n var keywordToken = Token.fromKeyword(keywordText);\r\n if (keywordToken != Token.INVALID &&\r\n !(preferIdentifier && Token.isAlsoIdentifier(keywordToken))) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n }\r\n else if (charcode_1.isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(diagnostics_1.DiagnosticCode.Invalid_character, this.range(this.pos, this.pos + 1));\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n };\r\n Tokenizer.prototype.peek = function (checkOnNewLine, preferIdentifier, maxCompoundLength) {\r\n if (checkOnNewLine === void 0) { checkOnNewLine = false; }\r\n if (preferIdentifier === void 0) { preferIdentifier = false; }\r\n if (maxCompoundLength === void 0) { maxCompoundLength = i32.MAX_VALUE; }\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(preferIdentifier, maxCompoundLength);\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (charcode_1.isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n };\r\n Tokenizer.prototype.skip = function (token) {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN:// where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n this.token = this.unsafeNext(token == Token.IDENTIFIER, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n }\r\n else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n };\r\n // skipUntil(token1: Token, token2: Token = -1): bool {\r\n // var next: Token;\r\n // do {\r\n // if ((next = this.peek()) == Token.ENDOFFILE)\r\n // return false;\r\n // if (next == token1 || next == token2)\r\n // return true;\r\n // this.next();\r\n // } while (true);\r\n // }\r\n Tokenizer.prototype.mark = function () {\r\n this.markedPos = this.pos;\r\n this.markedToken = this.token;\r\n this.markedTokenPos = this.tokenPos;\r\n };\r\n Tokenizer.prototype.reset = function () {\r\n this.pos = this.markedPos;\r\n this.token = this.markedToken;\r\n this.tokenPos = this.markedTokenPos;\r\n this.nextToken = -1;\r\n };\r\n Tokenizer.prototype.range = function (start, end) {\r\n if (start === void 0) { start = -1; }\r\n if (end === void 0) { end = -1; }\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n }\r\n else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n };\r\n Tokenizer.prototype.readIdentifier = function () {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (++this.pos < this.end &&\r\n charcode_1.isIdentifierPart(text.charCodeAt(this.pos)))\r\n ;\r\n return text.substring(start, this.pos);\r\n };\r\n Tokenizer.prototype.readString = function () {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(diagnostics_1.DiagnosticCode.Unterminated_string_literal, this.range(start - 1, this.end));\r\n break;\r\n }\r\n var c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == 92 /* BACKSLASH */) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (charcode_1.isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(diagnostics_1.DiagnosticCode.Unterminated_string_literal, this.range(start - 1, this.pos));\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n };\r\n Tokenizer.prototype.readEscapeSequence = function () {\r\n if (++this.pos >= this.end) {\r\n this.error(diagnostics_1.DiagnosticCode.Unexpected_end_of_text, this.range(this.end));\r\n return \"\";\r\n }\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case 48 /* _0 */:\r\n return \"\\0\";\r\n case 98 /* b */:\r\n return \"\\b\";\r\n case 116 /* t */:\r\n return \"\\t\";\r\n case 110 /* n */:\r\n return \"\\n\";\r\n case 118 /* v */:\r\n return \"\\v\";\r\n case 102 /* f */:\r\n return \"\\f\";\r\n case 114 /* r */:\r\n return \"\\r\";\r\n case 39 /* SINGLEQUOTE */:\r\n return \"'\";\r\n case 34 /* DOUBLEQUOTE */:\r\n return \"\\\"\";\r\n case 117 /* u */: {\r\n if (this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 123 /* OPENBRACE */) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case 13 /* CARRIAGERETURN */:\r\n if (this.pos < this.end &&\r\n text.charCodeAt(this.pos) == 10 /* LINEFEED */) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n case 10 /* LINEFEED */:\r\n case 8232 /* LINESEPARATOR */:\r\n case 8233 /* PARAGRAPHSEPARATOR */:\r\n return \"\";\r\n default:\r\n return String.fromCharCode(c);\r\n }\r\n };\r\n Tokenizer.prototype.readRegexpPattern = function () {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(diagnostics_1.DiagnosticCode.Unterminated_regular_expression_literal, this.range(start, this.end));\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == 92 /* BACKSLASH */) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n var c = text.charCodeAt(this.pos);\r\n if (c == 47 /* SLASH */ && !escaped)\r\n break;\r\n if (charcode_1.isLineBreak(c)) {\r\n this.error(diagnostics_1.DiagnosticCode.Unterminated_regular_expression_literal, this.range(start, this.pos));\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n };\r\n Tokenizer.prototype.readRegexpFlags = function () {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (!charcode_1.isIdentifierPart(c))\r\n break;\r\n ++this.pos;\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case 103 /* g */:\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n case 105 /* i */:\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n case 109 /* m */:\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n default:\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(diagnostics_1.DiagnosticCode.Invalid_regular_expression_flags, this.range(start, this.pos));\r\n }\r\n return text.substring(start, this.pos);\r\n };\r\n Tokenizer.prototype.testInteger = function () {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == 48 /* _0 */ && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case 88 /* X */:\r\n case 120 /* x */:\r\n case 66 /* B */:\r\n case 98 /* b */:\r\n case 79 /* O */:\r\n case 111 /* o */:\r\n return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n var c = text.charCodeAt(pos);\r\n if (c == 46 /* DOT */ || c == 69 /* E */ || c == 101 /* e */) {\r\n return false;\r\n }\r\n if (c < 48 /* _0 */ || c > 57 /* _9 */)\r\n break;\r\n pos++;\r\n }\r\n return true;\r\n };\r\n Tokenizer.prototype.readInteger = function () {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == 48 /* _0 */ && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case 88 /* X */:\r\n case 120 /* x */:\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n case 66 /* B */:\r\n case 98 /* b */:\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n case 79 /* O */:\r\n case 111 /* o */:\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n if (charcode_1.isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n var start = this.pos;\r\n ++this.pos;\r\n var value = this.readOctalInteger();\r\n this.error(diagnostics_1.DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode, this.range(start, this.pos));\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n };\r\n Tokenizer.prototype.readHexInteger = function () {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= 48 /* _0 */ && c <= 57 /* _9 */) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(i64_mul(value, i64_16), i64_new(c - 48 /* _0 */, 0));\r\n }\r\n else if (c >= 65 /* A */ && c <= 70 /* F */) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(i64_mul(value, i64_16), i64_new(10 + c - 65 /* A */, 0));\r\n }\r\n else if (c >= 97 /* a */ && c <= 102 /* f */) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(i64_mul(value, i64_16), i64_new(10 + c - 97 /* a */, 0));\r\n }\r\n else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(diagnostics_1.DiagnosticCode.Hexadecimal_digit_expected, this.range(start));\r\n }\r\n return value;\r\n };\r\n Tokenizer.prototype.readDecimalInteger = function () {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= 48 /* _0 */ && c <= 57 /* _9 */) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(i64_mul(value, i64_10), i64_new(c - 48 /* _0 */, 0));\r\n }\r\n else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(diagnostics_1.DiagnosticCode.Digit_expected, this.range(start));\r\n }\r\n return value;\r\n };\r\n Tokenizer.prototype.readOctalInteger = function () {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= 48 /* _0 */ && c <= 55 /* _7 */) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(i64_mul(value, i64_8), i64_new(c - 48 /* _0 */, 0));\r\n }\r\n else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(diagnostics_1.DiagnosticCode.Octal_digit_expected, this.range(start));\r\n }\r\n return value;\r\n };\r\n Tokenizer.prototype.readBinaryInteger = function () {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c == 48 /* _0 */) {\r\n // value = value * 2;\r\n value = i64_mul(value, i64_2);\r\n }\r\n else if (c == 49 /* _1 */) {\r\n // value = value * 2 + 1;\r\n value = i64_add(i64_mul(value, i64_2), i64_1);\r\n }\r\n else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(diagnostics_1.DiagnosticCode.Binary_digit_expected, this.range(start));\r\n }\r\n return value;\r\n };\r\n Tokenizer.prototype.readFloat = function () {\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && charcode_1.isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == 46 /* DOT */) {\r\n ++this.pos;\r\n while (this.pos < this.end && charcode_1.isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c == 69 /* E */ || c == 101 /* e */) {\r\n if (++this.pos < this.end && (text.charCodeAt(this.pos) == 45 /* MINUS */ ||\r\n text.charCodeAt(this.pos) == 43 /* PLUS */) &&\r\n charcode_1.isDecimalDigit(text.charCodeAt(this.pos + 1))) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && charcode_1.isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n };\r\n Tokenizer.prototype.readUnicodeEscape = function () {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos++);\r\n if (c >= 48 /* _0 */ && c <= 57 /* _9 */) {\r\n value = value * 16 + c - 48 /* _0 */;\r\n }\r\n else if (c >= 65 /* A */ && c <= 70 /* F */) {\r\n value = value * 16 + 10 + c - 65 /* A */;\r\n }\r\n else if (c >= 97 /* a */ && c <= 102 /* f */) {\r\n value = value * 16 + 10 + c - 97 /* a */;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Hexadecimal_digit_expected, this.range(this.pos - 1, this.pos));\r\n return \"\";\r\n }\r\n if (--remain == 0)\r\n break;\r\n }\r\n if (remain) {\r\n this.error(diagnostics_1.DiagnosticCode.Unexpected_end_of_text, this.range(this.pos));\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n };\r\n Tokenizer.prototype.readExtendedUnicodeEscape = function () {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(diagnostics_1.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive, this.range(start, this.pos));\r\n invalid = true;\r\n }\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(diagnostics_1.DiagnosticCode.Unexpected_end_of_text, this.range(start, this.end));\r\n invalid = true;\r\n }\r\n else if (text.charCodeAt(this.pos) == 125 /* CLOSEBRACE */) {\r\n ++this.pos;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Unterminated_Unicode_escape_sequence, this.range(start, this.pos));\r\n invalid = true;\r\n }\r\n if (invalid)\r\n return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode((((value32 - 65536) / 1024 | 0) + 0xD800), ((value32 - 65536) % 1024 + 0xDC00));\r\n };\r\n Tokenizer.prototype.finish = function () {\r\n };\r\n return Tokenizer;\r\n}(diagnostics_1.DiagnosticEmitter));\r\nexports.Tokenizer = Tokenizer;\r\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\n// code below is generated from diagnosticsMessages.json by scripts/build-diagnostics\r\n/* tslint:disable:max-line-length */\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar DiagnosticCode;\r\n(function (DiagnosticCode) {\r\n DiagnosticCode[DiagnosticCode[\"Operation_not_supported\"] = 100] = \"Operation_not_supported\";\r\n DiagnosticCode[DiagnosticCode[\"Operation_is_unsafe\"] = 101] = \"Operation_is_unsafe\";\r\n DiagnosticCode[DiagnosticCode[\"Conversion_from_type_0_to_1_requires_an_explicit_cast\"] = 200] = \"Conversion_from_type_0_to_1_requires_an_explicit_cast\";\r\n DiagnosticCode[DiagnosticCode[\"Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit\"] = 201] = \"Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit\";\r\n DiagnosticCode[DiagnosticCode[\"Type_0_cannot_be_changed_to_type_1\"] = 202] = \"Type_0_cannot_be_changed_to_type_1\";\r\n DiagnosticCode[DiagnosticCode[\"Type_0_cannot_be_reinterpreted_as_type_1\"] = 203] = \"Type_0_cannot_be_reinterpreted_as_type_1\";\r\n DiagnosticCode[DiagnosticCode[\"Basic_type_0_cannot_be_nullable\"] = 204] = \"Basic_type_0_cannot_be_nullable\";\r\n DiagnosticCode[DiagnosticCode[\"Cannot_export_a_mutable_global\"] = 205] = \"Cannot_export_a_mutable_global\";\r\n DiagnosticCode[DiagnosticCode[\"Compiling_constant_with_non_constant_initializer_as_mutable\"] = 206] = \"Compiling_constant_with_non_constant_initializer_as_mutable\";\r\n DiagnosticCode[DiagnosticCode[\"Structs_cannot_extend_classes_and_vice_versa\"] = 207] = \"Structs_cannot_extend_classes_and_vice_versa\";\r\n DiagnosticCode[DiagnosticCode[\"Structs_cannot_implement_interfaces\"] = 208] = \"Structs_cannot_implement_interfaces\";\r\n DiagnosticCode[DiagnosticCode[\"Invalid_regular_expression_flags\"] = 209] = \"Invalid_regular_expression_flags\";\r\n DiagnosticCode[DiagnosticCode[\"Implementation_0_must_match_the_signature_1\"] = 210] = \"Implementation_0_must_match_the_signature_1\";\r\n DiagnosticCode[DiagnosticCode[\"Unterminated_string_literal\"] = 1002] = \"Unterminated_string_literal\";\r\n DiagnosticCode[DiagnosticCode[\"Identifier_expected\"] = 1003] = \"Identifier_expected\";\r\n DiagnosticCode[DiagnosticCode[\"_0_expected\"] = 1005] = \"_0_expected\";\r\n DiagnosticCode[DiagnosticCode[\"A_file_cannot_have_a_reference_to_itself\"] = 1006] = \"A_file_cannot_have_a_reference_to_itself\";\r\n DiagnosticCode[DiagnosticCode[\"Trailing_comma_not_allowed\"] = 1009] = \"Trailing_comma_not_allowed\";\r\n DiagnosticCode[DiagnosticCode[\"Unexpected_token\"] = 1012] = \"Unexpected_token\";\r\n DiagnosticCode[DiagnosticCode[\"A_rest_parameter_must_be_last_in_a_parameter_list\"] = 1014] = \"A_rest_parameter_must_be_last_in_a_parameter_list\";\r\n DiagnosticCode[DiagnosticCode[\"Parameter_cannot_have_question_mark_and_initializer\"] = 1015] = \"Parameter_cannot_have_question_mark_and_initializer\";\r\n DiagnosticCode[DiagnosticCode[\"A_required_parameter_cannot_follow_an_optional_parameter\"] = 1016] = \"A_required_parameter_cannot_follow_an_optional_parameter\";\r\n DiagnosticCode[DiagnosticCode[\"Enum_member_must_have_initializer\"] = 1061] = \"Enum_member_must_have_initializer\";\r\n DiagnosticCode[DiagnosticCode[\"Statements_are_not_allowed_in_ambient_contexts\"] = 1036] = \"Statements_are_not_allowed_in_ambient_contexts\";\r\n DiagnosticCode[DiagnosticCode[\"Initializers_are_not_allowed_in_ambient_contexts\"] = 1039] = \"Initializers_are_not_allowed_in_ambient_contexts\";\r\n DiagnosticCode[DiagnosticCode[\"_0_modifier_cannot_be_used_here\"] = 1042] = \"_0_modifier_cannot_be_used_here\";\r\n DiagnosticCode[DiagnosticCode[\"A_rest_parameter_cannot_be_optional\"] = 1047] = \"A_rest_parameter_cannot_be_optional\";\r\n DiagnosticCode[DiagnosticCode[\"A_rest_parameter_cannot_have_an_initializer\"] = 1048] = \"A_rest_parameter_cannot_have_an_initializer\";\r\n DiagnosticCode[DiagnosticCode[\"A_set_accessor_must_have_exactly_one_parameter\"] = 1049] = \"A_set_accessor_must_have_exactly_one_parameter\";\r\n DiagnosticCode[DiagnosticCode[\"A_set_accessor_parameter_cannot_have_an_initializer\"] = 1052] = \"A_set_accessor_parameter_cannot_have_an_initializer\";\r\n DiagnosticCode[DiagnosticCode[\"A_get_accessor_cannot_have_parameters\"] = 1054] = \"A_get_accessor_cannot_have_parameters\";\r\n DiagnosticCode[DiagnosticCode[\"Type_parameters_cannot_appear_on_a_constructor_declaration\"] = 1092] = \"Type_parameters_cannot_appear_on_a_constructor_declaration\";\r\n DiagnosticCode[DiagnosticCode[\"Type_annotation_cannot_appear_on_a_constructor_declaration\"] = 1093] = \"Type_annotation_cannot_appear_on_a_constructor_declaration\";\r\n DiagnosticCode[DiagnosticCode[\"An_accessor_cannot_have_type_parameters\"] = 1094] = \"An_accessor_cannot_have_type_parameters\";\r\n DiagnosticCode[DiagnosticCode[\"A_set_accessor_cannot_have_a_return_type_annotation\"] = 1095] = \"A_set_accessor_cannot_have_a_return_type_annotation\";\r\n DiagnosticCode[DiagnosticCode[\"Type_parameter_list_cannot_be_empty\"] = 1098] = \"Type_parameter_list_cannot_be_empty\";\r\n DiagnosticCode[DiagnosticCode[\"A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement\"] = 1104] = \"A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement\";\r\n DiagnosticCode[DiagnosticCode[\"A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement\"] = 1105] = \"A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement\";\r\n DiagnosticCode[DiagnosticCode[\"A_return_statement_can_only_be_used_within_a_function_body\"] = 1108] = \"A_return_statement_can_only_be_used_within_a_function_body\";\r\n DiagnosticCode[DiagnosticCode[\"Expression_expected\"] = 1109] = \"Expression_expected\";\r\n DiagnosticCode[DiagnosticCode[\"Type_expected\"] = 1110] = \"Type_expected\";\r\n DiagnosticCode[DiagnosticCode[\"A_default_clause_cannot_appear_more_than_once_in_a_switch_statement\"] = 1113] = \"A_default_clause_cannot_appear_more_than_once_in_a_switch_statement\";\r\n DiagnosticCode[DiagnosticCode[\"Duplicate_label_0\"] = 1114] = \"Duplicate_label_0\";\r\n DiagnosticCode[DiagnosticCode[\"Octal_literals_are_not_allowed_in_strict_mode\"] = 1121] = \"Octal_literals_are_not_allowed_in_strict_mode\";\r\n DiagnosticCode[DiagnosticCode[\"Digit_expected\"] = 1124] = \"Digit_expected\";\r\n DiagnosticCode[DiagnosticCode[\"Hexadecimal_digit_expected\"] = 1125] = \"Hexadecimal_digit_expected\";\r\n DiagnosticCode[DiagnosticCode[\"Unexpected_end_of_text\"] = 1126] = \"Unexpected_end_of_text\";\r\n DiagnosticCode[DiagnosticCode[\"Invalid_character\"] = 1127] = \"Invalid_character\";\r\n DiagnosticCode[DiagnosticCode[\"_case_or_default_expected\"] = 1130] = \"_case_or_default_expected\";\r\n DiagnosticCode[DiagnosticCode[\"Type_argument_expected\"] = 1140] = \"Type_argument_expected\";\r\n DiagnosticCode[DiagnosticCode[\"String_literal_expected\"] = 1141] = \"String_literal_expected\";\r\n DiagnosticCode[DiagnosticCode[\"Line_break_not_permitted_here\"] = 1142] = \"Line_break_not_permitted_here\";\r\n DiagnosticCode[DiagnosticCode[\"Declaration_expected\"] = 1146] = \"Declaration_expected\";\r\n DiagnosticCode[DiagnosticCode[\"_const_declarations_must_be_initialized\"] = 1155] = \"_const_declarations_must_be_initialized\";\r\n DiagnosticCode[DiagnosticCode[\"Unterminated_regular_expression_literal\"] = 1161] = \"Unterminated_regular_expression_literal\";\r\n DiagnosticCode[DiagnosticCode[\"Binary_digit_expected\"] = 1177] = \"Binary_digit_expected\";\r\n DiagnosticCode[DiagnosticCode[\"Octal_digit_expected\"] = 1178] = \"Octal_digit_expected\";\r\n DiagnosticCode[DiagnosticCode[\"An_implementation_cannot_be_declared_in_ambient_contexts\"] = 1183] = \"An_implementation_cannot_be_declared_in_ambient_contexts\";\r\n DiagnosticCode[DiagnosticCode[\"An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive\"] = 1198] = \"An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive\";\r\n DiagnosticCode[DiagnosticCode[\"Unterminated_Unicode_escape_sequence\"] = 1199] = \"Unterminated_Unicode_escape_sequence\";\r\n DiagnosticCode[DiagnosticCode[\"Decorators_are_not_valid_here\"] = 1206] = \"Decorators_are_not_valid_here\";\r\n DiagnosticCode[DiagnosticCode[\"_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration\"] = 1242] = \"_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration\";\r\n DiagnosticCode[DiagnosticCode[\"A_class_may_only_extend_another_class\"] = 1311] = \"A_class_may_only_extend_another_class\";\r\n DiagnosticCode[DiagnosticCode[\"Duplicate_identifier_0\"] = 2300] = \"Duplicate_identifier_0\";\r\n DiagnosticCode[DiagnosticCode[\"Cannot_find_name_0\"] = 2304] = \"Cannot_find_name_0\";\r\n DiagnosticCode[DiagnosticCode[\"Module_0_has_no_exported_member_1\"] = 2305] = \"Module_0_has_no_exported_member_1\";\r\n DiagnosticCode[DiagnosticCode[\"Generic_type_0_requires_1_type_argument_s\"] = 2314] = \"Generic_type_0_requires_1_type_argument_s\";\r\n DiagnosticCode[DiagnosticCode[\"Type_0_is_not_generic\"] = 2315] = \"Type_0_is_not_generic\";\r\n DiagnosticCode[DiagnosticCode[\"Type_0_is_not_assignable_to_type_1\"] = 2322] = \"Type_0_is_not_assignable_to_type_1\";\r\n DiagnosticCode[DiagnosticCode[\"Index_signature_is_missing_in_type_0\"] = 2329] = \"Index_signature_is_missing_in_type_0\";\r\n DiagnosticCode[DiagnosticCode[\"_this_cannot_be_referenced_in_current_location\"] = 2332] = \"_this_cannot_be_referenced_in_current_location\";\r\n DiagnosticCode[DiagnosticCode[\"_super_can_only_be_referenced_in_a_derived_class\"] = 2335] = \"_super_can_only_be_referenced_in_a_derived_class\";\r\n DiagnosticCode[DiagnosticCode[\"Property_0_does_not_exist_on_type_1\"] = 2339] = \"Property_0_does_not_exist_on_type_1\";\r\n DiagnosticCode[DiagnosticCode[\"Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures\"] = 2349] = \"Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures\";\r\n DiagnosticCode[DiagnosticCode[\"Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature\"] = 2351] = \"Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature\";\r\n DiagnosticCode[DiagnosticCode[\"A_function_whose_declared_type_is_not_void_must_return_a_value\"] = 2355] = \"A_function_whose_declared_type_is_not_void_must_return_a_value\";\r\n DiagnosticCode[DiagnosticCode[\"The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access\"] = 2357] = \"The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access\";\r\n DiagnosticCode[DiagnosticCode[\"The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access\"] = 2364] = \"The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access\";\r\n DiagnosticCode[DiagnosticCode[\"Operator_0_cannot_be_applied_to_types_1_and_2\"] = 2365] = \"Operator_0_cannot_be_applied_to_types_1_and_2\";\r\n DiagnosticCode[DiagnosticCode[\"_get_and_set_accessor_must_have_the_same_type\"] = 2380] = \"_get_and_set_accessor_must_have_the_same_type\";\r\n DiagnosticCode[DiagnosticCode[\"Constructor_implementation_is_missing\"] = 2390] = \"Constructor_implementation_is_missing\";\r\n DiagnosticCode[DiagnosticCode[\"Function_implementation_is_missing_or_not_immediately_following_the_declaration\"] = 2391] = \"Function_implementation_is_missing_or_not_immediately_following_the_declaration\";\r\n DiagnosticCode[DiagnosticCode[\"Multiple_constructor_implementations_are_not_allowed\"] = 2392] = \"Multiple_constructor_implementations_are_not_allowed\";\r\n DiagnosticCode[DiagnosticCode[\"Duplicate_function_implementation\"] = 2393] = \"Duplicate_function_implementation\";\r\n DiagnosticCode[DiagnosticCode[\"The_0_operator_cannot_be_applied_to_type_1\"] = 2469] = \"The_0_operator_cannot_be_applied_to_type_1\";\r\n DiagnosticCode[DiagnosticCode[\"Export_declaration_conflicts_with_exported_declaration_of_0\"] = 2484] = \"Export_declaration_conflicts_with_exported_declaration_of_0\";\r\n DiagnosticCode[DiagnosticCode[\"Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property\"] = 2540] = \"Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property\";\r\n DiagnosticCode[DiagnosticCode[\"The_target_of_an_assignment_must_be_a_variable_or_a_property_access\"] = 2541] = \"The_target_of_an_assignment_must_be_a_variable_or_a_property_access\";\r\n DiagnosticCode[DiagnosticCode[\"Index_signature_in_type_0_only_permits_reading\"] = 2542] = \"Index_signature_in_type_0_only_permits_reading\";\r\n DiagnosticCode[DiagnosticCode[\"Expected_0_arguments_but_got_1\"] = 2554] = \"Expected_0_arguments_but_got_1\";\r\n DiagnosticCode[DiagnosticCode[\"Expected_at_least_0_arguments_but_got_1\"] = 2555] = \"Expected_at_least_0_arguments_but_got_1\";\r\n DiagnosticCode[DiagnosticCode[\"Expected_0_type_arguments_but_got_1\"] = 2558] = \"Expected_0_type_arguments_but_got_1\";\r\n DiagnosticCode[DiagnosticCode[\"A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums\"] = 2651] = \"A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums\";\r\n DiagnosticCode[DiagnosticCode[\"Namespace_0_has_no_exported_member_1\"] = 2694] = \"Namespace_0_has_no_exported_member_1\";\r\n DiagnosticCode[DiagnosticCode[\"File_0_not_found\"] = 6054] = \"File_0_not_found\";\r\n})(DiagnosticCode = exports.DiagnosticCode || (exports.DiagnosticCode = {}));\r\nfunction diagnosticCodeToString(code) {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Structs cannot extend classes and vice-versa.\";\r\n case 208: return \"Structs cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n default: return \"\";\r\n }\r\n}\r\nexports.diagnosticCodeToString = diagnosticCodeToString;\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/** An enum of named character codes. */\r\nvar CharCode;\r\n(function (CharCode) {\r\n CharCode[CharCode[\"NULL\"] = 0] = \"NULL\";\r\n CharCode[CharCode[\"LINEFEED\"] = 10] = \"LINEFEED\";\r\n CharCode[CharCode[\"CARRIAGERETURN\"] = 13] = \"CARRIAGERETURN\";\r\n CharCode[CharCode[\"LINESEPARATOR\"] = 8232] = \"LINESEPARATOR\";\r\n CharCode[CharCode[\"PARAGRAPHSEPARATOR\"] = 8233] = \"PARAGRAPHSEPARATOR\";\r\n CharCode[CharCode[\"NEXTLINE\"] = 133] = \"NEXTLINE\";\r\n CharCode[CharCode[\"SPACE\"] = 32] = \"SPACE\";\r\n CharCode[CharCode[\"NONBREAKINGSPACE\"] = 160] = \"NONBREAKINGSPACE\";\r\n CharCode[CharCode[\"ENQUAD\"] = 8192] = \"ENQUAD\";\r\n CharCode[CharCode[\"EMQUAD\"] = 8193] = \"EMQUAD\";\r\n CharCode[CharCode[\"ENSPACE\"] = 8194] = \"ENSPACE\";\r\n CharCode[CharCode[\"EMSPACE\"] = 8195] = \"EMSPACE\";\r\n CharCode[CharCode[\"THREEPEREMSPACE\"] = 8196] = \"THREEPEREMSPACE\";\r\n CharCode[CharCode[\"FOURPEREMSPACE\"] = 8197] = \"FOURPEREMSPACE\";\r\n CharCode[CharCode[\"SIXPEREMSPACE\"] = 8198] = \"SIXPEREMSPACE\";\r\n CharCode[CharCode[\"FIGURESPACE\"] = 8199] = \"FIGURESPACE\";\r\n CharCode[CharCode[\"PUNCTUATIONSPACE\"] = 8200] = \"PUNCTUATIONSPACE\";\r\n CharCode[CharCode[\"THINSPACE\"] = 8201] = \"THINSPACE\";\r\n CharCode[CharCode[\"HAIRSPACE\"] = 8202] = \"HAIRSPACE\";\r\n CharCode[CharCode[\"ZEROWIDTHSPACE\"] = 8203] = \"ZEROWIDTHSPACE\";\r\n CharCode[CharCode[\"NARROWNOBREAKSPACE\"] = 8239] = \"NARROWNOBREAKSPACE\";\r\n CharCode[CharCode[\"IDEOGRAPHICSPACE\"] = 12288] = \"IDEOGRAPHICSPACE\";\r\n CharCode[CharCode[\"MATHEMATICALSPACE\"] = 8287] = \"MATHEMATICALSPACE\";\r\n CharCode[CharCode[\"OGHAM\"] = 5760] = \"OGHAM\";\r\n CharCode[CharCode[\"_\"] = 95] = \"_\";\r\n CharCode[CharCode[\"_0\"] = 48] = \"_0\";\r\n CharCode[CharCode[\"_1\"] = 49] = \"_1\";\r\n CharCode[CharCode[\"_2\"] = 50] = \"_2\";\r\n CharCode[CharCode[\"_3\"] = 51] = \"_3\";\r\n CharCode[CharCode[\"_4\"] = 52] = \"_4\";\r\n CharCode[CharCode[\"_5\"] = 53] = \"_5\";\r\n CharCode[CharCode[\"_6\"] = 54] = \"_6\";\r\n CharCode[CharCode[\"_7\"] = 55] = \"_7\";\r\n CharCode[CharCode[\"_8\"] = 56] = \"_8\";\r\n CharCode[CharCode[\"_9\"] = 57] = \"_9\";\r\n CharCode[CharCode[\"a\"] = 97] = \"a\";\r\n CharCode[CharCode[\"b\"] = 98] = \"b\";\r\n CharCode[CharCode[\"c\"] = 99] = \"c\";\r\n CharCode[CharCode[\"d\"] = 100] = \"d\";\r\n CharCode[CharCode[\"e\"] = 101] = \"e\";\r\n CharCode[CharCode[\"f\"] = 102] = \"f\";\r\n CharCode[CharCode[\"g\"] = 103] = \"g\";\r\n CharCode[CharCode[\"h\"] = 104] = \"h\";\r\n CharCode[CharCode[\"i\"] = 105] = \"i\";\r\n CharCode[CharCode[\"j\"] = 106] = \"j\";\r\n CharCode[CharCode[\"k\"] = 107] = \"k\";\r\n CharCode[CharCode[\"l\"] = 108] = \"l\";\r\n CharCode[CharCode[\"m\"] = 109] = \"m\";\r\n CharCode[CharCode[\"n\"] = 110] = \"n\";\r\n CharCode[CharCode[\"o\"] = 111] = \"o\";\r\n CharCode[CharCode[\"p\"] = 112] = \"p\";\r\n CharCode[CharCode[\"q\"] = 113] = \"q\";\r\n CharCode[CharCode[\"r\"] = 114] = \"r\";\r\n CharCode[CharCode[\"s\"] = 115] = \"s\";\r\n CharCode[CharCode[\"t\"] = 116] = \"t\";\r\n CharCode[CharCode[\"u\"] = 117] = \"u\";\r\n CharCode[CharCode[\"v\"] = 118] = \"v\";\r\n CharCode[CharCode[\"w\"] = 119] = \"w\";\r\n CharCode[CharCode[\"x\"] = 120] = \"x\";\r\n CharCode[CharCode[\"y\"] = 121] = \"y\";\r\n CharCode[CharCode[\"z\"] = 122] = \"z\";\r\n CharCode[CharCode[\"A\"] = 65] = \"A\";\r\n CharCode[CharCode[\"B\"] = 66] = \"B\";\r\n CharCode[CharCode[\"C\"] = 67] = \"C\";\r\n CharCode[CharCode[\"D\"] = 68] = \"D\";\r\n CharCode[CharCode[\"E\"] = 69] = \"E\";\r\n CharCode[CharCode[\"F\"] = 70] = \"F\";\r\n CharCode[CharCode[\"G\"] = 71] = \"G\";\r\n CharCode[CharCode[\"H\"] = 72] = \"H\";\r\n CharCode[CharCode[\"I\"] = 73] = \"I\";\r\n CharCode[CharCode[\"J\"] = 74] = \"J\";\r\n CharCode[CharCode[\"K\"] = 75] = \"K\";\r\n CharCode[CharCode[\"L\"] = 76] = \"L\";\r\n CharCode[CharCode[\"M\"] = 77] = \"M\";\r\n CharCode[CharCode[\"N\"] = 78] = \"N\";\r\n CharCode[CharCode[\"O\"] = 79] = \"O\";\r\n CharCode[CharCode[\"P\"] = 80] = \"P\";\r\n CharCode[CharCode[\"Q\"] = 81] = \"Q\";\r\n CharCode[CharCode[\"R\"] = 82] = \"R\";\r\n CharCode[CharCode[\"S\"] = 83] = \"S\";\r\n CharCode[CharCode[\"T\"] = 84] = \"T\";\r\n CharCode[CharCode[\"U\"] = 85] = \"U\";\r\n CharCode[CharCode[\"V\"] = 86] = \"V\";\r\n CharCode[CharCode[\"W\"] = 87] = \"W\";\r\n CharCode[CharCode[\"X\"] = 88] = \"X\";\r\n CharCode[CharCode[\"Y\"] = 89] = \"Y\";\r\n CharCode[CharCode[\"Z\"] = 90] = \"Z\";\r\n CharCode[CharCode[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\r\n CharCode[CharCode[\"ASTERISK\"] = 42] = \"ASTERISK\";\r\n CharCode[CharCode[\"AT\"] = 64] = \"AT\";\r\n CharCode[CharCode[\"BACKSLASH\"] = 92] = \"BACKSLASH\";\r\n CharCode[CharCode[\"BACKTICK\"] = 96] = \"BACKTICK\";\r\n CharCode[CharCode[\"BAR\"] = 124] = \"BAR\";\r\n CharCode[CharCode[\"CARET\"] = 94] = \"CARET\";\r\n CharCode[CharCode[\"CLOSEBRACE\"] = 125] = \"CLOSEBRACE\";\r\n CharCode[CharCode[\"CLOSEBRACKET\"] = 93] = \"CLOSEBRACKET\";\r\n CharCode[CharCode[\"CLOSEPAREN\"] = 41] = \"CLOSEPAREN\";\r\n CharCode[CharCode[\"COLON\"] = 58] = \"COLON\";\r\n CharCode[CharCode[\"COMMA\"] = 44] = \"COMMA\";\r\n CharCode[CharCode[\"DOLLAR\"] = 36] = \"DOLLAR\";\r\n CharCode[CharCode[\"DOT\"] = 46] = \"DOT\";\r\n CharCode[CharCode[\"DOUBLEQUOTE\"] = 34] = \"DOUBLEQUOTE\";\r\n CharCode[CharCode[\"EQUALS\"] = 61] = \"EQUALS\";\r\n CharCode[CharCode[\"EXCLAMATION\"] = 33] = \"EXCLAMATION\";\r\n CharCode[CharCode[\"GREATERTHAN\"] = 62] = \"GREATERTHAN\";\r\n CharCode[CharCode[\"HASH\"] = 35] = \"HASH\";\r\n CharCode[CharCode[\"LESSTHAN\"] = 60] = \"LESSTHAN\";\r\n CharCode[CharCode[\"MINUS\"] = 45] = \"MINUS\";\r\n CharCode[CharCode[\"OPENBRACE\"] = 123] = \"OPENBRACE\";\r\n CharCode[CharCode[\"OPENBRACKET\"] = 91] = \"OPENBRACKET\";\r\n CharCode[CharCode[\"OPENPAREN\"] = 40] = \"OPENPAREN\";\r\n CharCode[CharCode[\"PERCENT\"] = 37] = \"PERCENT\";\r\n CharCode[CharCode[\"PLUS\"] = 43] = \"PLUS\";\r\n CharCode[CharCode[\"QUESTION\"] = 63] = \"QUESTION\";\r\n CharCode[CharCode[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\r\n CharCode[CharCode[\"SINGLEQUOTE\"] = 39] = \"SINGLEQUOTE\";\r\n CharCode[CharCode[\"SLASH\"] = 47] = \"SLASH\";\r\n CharCode[CharCode[\"TILDE\"] = 126] = \"TILDE\";\r\n CharCode[CharCode[\"BACKSPACE\"] = 8] = \"BACKSPACE\";\r\n CharCode[CharCode[\"FORMFEED\"] = 12] = \"FORMFEED\";\r\n CharCode[CharCode[\"BYTEORDERMARK\"] = 65279] = \"BYTEORDERMARK\";\r\n CharCode[CharCode[\"TAB\"] = 9] = \"TAB\";\r\n CharCode[CharCode[\"VERTICALTAB\"] = 11] = \"VERTICALTAB\";\r\n})(CharCode = exports.CharCode || (exports.CharCode = {}));\r\n/** Tests if the specified character code is some sort of line break. */\r\nfunction isLineBreak(c) {\r\n switch (c) {\r\n case 10 /* LINEFEED */:\r\n case 13 /* CARRIAGERETURN */:\r\n case 8232 /* LINESEPARATOR */:\r\n case 8233 /* PARAGRAPHSEPARATOR */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\nexports.isLineBreak = isLineBreak;\r\n/** Tests if the specified character code is some sort of white space. */\r\nfunction isWhiteSpace(c) {\r\n switch (c) {\r\n case 32 /* SPACE */:\r\n case 9 /* TAB */:\r\n case 11 /* VERTICALTAB */:\r\n case 12 /* FORMFEED */:\r\n case 160 /* NONBREAKINGSPACE */:\r\n case 133 /* NEXTLINE */:\r\n case 5760 /* OGHAM */:\r\n case 8239 /* NARROWNOBREAKSPACE */:\r\n case 8287 /* MATHEMATICALSPACE */:\r\n case 12288 /* IDEOGRAPHICSPACE */:\r\n case 65279 /* BYTEORDERMARK */:\r\n return true;\r\n default:\r\n return c >= 8192 /* ENQUAD */ && c <= 8203 /* ZEROWIDTHSPACE */;\r\n }\r\n}\r\nexports.isWhiteSpace = isWhiteSpace;\r\n/** Tests if the specified character code is a decimal digit. */\r\nfunction isDecimalDigit(c) {\r\n return c >= 48 /* _0 */ && c <= 57 /* _9 */;\r\n}\r\nexports.isDecimalDigit = isDecimalDigit;\r\n/** Tests if the specified character code is an octal digit. */\r\nfunction isOctalDigit(c) {\r\n return c >= 48 /* _0 */ && c <= 55 /* _7 */;\r\n}\r\nexports.isOctalDigit = isOctalDigit;\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nfunction isIdentifierStart(c) {\r\n return c >= 65 /* A */ && c <= 90 /* Z */\r\n || c >= 97 /* a */ && c <= 122 /* z */\r\n || c == 36 /* DOLLAR */\r\n || c == 95 /* _ */\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\nexports.isIdentifierStart = isIdentifierStart;\r\n/** Tests if the specified character code is a valid keyword character. */\r\nfunction isKeywordCharacter(c) {\r\n return c >= 97 /* a */ && c <= 122 /* z */;\r\n}\r\nexports.isKeywordCharacter = isKeywordCharacter;\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nfunction isIdentifierPart(c) {\r\n return c >= 65 /* A */ && c <= 90 /* Z */\r\n || c >= 97 /* a */ && c <= 122 /* z */\r\n || c >= 48 /* _0 */ && c <= 57 /* _9 */\r\n || c == 36 /* DOLLAR */\r\n || c == 95 /* _ */\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\nexports.isIdentifierPart = isIdentifierPart;\r\n// storing as u16 to save memory\r\nvar unicodeIdentifierStart = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nvar unicodeIdentifierPart = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nfunction lookupInUnicodeMap(code, map) {\r\n if (code < map[0])\r\n return false;\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid;\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n }\r\n else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction isUnicodeIdentifierStart(code) {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code, unicodeIdentifierStart);\r\n}\r\nfunction isUnicodeIdentifierPart(code) {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code, unicodeIdentifierPart);\r\n}\r\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar separator = 47 /* SLASH */;\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nfunction normalize(path) {\r\n var pos = 0;\r\n var len = path.length;\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == 46 /* DOT */ &&\r\n path.charCodeAt(pos + 1) == separator) {\r\n pos += 2;\r\n }\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n var atEnd;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n // we are only interested in '/.' sequences ...\r\n if (path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == 46 /* DOT */) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == 46 /* DOT */ ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == 46 /* DOT */ &&\r\n path.charCodeAt(pos + 3) == separator) {\r\n // find preceeding '/'\r\n var ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != 46 /* DOT */ ||\r\n path.charCodeAt(ipos + 2) != 46 /* DOT */) {\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != 46 /* DOT */ ||\r\n path.charCodeAt(1) != 46 /* DOT */) {\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\nexports.normalize = normalize;\r\n/** Resolves the specified path relative to the specified origin. */\r\nfunction resolve(normalizedPath, origin) {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalize(dirname(origin) + String.fromCharCode(separator) + normalizedPath);\r\n}\r\nexports.resolve = resolve;\r\n/** Obtains the directory portion of a normalized path. */\r\nfunction dirname(normalizedPath) {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\nexports.dirname = dirname;\r\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(12);\nmodule.exports = __webpack_require__(19);\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__webpack_require__(13);\r\n__webpack_require__(14);\r\n__webpack_require__(17);\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || __webpack_require__(15);\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = __webpack_require__(0).Module;\r\n\r\nModule.prototype.toText = function toText() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrint(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\r\nModule.prototype.toAsmjs = function toAsmjs() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrintAsmjs(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar compiler_1 = __webpack_require__(4);\r\nvar diagnostics_1 = __webpack_require__(1);\r\nvar types_1 = __webpack_require__(5);\r\nvar module_1 = __webpack_require__(0);\r\nvar program_1 = __webpack_require__(2);\r\n/** Compiles a get of a built-in global. */\r\nfunction compileGetConstant(compiler, global, reportNode) {\r\n switch (global.internalName) {\r\n case \"NaN\":// context-sensitive\r\n if (compiler.currentType == types_1.Type.f32) {\r\n return compiler.module.createF32(NaN);\r\n }\r\n else {\r\n compiler.currentType = types_1.Type.f64;\r\n return compiler.module.createF64(NaN);\r\n }\r\n case \"Infinity\":// context-sensitive\r\n if (compiler.currentType == types_1.Type.f32) {\r\n return compiler.module.createF32(Infinity);\r\n }\r\n else {\r\n compiler.currentType = types_1.Type.f64;\r\n return compiler.module.createF64(Infinity);\r\n }\r\n case \"HEAP_BASE\":// never inlined for linking purposes\r\n compiler.currentType = compiler.options.usizeType;\r\n return compiler.module.createGetGlobal(\"HEAP_BASE\", compiler.currentType.toNativeType());\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n return compiler.module.createUnreachable();\r\n}\r\nexports.compileGetConstant = compileGetConstant;\r\n/** Compiles a call to a built-in function. */\r\nfunction compileCall(compiler, prototype, typeArguments, operands, contextualType, reportNode) {\r\n var module = compiler.module;\r\n var arg0, arg1, arg2, ret;\r\n var tempLocal0, tempLocal1;\r\n var type, offset;\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n switch (prototype.internalName) {\r\n // math\r\n case \"isNaN\":// isNaN(value: T) -> bool\r\n compiler.currentType = types_1.Type.bool;\r\n if (operands.length != 1) {\r\n if (typeArguments && typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case 11 /* F32 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.f32);\r\n ret = module.createBinary(module_1.BinaryOp.NeF32, module.createTeeLocal(tempLocal0.index, arg0), module.createGetLocal(tempLocal0.index, module_1.NativeType.F32));\r\n break;\r\n case 12 /* F64 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.f64);\r\n ret = module.createBinary(module_1.BinaryOp.NeF64, module.createTeeLocal(tempLocal0.index, arg0), module.createGetLocal(tempLocal0.index, module_1.NativeType.F64));\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n default:// every other type is never NaN\r\n ret = module.createI32(0);\r\n break;\r\n }\r\n compiler.currentType = types_1.Type.bool;\r\n return ret;\r\n case \"isFinite\":// isFinite(value: T) -> bool\r\n compiler.currentType = types_1.Type.bool;\r\n if (operands.length != 1) {\r\n if (typeArguments && typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case 11 /* F32 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.f32);\r\n ret = module.createSelect(module.createBinary(module_1.BinaryOp.NeF32, module.createUnary(module_1.UnaryOp.AbsF32, module.createTeeLocal(tempLocal0.index, arg0)), module.createF32(Infinity)), module.createI32(0), module.createBinary(module_1.BinaryOp.EqF32, module.createGetLocal(tempLocal0.index, module_1.NativeType.F32), module.createGetLocal(tempLocal0.index, module_1.NativeType.F32)));\r\n break;\r\n case 12 /* F64 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.f64);\r\n ret = module.createSelect(module.createBinary(module_1.BinaryOp.NeF64, module.createUnary(module_1.UnaryOp.AbsF64, module.createTeeLocal(tempLocal0.index, arg0)), module.createF64(Infinity)), module.createI32(0), module.createBinary(module_1.BinaryOp.EqF64, module.createGetLocal(tempLocal0.index, module_1.NativeType.F64), module.createGetLocal(tempLocal0.index, module_1.NativeType.F64)));\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n default:// every other type is always finite\r\n ret = module.createI32(1);\r\n break;\r\n }\r\n compiler.currentType = types_1.Type.bool;\r\n return ret;\r\n case \"clz\":// clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.i32, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default:// any integer up to 32-bits incl. bool\r\n ret = module.createUnary(module_1.UnaryOp.ClzI32, arg0);\r\n break;\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n ret = module.createUnary(compiler.options.isWasm64\r\n ? module_1.UnaryOp.ClzI64\r\n : module_1.UnaryOp.ClzI32, arg0);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n ret = module.createUnary(module_1.UnaryOp.ClzI64, arg0);\r\n break;\r\n case 11 /* F32 */:\r\n case 12 /* F64 */:\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"ctz\":// ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.i32, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default:// any integer up to 32-bits incl. bool\r\n ret = module.createUnary(module_1.UnaryOp.CtzI32, arg0);\r\n break;\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n ret = module.createUnary(compiler.options.isWasm64\r\n ? module_1.UnaryOp.CtzI64\r\n : module_1.UnaryOp.CtzI32, arg0);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n ret = module.createUnary(module_1.UnaryOp.CtzI64, arg0);\r\n break;\r\n case 11 /* F32 */:\r\n case 12 /* F64 */:\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"popcnt\":// popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.i32, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default:// any integer up to 32-bits incl. bool\r\n ret = module.createUnary(module_1.UnaryOp.PopcntI32, arg0);\r\n break;\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n ret = module.createUnary(compiler.options.isWasm64\r\n ? module_1.UnaryOp.PopcntI64\r\n : module_1.UnaryOp.PopcntI32, arg0);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n ret = module.createUnary(module_1.UnaryOp.PopcntI64, arg0);\r\n break;\r\n case 11 /* F32 */:\r\n case 12 /* F64 */:\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"rotl\":// rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"2\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.i32, 0 /* NONE */);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n ret = compiler_1.makeSmallIntegerWrap(module.createBinary(module_1.BinaryOp.RotlI32, arg0, arg1), compiler.currentType, module);\r\n // fall-through\r\n case 2 /* I32 */:\r\n case 7 /* U32 */:\r\n ret = module.createBinary(module_1.BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n ret = module.createBinary(compiler.options.isWasm64\r\n ? module_1.BinaryOp.RotlI64\r\n : module_1.BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n ret = module.createBinary(module_1.BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n default:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"rotr\":// rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"2\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.i32, 0 /* NONE */);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 10 /* BOOL */:\r\n ret = compiler_1.makeSmallIntegerWrap(module.createBinary(module_1.BinaryOp.RotrI32, arg0, arg1), compiler.currentType, module);\r\n break;\r\n case 2 /* I32 */:\r\n case 7 /* U32 */:\r\n ret = module.createBinary(module_1.BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n ret = module.createBinary(compiler.options.isWasm64\r\n ? module_1.BinaryOp.RotrI64\r\n : module_1.BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n ret = module.createBinary(module_1.BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n default:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"abs\":// abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n // doesn't need sign-extension here because ifFalse below is either positive\r\n // or MIN_VALUE (-MIN_VALUE == MIN_VALUE) if selected\r\n case 2 /* I32 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i32);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createBinary(module_1.BinaryOp.SubI32, // ifFalse\r\n module.createI32(0), module.createGetLocal(tempLocal0.index, module_1.NativeType.I32)), module.createBinary(module_1.BinaryOp.GtI32, module.createGetLocal(tempLocal0.index, module_1.NativeType.I32), module.createI32(0)));\r\n break;\r\n case 4 /* ISIZE */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createBinary(compiler.options.isWasm64\r\n ? module_1.BinaryOp.SubI64\r\n : module_1.BinaryOp.SubI32, compiler.options.usizeType.toNativeZero(module), module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType)), module.createBinary(compiler.options.isWasm64\r\n ? module_1.BinaryOp.GtI64\r\n : module_1.BinaryOp.GtI32, module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType), compiler.options.usizeType.toNativeZero(module)));\r\n break;\r\n case 3 /* I64 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i64);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createBinary(module_1.BinaryOp.SubI64, module.createI64(0, 0), module.createGetLocal(tempLocal0.index, module_1.NativeType.I64)), module.createBinary(module_1.BinaryOp.GtI64, module.createGetLocal(tempLocal0.index, module_1.NativeType.I64), module.createI64(0, 0)));\r\n break;\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 8 /* U64 */:\r\n case 10 /* BOOL */:\r\n ret = arg0;\r\n break;\r\n case 11 /* F32 */:\r\n ret = module.createUnary(module_1.UnaryOp.AbsF32, arg0);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createUnary(module_1.UnaryOp.AbsF64, arg0);\r\n break;\r\n case 13 /* VOID */:\r\n ret = module.createUnreachable();\r\n break;\r\n default:// void\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"max\":// max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"2\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(types_1.Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(module_1.BinaryOp.GtI32, module.createGetLocal(tempLocal0.index, module_1.NativeType.I32), module.createGetLocal(tempLocal1.index, module_1.NativeType.I32)));\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(types_1.Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(module_1.BinaryOp.GtU32, module.createGetLocal(tempLocal0.index, module_1.NativeType.I32), module.createGetLocal(tempLocal1.index, module_1.NativeType.I32)));\r\n break;\r\n case 3 /* I64 */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(types_1.Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(module_1.BinaryOp.GtI64, module.createGetLocal(tempLocal0.index, module_1.NativeType.I64), module.createGetLocal(tempLocal1.index, module_1.NativeType.I64)));\r\n break;\r\n case 8 /* U64 */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(types_1.Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(module_1.BinaryOp.GtU64, module.createGetLocal(tempLocal0.index, module_1.NativeType.I64), module.createGetLocal(tempLocal1.index, module_1.NativeType.I64)));\r\n break;\r\n case 4 /* ISIZE */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(compiler.options.isWasm64\r\n ? module_1.BinaryOp.GtI64\r\n : module_1.BinaryOp.GtI32, module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType), module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)));\r\n break;\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(compiler.options.isWasm64\r\n ? module_1.BinaryOp.GtU64\r\n : module_1.BinaryOp.GtU32, module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType), module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)));\r\n break;\r\n case 11 /* F32 */:\r\n ret = module.createBinary(module_1.BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createBinary(module_1.BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n default:// void\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"min\":// min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"2\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case 0 /* I8 */:\r\n case 1 /* I16 */:\r\n case 2 /* I32 */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(types_1.Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(module_1.BinaryOp.LtI32, module.createGetLocal(tempLocal0.index, module_1.NativeType.I32), module.createGetLocal(tempLocal1.index, module_1.NativeType.I32)));\r\n break;\r\n case 5 /* U8 */:\r\n case 6 /* U16 */:\r\n case 7 /* U32 */:\r\n case 10 /* BOOL */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(types_1.Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(module_1.BinaryOp.LtU32, module.createGetLocal(tempLocal0.index, module_1.NativeType.I32), module.createGetLocal(tempLocal1.index, module_1.NativeType.I32)));\r\n break;\r\n case 3 /* I64 */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(types_1.Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(module_1.BinaryOp.LtI64, module.createGetLocal(tempLocal0.index, module_1.NativeType.I64), module.createGetLocal(tempLocal1.index, module_1.NativeType.I64)));\r\n break;\r\n case 8 /* U64 */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(types_1.Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(module_1.BinaryOp.LtU64, module.createGetLocal(tempLocal0.index, module_1.NativeType.I64), module.createGetLocal(tempLocal1.index, module_1.NativeType.I64)));\r\n break;\r\n case 4 /* ISIZE */:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(compiler.options.isWasm64\r\n ? module_1.BinaryOp.LtI64\r\n : module_1.BinaryOp.LtI32, module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType), module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)));\r\n break;\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(module.createTeeLocal(tempLocal0.index, arg0), module.createTeeLocal(tempLocal1.index, arg1), module.createBinary(compiler.options.isWasm64\r\n ? module_1.BinaryOp.LtU64\r\n : module_1.BinaryOp.LtU32, module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType), module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)));\r\n break;\r\n case 11 /* F32 */:\r\n ret = module.createBinary(module_1.BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createBinary(module_1.BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n default:// void\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"ceil\":// ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default:// any integer\r\n ret = arg0;\r\n break;\r\n case 11 /* F32 */:\r\n ret = module.createUnary(module_1.UnaryOp.CeilF32, arg0);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createUnary(module_1.UnaryOp.CeilF64, arg0);\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"floor\":// floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default:// any integer\r\n ret = arg0;\r\n break;\r\n case 11 /* F32 */:\r\n ret = module.createUnary(module_1.UnaryOp.FloorF32, arg0);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createUnary(module_1.UnaryOp.FloorF64, arg0);\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"copysign\":// copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"2\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n // TODO: does an integer version make sense?\r\n case 11 /* F32 */:\r\n ret = module.createBinary(module_1.BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createBinary(module_1.BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n default:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"nearest\":// nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default:// any integer\r\n ret = arg0;\r\n break;\r\n case 11 /* F32 */:\r\n ret = module.createUnary(module_1.UnaryOp.NearestF32, arg0);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createUnary(module_1.UnaryOp.NearestF64, arg0);\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"reinterpret\":// reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\");\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\");\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case 2 /* I32 */:\r\n case 7 /* U32 */:\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f32);\r\n ret = module.createUnary(module_1.UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64);\r\n ret = module.createUnary(module_1.UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n case 9 /* USIZE */:\r\n if (typeArguments[0].isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n case 4 /* ISIZE */:\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.isWasm64\r\n ? types_1.Type.f64\r\n : types_1.Type.f32);\r\n ret = module.createUnary(compiler.options.isWasm64\r\n ? module_1.UnaryOp.ReinterpretF64\r\n : module_1.UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n case 11 /* F32 */:\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.u32);\r\n ret = module.createUnary(module_1.UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n case 12 /* F64 */:\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.u64);\r\n ret = module.createUnary(module_1.UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n default:// small integers and void\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n case \"sqrt\":// sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n // TODO: integer versions (that return f64 or convert)?\r\n case 11 /* F32 */:\r\n ret = module.createUnary(module_1.UnaryOp.SqrtF32, arg0);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createUnary(module_1.UnaryOp.SqrtF64, arg0);\r\n break;\r\n default:\r\n // case TypeKind.VOID:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"trunc\":// trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.f64, 0 /* NONE */);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case 9 /* USIZE */:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default:// any integer\r\n ret = arg0;\r\n break;\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case 11 /* F32 */:\r\n ret = module.createUnary(module_1.UnaryOp.TruncF32, arg0);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createUnary(module_1.UnaryOp.TruncF64, arg0);\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n // memory access\r\n case \"load\":// load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\");\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_at_least_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n }\r\n else {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"2\", operands.length.toString(10));\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\");\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) {\r\n return module.createUnreachable();\r\n }\r\n return module.createLoad(typeArguments[0].byteSize, typeArguments[0].is(1 /* SIGNED */ | 4 /* INTEGER */), arg0, typeArguments[0].is(4 /* INTEGER */) &&\r\n contextualType.is(4 /* INTEGER */) &&\r\n contextualType.size >= typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(), offset);\r\n case \"store\":// store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = types_1.Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\");\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_at_least_0_arguments_but_got_1, reportNode.range, \"2\", operands.length.toString(10));\r\n }\r\n else {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"3\", operands.length.toString(10));\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\");\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], typeArguments[0], typeArguments[0].is(4 /* INTEGER */)\r\n ? 0 /* NONE */\r\n : 1 /* IMPLICIT */);\r\n if (compiler.currentType.is(4 /* INTEGER */) &&\r\n typeArguments[0].is(4 /* INTEGER */) &&\r\n typeArguments[0].size > compiler.currentType.size) {\r\n arg1 = compiler.convertExpression(arg1, compiler.currentType, typeArguments[0], 1 /* IMPLICIT */, operands[1]);\r\n type = typeArguments[0];\r\n }\r\n else {\r\n type = compiler.currentType;\r\n }\r\n offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) {\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = types_1.Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n case \"sizeof\":// sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\");\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"0\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n ret = compiler.options.isWasm64\r\n ? module.createI64(typeArguments[0].byteSize, 0)\r\n : module.createI32(typeArguments[0].byteSize);\r\n }\r\n else {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", \"0\");\r\n return module.createUnreachable();\r\n }\r\n return ret;\r\n // control flow\r\n case \"select\":// select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"3\", operands.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.i32, 0 /* NONE */);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], type = compiler.currentType);\r\n arg2 = compiler.compileExpression(operands[2], types_1.Type.bool);\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n default:// any value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n case \"unreachable\":// unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"0\", operands.length.toString(10));\r\n }\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n return module.createUnreachable();\r\n // host operations\r\n case \"current_memory\":// current_memory() -> i32\r\n compiler.currentType = types_1.Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"0\", operands.length.toString(10));\r\n }\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n return module.createHost(module_1.HostOp.CurrentMemory);\r\n case \"grow_memory\":// grow_memory(pages: i32) -> i32\r\n compiler.currentType = types_1.Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"0\", operands.length.toString(10));\r\n arg0 = module.createUnreachable();\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.i32);\r\n }\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n return module.createHost(module_1.HostOp.GrowMemory, null, [arg0]);\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\":// move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"3\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], compiler.options.usizeType);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = types_1.Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n case \"set_memory\":// set_memory(dest: usize, value: u32, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"3\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], types_1.Type.u32);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = types_1.Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n // other\r\n case \"changetype\":// changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length)\r\n compiler.currentType = typeArguments[0];\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\");\r\n return module.createUnreachable();\r\n }\r\n else if (typeArguments[0].kind != 9 /* USIZE */) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, 0 /* NONE */);\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.kind != 9 /* USIZE */) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n case \"assert\":// assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_at_least_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n }\r\n else if (operands.length > 2) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"2\", operands.length.toString(10));\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length)\r\n compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_type_arguments_but_got_1, reportNode.range, \"1\", typeArguments.length.toString(10));\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n }\r\n else {\r\n arg0 = compiler.compileExpression(operands[0], types_1.Type.i32, 0 /* NONE */);\r\n }\r\n type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == types_1.Type.void) {\r\n compiler.currentType = types_1.Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n var abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n compiler.currentType = type.nonNullableType;\r\n if (contextualType == types_1.Type.void) {\r\n switch (compiler.currentType.kind) {\r\n default:// any integer up to 32-bits incl. bool\r\n ret = module.createIf(module.createUnary(module_1.UnaryOp.EqzI32, arg0), abort);\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n ret = module.createIf(module.createUnary(module_1.UnaryOp.EqzI64, arg0), abort);\r\n break;\r\n case 4 /* ISIZE */:\r\n case 9 /* USIZE */:\r\n ret = module.createIf(module.createUnary(compiler.options.isWasm64\r\n ? module_1.UnaryOp.EqzI64\r\n : module_1.UnaryOp.EqzI32, arg0), abort);\r\n break;\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case 11 /* F32 */:\r\n ret = module.createIf(module.createBinary(module_1.BinaryOp.EqF32, arg0, module.createF32(0)), abort);\r\n break;\r\n case 12 /* F64 */:\r\n ret = module.createIf(module.createBinary(module_1.BinaryOp.EqF64, arg0, module.createF64(0)), abort);\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = abort;\r\n break;\r\n }\r\n compiler.currentType = types_1.Type.void;\r\n }\r\n else {\r\n switch (compiler.currentType.kind) {\r\n default:// any integer up to 32-bits incl. bool\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i32);\r\n ret = module.createIf(module.createUnary(module_1.UnaryOp.EqzI32, module.createTeeLocal(tempLocal0.index, arg0)), abort, module.createGetLocal(tempLocal0.index, module_1.NativeType.I32));\r\n break;\r\n case 3 /* I64 */:\r\n case 8 /* U64 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.i64);\r\n ret = module.createIf(module.createUnary(module_1.UnaryOp.EqzI64, module.createTeeLocal(tempLocal0.index, arg0)), abort, module.createGetLocal(tempLocal0.index, module_1.NativeType.I64));\r\n break;\r\n case 4 /* ISIZE */:\r\n case 9 /* USIZE */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n ret = module.createIf(module.createUnary(compiler.options.isWasm64\r\n ? module_1.UnaryOp.EqzI64\r\n : module_1.UnaryOp.EqzI32, module.createTeeLocal(tempLocal0.index, arg0)), abort, module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType));\r\n break;\r\n case 11 /* F32 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.f32);\r\n ret = module.createIf(module.createBinary(module_1.BinaryOp.EqF32, module.createTeeLocal(tempLocal0.index, arg0), module.createF32(0)), abort, module.createGetLocal(tempLocal0.index, module_1.NativeType.F32));\r\n break;\r\n case 12 /* F64 */:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(types_1.Type.f64);\r\n ret = module.createIf(module.createBinary(module_1.BinaryOp.EqF64, module.createTeeLocal(tempLocal0.index, arg0), module.createF64(0)), abort, module.createGetLocal(tempLocal0.index, module_1.NativeType.F64));\r\n break;\r\n case 13 /* VOID */:\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n return ret;\r\n // conversions\r\n case \"i8\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.i8, 2 /* EXPLICIT */);\r\n case \"i16\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.i16, 2 /* EXPLICIT */);\r\n case \"i32\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.i32, 2 /* EXPLICIT */);\r\n case \"i64\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.i64, 2 /* EXPLICIT */);\r\n case \"isize\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = compiler.options.isWasm64\r\n ? types_1.Type.isize64\r\n : types_1.Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], compiler.options.isWasm64\r\n ? types_1.Type.isize64\r\n : types_1.Type.isize32, 2 /* EXPLICIT */);\r\n case \"u8\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.u8, 2 /* EXPLICIT */);\r\n case \"u16\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.u16, 2 /* EXPLICIT */);\r\n case \"u32\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.u32, 2 /* EXPLICIT */);\r\n case \"u64\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.u64, 2 /* EXPLICIT */);\r\n case \"usize\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], compiler.options.usizeType, 2 /* EXPLICIT */);\r\n case \"bool\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.bool, 2 /* EXPLICIT */);\r\n case \"f32\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.f32, 2 /* EXPLICIT */);\r\n case \"f64\":\r\n if (typeArguments) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Type_0_is_not_generic, reportNode.range, prototype.internalName);\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Expected_0_arguments_but_got_1, reportNode.range, \"1\", operands.length.toString(10));\r\n compiler.currentType = types_1.Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], types_1.Type.f64, 2 /* EXPLICIT */);\r\n }\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, reportNode.range);\r\n return module.createUnreachable();\r\n}\r\nexports.compileCall = compileCall;\r\nfunction evaluateConstantOffset(compiler, expression) {\r\n var expr;\r\n var value;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, types_1.Type.usize64);\r\n if (_BinaryenExpressionGetId(expr) != module_1.ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != module_1.NativeType.I64 ||\r\n _BinaryenConstGetValueI64High(expr) != 0 ||\r\n (value = _BinaryenConstGetValueI64Low(expr)) < 0) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n value = -1;\r\n }\r\n }\r\n else {\r\n expr = compiler.precomputeExpression(expression, types_1.Type.usize32);\r\n if (_BinaryenExpressionGetId(expr) != module_1.ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != module_1.NativeType.I32 ||\r\n (value = _BinaryenConstGetValueI32(expr)) < 0) {\r\n compiler.error(diagnostics_1.DiagnosticCode.Operation_not_supported, expression.range);\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nfunction compileAllocate(compiler, cls, reportNode) {\r\n var program = cls.program;\r\n var prototype = program.elements.get(compiler.options.allocateImpl);\r\n if (prototype) {\r\n if (prototype.kind == program_1.ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = prototype.resolve(); // reports\r\n if (instance) {\r\n if (!instance.is(program_1.ElementFlags.GENERIC) &&\r\n instance.returnType == compiler.options.usizeType &&\r\n instance.parameters &&\r\n instance.parameters.length == 1 &&\r\n instance.parameters[0].type == compiler.options.usizeType) {\r\n if (compiler.compileFunction(instance)) {\r\n return compiler.makeCall(instance, [\r\n compiler.options.isWasm64\r\n ? compiler.module.createI64(cls.currentMemoryOffset)\r\n : compiler.module.createI32(cls.currentMemoryOffset)\r\n ]);\r\n }\r\n }\r\n else {\r\n program.error(diagnostics_1.DiagnosticCode.Implementation_0_must_match_the_signature_1, reportNode.range, compiler.options.allocateImpl, \"(size: usize): usize\");\r\n }\r\n }\r\n }\r\n else {\r\n program.error(diagnostics_1.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, reportNode.range, prototype.internalName);\r\n }\r\n }\r\n else {\r\n program.error(diagnostics_1.DiagnosticCode.Cannot_find_name_0, reportNode.range, compiler.options.allocateImpl);\r\n }\r\n return compiler.module.createUnreachable();\r\n}\r\nexports.compileAllocate = compileAllocate;\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nfunction compileAbort(compiler, message, reportNode) {\r\n var module = compiler.module;\r\n var abort = module.createUnreachable();\r\n var abortPrototype = compiler.program.elements.get(\"abort\");\r\n var stringType = compiler.program.types.get(\"string\");\r\n if (abortPrototype &&\r\n abortPrototype.kind == program_1.ElementKind.FUNCTION_PROTOTYPE &&\r\n stringType) {\r\n var abortInstance = abortPrototype.resolve(); // reports\r\n if (abortInstance &&\r\n compiler.compileFunction(abortInstance) // reports\r\n ) {\r\n assert(abortInstance.parameters && abortInstance.parameters.length == 4); // to be sure\r\n abort = module.createBlock(null, [\r\n compiler.makeCall(abortInstance, [\r\n message != null\r\n ? compiler.compileExpression(message, stringType)\r\n : compiler.options.usizeType.toNativeZero(module),\r\n compiler.compileStaticString(reportNode.range.source.normalizedPath),\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ]),\r\n abort\r\n ]);\r\n }\r\n }\r\n return abort;\r\n}\r\nexports.compileAbort = compileAbort;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {const Long = global.Long || __webpack_require__(18);\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\n//////////////////////// Low-level C-Like Compiler API /////////////////////////\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar compiler_1 = __webpack_require__(4);\r\nvar decompiler_1 = __webpack_require__(20);\r\nvar diagnostics_1 = __webpack_require__(1);\r\nexports.formatDiagnostic = diagnostics_1.formatDiagnosticMessage;\r\nvar parser_1 = __webpack_require__(21);\r\n/** Parses a source file. If `parser` has been omitted a new one is created. */\r\nfunction parseFile(text, path, isEntry, parser) {\r\n if (isEntry === void 0) { isEntry = false; }\r\n if (parser === void 0) { parser = null; }\r\n if (!parser) {\r\n parser = new parser_1.Parser();\r\n isEntry = true;\r\n }\r\n parser.parseFile(text, path, isEntry);\r\n return parser;\r\n}\r\nexports.parseFile = parseFile;\r\n/** Obtains the next required file's path. Returns `null` once complete. */\r\nfunction nextFile(parser) {\r\n return parser.nextFile();\r\n}\r\nexports.nextFile = nextFile;\r\n/** Obtains the next diagnostic message. Returns `null` once complete. */\r\nfunction nextDiagnostic(parser) {\r\n var program = parser.program;\r\n return program.diagnosticsOffset < program.diagnostics.length\r\n ? program.diagnostics[program.diagnosticsOffset++]\r\n : null;\r\n}\r\nexports.nextDiagnostic = nextDiagnostic;\r\n/** Tests whether a diagnostic is informatory. */\r\nfunction isInfo(message) {\r\n return message.category == diagnostics_1.DiagnosticCategory.INFO;\r\n}\r\nexports.isInfo = isInfo;\r\n/** Tests whether a diagnostic is a warning. */\r\nfunction isWarning(message) {\r\n return message.category == diagnostics_1.DiagnosticCategory.WARNING;\r\n}\r\nexports.isWarning = isWarning;\r\n/** Tests whether a diagnostic is an error. */\r\nfunction isError(message) {\r\n return message.category == diagnostics_1.DiagnosticCategory.ERROR;\r\n}\r\nexports.isError = isError;\r\n/** Creates a new set of compiler options. */\r\nfunction createOptions() {\r\n return new compiler_1.Options();\r\n}\r\nexports.createOptions = createOptions;\r\n/** Sets the `target` option. */\r\nfunction setTarget(options, target) {\r\n options.target = target;\r\n}\r\nexports.setTarget = setTarget;\r\n/** Sets the `noTreeShaking` option. */\r\nfunction setNoTreeShaking(options, noTreeShaking) {\r\n options.noTreeShaking = noTreeShaking;\r\n}\r\nexports.setNoTreeShaking = setNoTreeShaking;\r\n/** Sets the `noAssert` option. */\r\nfunction setNoAssert(options, noAssert) {\r\n options.noAssert = noAssert;\r\n}\r\nexports.setNoAssert = setNoAssert;\r\n/** Sets the `noMemory` option. */\r\nfunction setNoMemory(options, noMemory) {\r\n options.noMemory = noMemory;\r\n}\r\nexports.setNoMemory = setNoMemory;\r\n/** Sets the `importMemory` option. */\r\nfunction setImportMemory(options, importMemory) {\r\n options.importMemory = importMemory;\r\n}\r\nexports.setImportMemory = setImportMemory;\r\n/** Sets the `sourceMap` option. */\r\nfunction setSourceMap(options, sourceMap) {\r\n options.sourceMap = sourceMap;\r\n}\r\nexports.setSourceMap = setSourceMap;\r\n/** Sets the `memoryBase` option. */\r\nfunction setMemoryBase(options, memoryBase) {\r\n options.memoryBase = memoryBase;\r\n}\r\nexports.setMemoryBase = setMemoryBase;\r\n/** Compiles the sources computed by the parser to a module. */\r\nfunction compile(parser, options) {\r\n if (options === void 0) { options = null; }\r\n var program = parser.finish();\r\n var compiler = new compiler_1.Compiler(program, options);\r\n return compiler.compile();\r\n}\r\nexports.compile = compile;\r\n/** Decompiles a module to its (low level) source. */\r\nfunction decompile(module) {\r\n var decompiler = new decompiler_1.Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n}\r\nexports.decompile = decompile;\r\n/** Prefix indicating a library file. */\r\nvar program_1 = __webpack_require__(2);\r\nexports.LIBRARY_PREFIX = program_1.LIBRARY_PREFIX;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar module_1 = __webpack_require__(0);\r\n// TODO :-)\r\nvar Decompiler = /** @class */ (function () {\r\n function Decompiler() {\r\n this.text = [];\r\n this.functionId = 0;\r\n }\r\n Decompiler.decompile = function (module) {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n };\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n Decompiler.prototype.decompile = function (module) {\r\n throw new Error(\"not implemented\");\r\n };\r\n Decompiler.prototype.decompileFunction = function (func) {\r\n var name = module_1.readString(_BinaryenFunctionGetName(func)) || \"$\" + this.functionId.toString(10);\r\n var body = _BinaryenFunctionGetBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (var i = 0, k = _BinaryenFunctionGetNumParams(func); i < k; ++i) {\r\n if (i > 0)\r\n this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetParam(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetResult(func)));\r\n this.push(\" \");\r\n if (_BinaryenExpressionGetId(body) != module_1.ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (_BinaryenExpressionGetId(body) != module_1.ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n };\r\n Decompiler.prototype.decompileExpression = function (expr) {\r\n var id = _BinaryenExpressionGetId(expr);\r\n var type = _BinaryenExpressionGetType(expr);\r\n var nested;\r\n var string;\r\n var i, k;\r\n switch (id) {\r\n case module_1.ExpressionId.Block:// TODO: magic\r\n if ((string = module_1.readString(_BinaryenBlockGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = _BinaryenBlockGetNumChildren(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(_BinaryenBlockGetChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n case module_1.ExpressionId.If:\r\n if (type == module_1.NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n if (nested = _BinaryenIfGetIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n }\r\n else {\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(_BinaryenIfGetIfFalse(expr));\r\n }\r\n return;\r\n case module_1.ExpressionId.Loop:\r\n if ((string = module_1.readString(_BinaryenLoopGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(_BinaryenLoopGetBody(expr));\r\n this.push(\"while (0);\\n\");\r\n case module_1.ExpressionId.Break:\r\n if (nested = _BinaryenBreakGetCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = module_1.readString(_BinaryenBreakGetName(expr))) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n }\r\n else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n case module_1.ExpressionId.Switch:\r\n case module_1.ExpressionId.Call:\r\n case module_1.ExpressionId.CallImport:\r\n case module_1.ExpressionId.CallIndirect:\r\n case module_1.ExpressionId.GetLocal:\r\n this.push(\"$\");\r\n this.push(_BinaryenGetLocalGetIndex(expr).toString(10));\r\n return;\r\n case module_1.ExpressionId.SetLocal:\r\n this.push(\"$\");\r\n this.push(_BinaryenSetLocalGetIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(_BinaryenSetLocalGetValue(expr));\r\n return;\r\n case module_1.ExpressionId.GetGlobal:\r\n case module_1.ExpressionId.SetGlobal:\r\n case module_1.ExpressionId.Load:\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenLoadGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenLoadGetPtr(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.ExpressionId.Store:\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenStoreGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenStoreGetPtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenStoreGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.ExpressionId.Const:\r\n switch (type) {\r\n case module_1.NativeType.I32:\r\n this.push(_BinaryenConstGetValueI32(expr).toString(10));\r\n return;\r\n case module_1.NativeType.I64:\r\n this.push(i64_to_string(i64_new(_BinaryenConstGetValueI64Low(expr), _BinaryenConstGetValueI64High(expr))));\r\n return;\r\n case module_1.NativeType.F32:\r\n this.push(_BinaryenConstGetValueF32(expr).toString(10));\r\n return;\r\n case module_1.NativeType.F64:\r\n this.push(_BinaryenConstGetValueF64(expr).toString(10));\r\n return;\r\n }\r\n break;\r\n case module_1.ExpressionId.Unary:\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n case module_1.UnaryOp.ClzI32:\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.CtzI32:\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.PopcntI32:\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.NegF32:\r\n case module_1.UnaryOp.NegF64:\r\n this.push(\"-\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.AbsF32:\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.CeilF32:\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.FloorF32:\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.TruncF32:\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.NearestF32:\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.SqrtF32:\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.EqzI32:\r\n case module_1.UnaryOp.EqzI64:\r\n this.push(\"!\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ClzI64:\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.CtzI64:\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.PopcntI64:\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.AbsF64:\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.CeilF64:\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.FloorF64:\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.TruncF64:\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.NearestF64:\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.SqrtF64:\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.ExtendI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ExtendU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.WrapI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.TruncF32ToI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.TruncF32ToI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.TruncF32ToU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.TruncF32ToU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.TruncF64ToI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.TruncF64ToI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.TruncF64ToU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.TruncF64ToU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ReinterpretF32:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.ReinterpretF64:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.ConvertI32ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ConvertI32ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ConvertU32ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ConvertU32ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ConvertI64ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ConvertI64ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ConvertU64ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ConvertU64ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.PromoteF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.DemoteF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n case module_1.UnaryOp.ReinterpretI32:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.UnaryOp.ReinterpretI64:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n break;\r\n case module_1.ExpressionId.Binary:// TODO: precedence\r\n switch (_BinaryenBinaryGetOp(expr)) {\r\n case module_1.BinaryOp.AddI32:\r\n case module_1.BinaryOp.AddI64:\r\n case module_1.BinaryOp.AddF32:\r\n case module_1.BinaryOp.AddF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.SubI32:\r\n case module_1.BinaryOp.SubI64:\r\n case module_1.BinaryOp.SubF32:\r\n case module_1.BinaryOp.SubF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.MulI32:\r\n case module_1.BinaryOp.MulI64:\r\n case module_1.BinaryOp.MulF32:\r\n case module_1.BinaryOp.MulF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.DivI32:\r\n case module_1.BinaryOp.DivI64:\r\n case module_1.BinaryOp.DivF32:\r\n case module_1.BinaryOp.DivF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.DivU32:\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.RemI32:\r\n case module_1.BinaryOp.RemI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.RemU32:\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.AndI32:\r\n case module_1.BinaryOp.AndI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.OrI32:\r\n case module_1.BinaryOp.OrI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.XorI32:\r\n case module_1.BinaryOp.XorI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.ShlI32:\r\n case module_1.BinaryOp.ShlI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.ShrU32:\r\n case module_1.BinaryOp.ShrU64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.ShrI32:\r\n case module_1.BinaryOp.ShrI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.RotlI32:\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.RotrI32:\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.EqI32:\r\n case module_1.BinaryOp.EqI64:\r\n case module_1.BinaryOp.EqF32:\r\n case module_1.BinaryOp.EqF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.NeI32:\r\n case module_1.BinaryOp.NeI64:\r\n case module_1.BinaryOp.NeF32:\r\n case module_1.BinaryOp.NeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.LtI32:\r\n case module_1.BinaryOp.LtI64:\r\n case module_1.BinaryOp.LtF32:\r\n case module_1.BinaryOp.LtF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.LtU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.LeI32:\r\n case module_1.BinaryOp.LeI64:\r\n case module_1.BinaryOp.LeF32:\r\n case module_1.BinaryOp.LeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.LeU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.GtI32:\r\n case module_1.BinaryOp.GtI64:\r\n case module_1.BinaryOp.GtF32:\r\n case module_1.BinaryOp.GtF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.GtU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.GeI32:\r\n case module_1.BinaryOp.GeI64:\r\n case module_1.BinaryOp.GeF32:\r\n case module_1.BinaryOp.GeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.GeU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.DivU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.RemU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.RotlI64:\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.RotrI64:\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.LtU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.LeU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.GtU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.GeU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n case module_1.BinaryOp.CopysignF32:\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.MinF32:\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.MaxF32:\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.CopysignF64:\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.MinF64:\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.BinaryOp.MaxF64:\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n return;\r\n case module_1.ExpressionId.Select:\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(_BinaryenSelectGetIfTrue(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetIfFalse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetCondition(expr));\r\n this.push(\")\");\r\n return;\r\n case module_1.ExpressionId.Drop:\r\n this.decompileExpression(_BinaryenDropGetValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n case module_1.ExpressionId.Return:\r\n if (nested = _BinaryenReturnGetValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n }\r\n else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n case module_1.ExpressionId.Host:\r\n switch (_BinaryenHostGetOp(expr)) {\r\n case module_1.HostOp.CurrentMemory:\r\n this.push(\"current_memory()\");\r\n return;\r\n case module_1.HostOp.GrowMemory:\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(_BinaryenHostGetOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n break;\r\n case module_1.ExpressionId.Nop:\r\n this.push(\";\\n\");\r\n return;\r\n case module_1.ExpressionId.Unreachable:\r\n this.push(\"unreachable()\");\r\n return;\r\n case module_1.ExpressionId.AtomicCmpxchg:\r\n case module_1.ExpressionId.AtomicRMW:\r\n case module_1.ExpressionId.AtomicWait:\r\n case module_1.ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n };\r\n Decompiler.prototype.push = function (text) {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n };\r\n Decompiler.prototype.finish = function () {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n };\r\n return Decompiler;\r\n}());\r\nexports.Decompiler = Decompiler;\r\nfunction nativeTypeToType(type) {\r\n switch (type) {\r\n case module_1.NativeType.None: return \"void\";\r\n case module_1.NativeType.I32: return \"i32\";\r\n case module_1.NativeType.I64: return \"i64\";\r\n case module_1.NativeType.F32: return \"f32\";\r\n case module_1.NativeType.F64: return \"f64\";\r\n case module_1.NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case module_1.NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\n/*\r\n\r\n This is a custom parser specifically written for the AssemblyScript subset. It accepts some of the\r\n most common TypeScript-only patterns that it knows an appropriate error message for but, though it\r\n uses TypeScript's codes for diagnostics, doesn't ultimately aim at full compatibility.\r\n\r\n*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar program_1 = __webpack_require__(2);\r\nvar tokenizer_1 = __webpack_require__(7);\r\nvar diagnostics_1 = __webpack_require__(1);\r\nvar path_1 = __webpack_require__(10);\r\nvar ast_1 = __webpack_require__(6);\r\n/** Parser interface. */\r\nvar Parser = /** @class */ (function (_super) {\r\n __extends(Parser, _super);\r\n /** Constructs a new parser. */\r\n function Parser() {\r\n var _this = _super.call(this) || this;\r\n /** Log of source file names to be requested. */\r\n _this.backlog = new Array();\r\n /** Log of source file names already processed. */\r\n _this.seenlog = new Set();\r\n _this.program = new program_1.Program(_this.diagnostics);\r\n return _this;\r\n }\r\n /** Parses a file and adds its definitions to the program. */\r\n Parser.prototype.parseFile = function (text, path, isEntry) {\r\n // check if already parsed\r\n var normalizedPath = path_1.normalize(path);\r\n for (var i = 0, k = this.program.sources.length; i < k; ++i) {\r\n if (this.program.sources[i].normalizedPath == normalizedPath)\r\n return;\r\n }\r\n this.seenlog.add(normalizedPath);\r\n // create the source element\r\n var source = new ast_1.Source(normalizedPath, text, isEntry\r\n ? ast_1.SourceKind.ENTRY\r\n : path.startsWith(program_1.LIBRARY_PREFIX) && path.indexOf(program_1.PATH_DELIMITER, program_1.LIBRARY_PREFIX.length) < 0\r\n ? ast_1.SourceKind.LIBRARY\r\n : ast_1.SourceKind.DEFAULT);\r\n this.program.sources.push(source);\r\n // tokenize and parse\r\n var tn = new tokenizer_1.Tokenizer(source, this.program.diagnostics);\r\n source.tokenizer = tn;\r\n while (!tn.skip(tokenizer_1.Token.ENDOFFILE)) {\r\n var statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n source.statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n };\r\n /** Parses a top-level statement. */\r\n Parser.prototype.parseTopLevelStatement = function (tn, isNamespaceMember) {\r\n if (isNamespaceMember === void 0) { isNamespaceMember = false; }\r\n // check decorators\r\n var decorators = null;\r\n while (tn.skip(tokenizer_1.Token.AT)) {\r\n var decorator = this.parseDecorator(tn);\r\n if (!decorator)\r\n break;\r\n if (!decorators)\r\n decorators = [];\r\n decorators.push(decorator);\r\n }\r\n // check modifiers\r\n var modifiers = null;\r\n if (tn.skip(tokenizer_1.Token.EXPORT)) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.EXPORT, tn.range()), modifiers);\r\n }\r\n if (tn.skip(tokenizer_1.Token.DECLARE)) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.DECLARE, tn.range()), modifiers);\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) {\r\n this.error(diagnostics_1.DiagnosticCode.Line_break_not_permitted_here, tn.range(tn.pos)); // recoverable, compatibility\r\n }\r\n }\r\n // remember where we took off\r\n tn.mark();\r\n // parse the statement\r\n var statement = null;\r\n var modifier;\r\n // handle declarations\r\n switch (tn.next()) {\r\n case tokenizer_1.Token.CONST:\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.CONST, tn.range()), modifiers);\r\n if (tn.skip(tokenizer_1.Token.ENUM)) {\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n break;\r\n }\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n case tokenizer_1.Token.LET:\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.LET, tn.range()), modifiers);\r\n // fall-through\r\n case tokenizer_1.Token.VAR:\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n case tokenizer_1.Token.ENUM:\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n case tokenizer_1.Token.FUNCTION:\r\n statement = this.parseFunction(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n case tokenizer_1.Token.ABSTRACT:\r\n if (!tn.skip(tokenizer_1.Token.CLASS)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(tn.pos), \"class\");\r\n break;\r\n }\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.ABSTRACT, tn.range()), modifiers);\r\n // fall through\r\n case tokenizer_1.Token.CLASS:\r\n statement = this.parseClass(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n case tokenizer_1.Token.NAMESPACE:\r\n statement = this.parseNamespace(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n case tokenizer_1.Token.IMPORT:\r\n if (modifier = ast_1.getModifier(ast_1.ModifierKind.EXPORT, modifiers)) {\r\n statement = this.parseExportImport(tn, modifier.range);\r\n }\r\n else {\r\n statement = this.parseImport(tn);\r\n }\r\n if (modifiers)\r\n ast_1.setReusableModifiers(modifiers);\r\n break;\r\n case tokenizer_1.Token.TYPE:\r\n statement = this.parseTypeDeclaration(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n default:\r\n // handle plain exports\r\n if (ast_1.hasModifier(ast_1.ModifierKind.EXPORT, modifiers)) {\r\n tn.reset();\r\n statement = this.parseExport(tn, modifiers); // TODO: why exactly does this have modifiers again? 'declare'?\r\n // handle non-declaration statements\r\n }\r\n else {\r\n if (modifiers) {\r\n if (modifier = ast_1.getModifier(ast_1.ModifierKind.DECLARE, modifiers)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_modifier_cannot_be_used_here, modifier.range, \"declare\"); // recoverable\r\n }\r\n ast_1.setReusableModifiers(modifiers);\r\n }\r\n tn.reset();\r\n if (!isNamespaceMember) {\r\n statement = this.parseStatement(tn, true);\r\n }\r\n }\r\n break;\r\n }\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(diagnostics_1.DiagnosticCode.Decorators_are_not_valid_here, decorators[i].range);\r\n }\r\n }\r\n return statement;\r\n };\r\n /** Obtains the next file to parse. */\r\n Parser.prototype.nextFile = function () {\r\n return this.backlog.length ? this.backlog.shift() : null;\r\n };\r\n /** Finishes parsing and returns the program. */\r\n Parser.prototype.finish = function () {\r\n if (this.backlog.length)\r\n throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n return this.program;\r\n };\r\n /** Parses a type. */\r\n Parser.prototype.parseType = function (tn, acceptParenthesized, suppressErrors) {\r\n if (acceptParenthesized === void 0) { acceptParenthesized = true; }\r\n if (suppressErrors === void 0) { suppressErrors = false; }\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n // void\r\n if (token == tokenizer_1.Token.VOID) {\r\n return ast_1.Node.createType(ast_1.Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos));\r\n }\r\n var type;\r\n // ( ... )\r\n if (acceptParenthesized && token == tokenizer_1.Token.OPENPAREN) {\r\n var innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType)\r\n return null;\r\n if (!tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(tn.pos), \"}\");\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n // this\r\n }\r\n else if (token == tokenizer_1.Token.THIS) {\r\n type = ast_1.Node.createType(ast_1.Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos));\r\n // true\r\n }\r\n else if (token == tokenizer_1.Token.TRUE || token == tokenizer_1.Token.FALSE) {\r\n type = ast_1.Node.createType(ast_1.Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos));\r\n // string literal\r\n }\r\n else if (token == tokenizer_1.Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = ast_1.Node.createType(ast_1.Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos));\r\n // Name\r\n }\r\n else if (token == tokenizer_1.Token.IDENTIFIER) {\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var parameters = new Array();\r\n var nullable = false;\r\n // Name\r\n if (tn.skip(tokenizer_1.Token.LESSTHAN)) {\r\n do {\r\n var parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter)\r\n return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n if (!tn.skip(tokenizer_1.Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(tn.pos), \">\");\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(tokenizer_1.Token.BAR)) {\r\n if (tn.skip(tokenizer_1.Token.NULL)) {\r\n nullable = true;\r\n }\r\n else {\r\n if (!suppressErrors) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(tn.pos), \"null\");\r\n }\r\n return null;\r\n }\r\n }\r\n type = ast_1.Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n if (!suppressErrors) {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(tokenizer_1.Token.OPENBRACKET)) {\r\n var bracketStart = tn.tokenPos;\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"]\");\r\n }\r\n return null;\r\n }\r\n var bracketRange = tn.range(bracketStart, tn.pos);\r\n // ...[] | null\r\n nullable = false;\r\n if (tn.skip(tokenizer_1.Token.BAR)) {\r\n if (tn.skip(tokenizer_1.Token.NULL)) {\r\n nullable = true;\r\n }\r\n else {\r\n if (!suppressErrors) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"null\");\r\n }\r\n return null;\r\n }\r\n }\r\n type = ast_1.Node.createType(ast_1.Node.createIdentifierExpression(\"Array\", bracketRange), [type], nullable, tn.range(startPos, tn.pos));\r\n if (nullable)\r\n break;\r\n }\r\n return type;\r\n };\r\n // statements\r\n Parser.prototype.parseDecorator = function (tn) {\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var name = tn.readIdentifier();\r\n var expression = ast_1.Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(tokenizer_1.Token.DOT)) {\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n name = tn.readIdentifier();\r\n expression = ast_1.Node.createPropertyAccessExpression(expression, ast_1.Node.createIdentifierExpression(name, tn.range()), tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n return null;\r\n }\r\n }\r\n var args;\r\n if (tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return ast_1.Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n }\r\n else {\r\n return ast_1.Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseVariable = function (tn, modifiers, decorators) {\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n var members = new Array();\r\n var isDeclare = ast_1.hasModifier(ast_1.ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseVariableDeclaration(tn, isDeclare, modifiers, decorators);\r\n if (!member)\r\n return null;\r\n members.push(member);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n var ret = ast_1.Node.createVariableStatement(members, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseVariableDeclaration = function (tn, isDeclare, parentModifiers, parentDecorators) {\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n if (isDeclare === void 0) { isDeclare = false; }\r\n if (!tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n return null;\r\n }\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var type = null;\r\n if (tn.skip(tokenizer_1.Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n var initializer = null;\r\n if (tn.skip(tokenizer_1.Token.EQUALS)) {\r\n if (isDeclare) {\r\n this.error(diagnostics_1.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts, tn.range()); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, 0 /* COMMA */ + 1);\r\n if (!initializer)\r\n return null;\r\n }\r\n else {\r\n if (ast_1.hasModifier(ast_1.ModifierKind.CONST, parentModifiers)) {\r\n if (!ast_1.hasModifier(ast_1.ModifierKind.DECLARE, parentModifiers)) {\r\n this.error(diagnostics_1.DiagnosticCode._const_declarations_must_be_initialized, identifier.range);\r\n }\r\n }\r\n else if (!type) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_expected, tn.range(tn.pos)); // recoverable\r\n }\r\n }\r\n return ast_1.Node.createVariableDeclaration(identifier, type, initializer, parentModifiers, parentDecorators, tokenizer_1.Range.join(identifier.range, tn.range()));\r\n };\r\n Parser.prototype.parseEnum = function (tn, modifiers, decorators) {\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.next() != tokenizer_1.Token.IDENTIFIER) {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n return null;\r\n }\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != tokenizer_1.Token.OPENBRACE) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"{\");\r\n return null;\r\n }\r\n var members = new Array();\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseEnumValue(tn);\r\n if (!member)\r\n return null;\r\n members.push(member);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"}\");\r\n return null;\r\n }\r\n }\r\n var ret = ast_1.Node.createEnumDeclaration(identifier, members, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseEnumValue = function (tn) {\r\n // before: Identifier ('=' Expression)?\r\n if (!tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n return null;\r\n }\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value = null;\r\n if (tn.skip(tokenizer_1.Token.EQUALS)) {\r\n value = this.parseExpression(tn, 0 /* COMMA */ + 1);\r\n if (!value)\r\n return null;\r\n }\r\n return ast_1.Node.createEnumValueDeclaration(identifier, value, tokenizer_1.Range.join(identifier.range, tn.range()));\r\n };\r\n Parser.prototype.parseReturn = function (tn) {\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n var expr = null;\r\n if (tn.peek(true) != tokenizer_1.Token.SEMICOLON &&\r\n tn.nextToken != tokenizer_1.Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine) {\r\n if (!(expr = this.parseExpression(tn)))\r\n return null;\r\n }\r\n var ret = ast_1.Node.createReturnStatement(expr, tn.range());\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseTypeParameters = function (tn) {\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n var typeParameters = new Array();\r\n if (!tn.skip(tokenizer_1.Token.GREATERTHAN)) {\r\n do {\r\n var typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter)\r\n return null;\r\n typeParameters.push(typeParameter);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n if (!tn.skip(tokenizer_1.Token.GREATERTHAN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \">\");\r\n return null;\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Type_parameter_list_cannot_be_empty, tn.range()); // recoverable\r\n }\r\n return typeParameters;\r\n };\r\n Parser.prototype.parseTypeParameter = function (tn) {\r\n // before: Identifier ('extends' Type)?\r\n if (tn.next() == tokenizer_1.Token.IDENTIFIER) {\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var extendsType = null;\r\n if (tn.skip(tokenizer_1.Token.EXTENDS)) {\r\n if (!(extendsType = this.parseType(tn)))\r\n return null;\r\n }\r\n return ast_1.Node.createTypeParameter(identifier, extendsType, tokenizer_1.Range.join(identifier.range, tn.range()));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseParameters = function (tn) {\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n var parameters = new Array();\r\n var seenRest = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n if (tn.peek() != tokenizer_1.Token.CLOSEPAREN) {\r\n do {\r\n var param = this.parseParameter(tn);\r\n if (!param)\r\n return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(diagnostics_1.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list, seenRest.name.range);\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default:\r\n if (seenOptional) {\r\n this.error(diagnostics_1.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter, param.name.range);\r\n }\r\n break;\r\n case ast_1.ParameterKind.OPTIONAL:\r\n seenOptional = true;\r\n break;\r\n case ast_1.ParameterKind.REST:\r\n seenRest = param;\r\n break;\r\n }\r\n parameters.push(param);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n }\r\n if (!tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n return null;\r\n }\r\n return parameters;\r\n };\r\n Parser.prototype.parseParameter = function (tn, suppressErrors) {\r\n // before: '...'? Identifier '?'? (':' Type)? ('=' Expression)?\r\n if (suppressErrors === void 0) { suppressErrors = false; }\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange = null;\r\n if (tn.skip(tokenizer_1.Token.DOT_DOT_DOT)) {\r\n isRest = true;\r\n startRange = tn.range();\r\n }\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n if (!isRest)\r\n startRange = tn.range();\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var type = null;\r\n if (isOptional = tn.skip(tokenizer_1.Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(diagnostics_1.DiagnosticCode.A_rest_parameter_cannot_be_optional, identifier.range);\r\n }\r\n }\r\n if (tn.skip(tokenizer_1.Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type)\r\n return null;\r\n }\r\n var initializer = null;\r\n if (tn.skip(tokenizer_1.Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(diagnostics_1.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer, identifier.range);\r\n }\r\n if (isOptional) {\r\n this.error(diagnostics_1.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer, identifier.range);\r\n }\r\n else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, 0 /* COMMA */ + 1);\r\n if (!initializer)\r\n return null;\r\n }\r\n return ast_1.Node.createParameter(identifier, type, initializer, isRest\r\n ? ast_1.ParameterKind.REST\r\n : isOptional\r\n ? ast_1.ParameterKind.OPTIONAL\r\n : ast_1.ParameterKind.DEFAULT, tokenizer_1.Range.join(startRange, tn.range()));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseFunction = function (tn, modifiers, decorators) {\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (!tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range(tn.pos));\r\n return null;\r\n }\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters = null;\r\n if (tn.skip(tokenizer_1.Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters)\r\n return null;\r\n }\r\n if (!tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(tn.pos), \"(\");\r\n return null;\r\n }\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters)\r\n return null;\r\n var isSetter = ast_1.hasModifier(ast_1.ModifierKind.SET, modifiers);\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(diagnostics_1.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter, identifier.range); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(diagnostics_1.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer, identifier.range); // recoverable\r\n }\r\n }\r\n var isGetter = ast_1.hasModifier(ast_1.ModifierKind.GET, modifiers);\r\n if (isGetter && parameters.length) {\r\n this.error(diagnostics_1.DiagnosticCode.A_get_accessor_cannot_have_parameters, identifier.range); // recoverable\r\n }\r\n var returnType = null;\r\n if (tn.skip(tokenizer_1.Token.COLON)) {\r\n returnType = this.parseType(tn, isSetter);\r\n if (!returnType)\r\n return null;\r\n }\r\n else if (!isSetter) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_expected, tn.range(tn.pos)); // recoverable\r\n }\r\n var isDeclare = ast_1.hasModifier(ast_1.ModifierKind.DECLARE, modifiers);\r\n var body = null;\r\n if (tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n if (isDeclare) {\r\n this.error(diagnostics_1.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts, tn.range()); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body)\r\n return null;\r\n }\r\n else if (!isDeclare) {\r\n this.error(diagnostics_1.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration, tn.range(tn.pos));\r\n }\r\n var ret = ast_1.Node.createFunctionDeclaration(identifier, typeParameters, parameters, returnType, body, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseFunctionExpression = function (tn) {\r\n var startPos = tn.tokenPos;\r\n var identifier;\r\n var isArrow = false;\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n if (tn.token == tokenizer_1.Token.FUNCTION) {\r\n isArrow = false;\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n else {\r\n identifier = ast_1.Node.createIdentifierExpression(\"\", tn.range(tn.pos, tn.pos));\r\n }\r\n if (!tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(tn.pos), \"(\");\r\n return null;\r\n }\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n }\r\n else {\r\n isArrow = true;\r\n assert(tn.token == tokenizer_1.Token.OPENPAREN);\r\n identifier = ast_1.Node.createIdentifierExpression(\"\", tn.range(tn.tokenPos, tn.tokenPos));\r\n }\r\n // TODO: type parameters? doesn't seem worth it.\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters)\r\n return null;\r\n return this.parseFunctionExpressionCommon(tn, identifier, parameters, isArrow, startPos);\r\n };\r\n Parser.prototype.parseFunctionExpressionCommon = function (tn, identifier, parameters, isArrow, startPos) {\r\n if (startPos === void 0) { startPos = -1; }\r\n if (startPos < 0)\r\n startPos = identifier.range.start;\r\n var returnType = null;\r\n if (tn.skip(tokenizer_1.Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType)\r\n return null;\r\n }\r\n if (isArrow) {\r\n if (!tn.skip(tokenizer_1.Token.EQUALS_GREATERTHAN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(tn.pos), \"=>\");\r\n return null;\r\n }\r\n }\r\n var body;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n }\r\n else {\r\n if (!tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(tn.pos), \"{\");\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body)\r\n return null;\r\n var declaration = ast_1.Node.createFunctionDeclaration(identifier, null, parameters, returnType, body, null, null, tn.range(startPos, tn.pos));\r\n return ast_1.Node.createFunctionExpression(declaration, isArrow);\r\n };\r\n Parser.prototype.parseClass = function (tn, modifiers, decorators) {\r\n // at 'class':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n var startPos = decorators && decorators.length\r\n ? decorators[0].range.start\r\n : modifiers && modifiers.length\r\n ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters;\r\n if (tn.skip(tokenizer_1.Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters)\r\n return null;\r\n }\r\n else {\r\n typeParameters = [];\r\n }\r\n var extendsType = null;\r\n if (tn.skip(tokenizer_1.Token.EXTENDS)) {\r\n extendsType = this.parseType(tn);\r\n if (!extendsType)\r\n return null;\r\n }\r\n var implementsTypes = new Array();\r\n if (tn.skip(tokenizer_1.Token.IMPLEMENTS)) {\r\n do {\r\n var type = this.parseType(tn);\r\n if (!type)\r\n return null;\r\n implementsTypes.push(type);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n }\r\n if (tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n var members = new Array();\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n var isDeclare = ast_1.hasModifier(ast_1.ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseClassMember(tn, isDeclare);\r\n if (!member)\r\n return null;\r\n members.push(member);\r\n } while (!tn.skip(tokenizer_1.Token.CLOSEBRACE));\r\n }\r\n return ast_1.Node.createClassDeclaration(identifier, typeParameters, extendsType, implementsTypes, members, modifiers, decorators, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"{\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseClassMember = function (tn, parentIsDeclare) {\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n var startPos = tn.pos;\r\n var decorators = new Array();\r\n while (tn.skip(tokenizer_1.Token.AT)) {\r\n var decorator = this.parseDecorator(tn);\r\n if (!decorator)\r\n break;\r\n decorators.push(decorator);\r\n }\r\n var modifiers = null;\r\n if (tn.skip(tokenizer_1.Token.PUBLIC)) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.PUBLIC, tn.range()), modifiers);\r\n }\r\n else if (tn.skip(tokenizer_1.Token.PRIVATE)) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.PRIVATE, tn.range()), modifiers);\r\n }\r\n else if (tn.skip(tokenizer_1.Token.PROTECTED)) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.PROTECTED, tn.range()), modifiers);\r\n }\r\n if (tn.skip(tokenizer_1.Token.STATIC)) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.STATIC, tn.range()), modifiers);\r\n }\r\n else if (tn.skip(tokenizer_1.Token.ABSTRACT)) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.ABSTRACT, tn.range()), modifiers);\r\n }\r\n if (tn.skip(tokenizer_1.Token.READONLY)) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.READONLY, tn.range()), modifiers);\r\n }\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n tn.mark();\r\n var isGetter = false;\r\n var isSetter = false;\r\n if (isGetter = tn.skip(tokenizer_1.Token.GET)) {\r\n if (tn.peek(true, true) == tokenizer_1.Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.GET, tn.range()), modifiers);\r\n }\r\n else {\r\n tn.reset();\r\n isGetter = false;\r\n }\r\n }\r\n else if (isSetter = tn.skip(tokenizer_1.Token.SET)) {\r\n if (tn.peek(true, true) == tokenizer_1.Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = ast_1.addModifier(ast_1.Node.createModifier(ast_1.ModifierKind.SET, tn.range()), modifiers);\r\n }\r\n else {\r\n tn.reset();\r\n isSetter = false;\r\n }\r\n }\r\n var isConstructor = tn.skip(tokenizer_1.Token.CONSTRUCTOR);\r\n if (isConstructor || tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var identifier = isConstructor\r\n ? ast_1.Node.createConstructorExpression(tn.range())\r\n : ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters = null;\r\n if (tn.skip(tokenizer_1.Token.LESSTHAN)) {\r\n if (isConstructor) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration, tn.range()); // recoverable\r\n }\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters)\r\n return null;\r\n }\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters)\r\n return null;\r\n if (isGetter && parameters.length) {\r\n this.error(diagnostics_1.DiagnosticCode.A_get_accessor_cannot_have_parameters, identifier.range);\r\n }\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(diagnostics_1.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter, identifier.range);\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(diagnostics_1.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer, identifier.range);\r\n }\r\n }\r\n var returnType = null;\r\n if (tn.skip(tokenizer_1.Token.COLON)) {\r\n if (identifier.kind == ast_1.NodeKind.CONSTRUCTOR) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration, tn.range());\r\n }\r\n else if (isSetter) {\r\n this.error(diagnostics_1.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation, tn.range());\r\n }\r\n returnType = this.parseType(tn, identifier.kind == ast_1.NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType)\r\n return null;\r\n }\r\n else if (!isSetter && identifier.kind != ast_1.NodeKind.CONSTRUCTOR) {\r\n this.error(diagnostics_1.DiagnosticCode.Type_expected, tn.range()); // recoverable\r\n }\r\n var body = null;\r\n if (tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n if (parentIsDeclare) {\r\n this.error(diagnostics_1.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts, tn.range()); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body)\r\n return null;\r\n }\r\n else if (!parentIsDeclare) {\r\n this.error(diagnostics_1.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration, tn.range()); // recoverable\r\n }\r\n var retMethod = ast_1.Node.createMethodDeclaration(identifier, typeParameters, parameters, returnType, body, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return retMethod;\r\n }\r\n else if (isConstructor) {\r\n this.error(diagnostics_1.DiagnosticCode.Constructor_implementation_is_missing, identifier.range);\r\n }\r\n else if (isGetter || isSetter) {\r\n this.error(diagnostics_1.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration, identifier.range);\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n }\r\n else {\r\n var modifier;\r\n if (modifier = ast_1.getModifier(ast_1.ModifierKind.ABSTRACT, modifiers)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_modifier_cannot_be_used_here, modifier.range, \"abstract\"); // recoverable\r\n }\r\n if (modifier = ast_1.getModifier(ast_1.ModifierKind.GET, modifiers)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_modifier_cannot_be_used_here, modifier.range, \"get\"); // recoverable\r\n }\r\n if (modifier = ast_1.getModifier(ast_1.ModifierKind.SET, modifiers)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_modifier_cannot_be_used_here, modifier.range, \"set\"); // recoverable\r\n }\r\n var type = null;\r\n if (tn.skip(tokenizer_1.Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type)\r\n return null;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Type_expected, tn.range()); // recoverable\r\n }\r\n var initializer = null;\r\n if (tn.skip(tokenizer_1.Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer)\r\n return null;\r\n }\r\n var retField = ast_1.Node.createFieldDeclaration(identifier, type, initializer, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return retField;\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseNamespace = function (tn, modifiers, decorators) {\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n var members = new Array();\r\n while (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n var member = this.parseTopLevelStatement(tn, true);\r\n if (!member)\r\n return null;\r\n members.push(member);\r\n }\r\n var ret = ast_1.Node.createNamespaceDeclaration(identifier, members, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"{\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseExport = function (tn, modifiers) {\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n var members = new Array();\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseExportMember(tn);\r\n if (!member)\r\n return null;\r\n members.push(member);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"}\");\r\n return null;\r\n }\r\n }\r\n var path = null;\r\n if (tn.skip(tokenizer_1.Token.FROM)) {\r\n if (tn.skip(tokenizer_1.Token.STRINGLITERAL)) {\r\n path = ast_1.Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.String_literal_expected, tn.range());\r\n return null;\r\n }\r\n }\r\n var ret = ast_1.Node.createExportStatement(members, path, modifiers, tn.range(startPos, tn.pos));\r\n if (ret.normalizedPath && !this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\r\n }\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"{\");\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseExportMember = function (tn) {\r\n // before: Identifier ('as' Identifier)?\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var asIdentifier = null;\r\n if (tn.skip(tokenizer_1.Token.AS)) {\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n asIdentifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n return null;\r\n }\r\n }\r\n return ast_1.Node.createExportMember(identifier, asIdentifier, asIdentifier\r\n ? tokenizer_1.Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range);\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseImport = function (tn) {\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n var startPos = tn.tokenPos;\r\n var members = null;\r\n var namespaceName = null;\r\n var skipFrom = false;\r\n if (tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n members = new Array();\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseImportDeclaration(tn);\r\n if (!member)\r\n return null;\r\n members.push(member);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"}\");\r\n return null;\r\n }\r\n }\r\n }\r\n else if (tn.skip(tokenizer_1.Token.ASTERISK)) {\r\n if (tn.skip(tokenizer_1.Token.AS)) {\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n namespaceName = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n return null;\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"as\");\r\n return null;\r\n }\r\n }\r\n else {\r\n skipFrom = true;\r\n }\r\n if (skipFrom || tn.skip(tokenizer_1.Token.FROM)) {\r\n if (tn.skip(tokenizer_1.Token.STRINGLITERAL)) {\r\n var path = ast_1.Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n var ret;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = ast_1.Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n ret = ast_1.Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n if (!this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\r\n }\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.String_literal_expected, tn.range());\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"from\");\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseImportDeclaration = function (tn) {\r\n // before: Identifier ('as' Identifier)?\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var asIdentifier = null;\r\n if (tn.skip(tokenizer_1.Token.AS)) {\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n asIdentifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n return null;\r\n }\r\n }\r\n return ast_1.Node.createImportDeclaration(identifier, asIdentifier, asIdentifier\r\n ? tokenizer_1.Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range);\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseExportImport = function (tn, startRange) {\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var asIdentifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(tokenizer_1.Token.EQUALS)) {\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var ret = ast_1.Node.createExportImportStatement(identifier, asIdentifier, tokenizer_1.Range.join(startRange, tn.range()));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"=\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseStatement = function (tn, topLevel) {\r\n // at previous token\r\n if (topLevel === void 0) { topLevel = false; }\r\n tn.mark();\r\n var token = tn.next();\r\n switch (token) {\r\n case tokenizer_1.Token.BREAK:\r\n return this.parseBreak(tn);\r\n case tokenizer_1.Token.CONST:\r\n return this.parseVariable(tn, [\r\n ast_1.Node.createModifier(ast_1.ModifierKind.CONST, tn.range())\r\n ], null);\r\n case tokenizer_1.Token.CONTINUE:\r\n return this.parseContinue(tn);\r\n case tokenizer_1.Token.DO:\r\n return this.parseDoStatement(tn);\r\n case tokenizer_1.Token.FOR:\r\n return this.parseForStatement(tn);\r\n case tokenizer_1.Token.IF:\r\n return this.parseIfStatement(tn);\r\n case tokenizer_1.Token.LET:\r\n return this.parseVariable(tn, [\r\n ast_1.Node.createModifier(ast_1.ModifierKind.LET, tn.range())\r\n ], null);\r\n case tokenizer_1.Token.VAR:\r\n return this.parseVariable(tn, null, null);\r\n case tokenizer_1.Token.OPENBRACE:\r\n return this.parseBlockStatement(tn, topLevel);\r\n case tokenizer_1.Token.RETURN:\r\n if (topLevel) {\r\n this.error(diagnostics_1.DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body, tn.range()); // recoverable\r\n }\r\n return this.parseReturn(tn);\r\n case tokenizer_1.Token.SEMICOLON:\r\n return ast_1.Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n case tokenizer_1.Token.SWITCH:\r\n return this.parseSwitchStatement(tn);\r\n case tokenizer_1.Token.THROW:\r\n return this.parseThrowStatement(tn);\r\n case tokenizer_1.Token.TRY:\r\n return this.parseTryStatement(tn);\r\n case tokenizer_1.Token.TYPE:\r\n return this.parseTypeDeclaration(tn, null);\r\n case tokenizer_1.Token.WHILE:\r\n return this.parseWhileStatement(tn);\r\n default:\r\n tn.reset();\r\n return this.parseExpressionStatement(tn);\r\n }\r\n };\r\n Parser.prototype.parseBlockStatement = function (tn, topLevel) {\r\n // at '{': Statement* '}' ';'?\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n var statement = this.parseStatement(tn, topLevel);\r\n if (!statement)\r\n return null;\r\n statements.push(statement);\r\n }\r\n var ret = ast_1.Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseBreak = function (tn) {\r\n // at 'break': Identifier? ';'?\r\n var identifier = null;\r\n if (tn.peek(true) == tokenizer_1.Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(true);\r\n identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = ast_1.Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseContinue = function (tn) {\r\n // at 'continue': Identifier? ';'?\r\n var identifier = null;\r\n if (tn.peek(true) == tokenizer_1.Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(true);\r\n identifier = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = ast_1.Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseDoStatement = function (tn) {\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement)\r\n return null;\r\n if (tn.skip(tokenizer_1.Token.WHILE)) {\r\n if (tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition)\r\n return null;\r\n if (tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n var ret = ast_1.Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"(\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"while\");\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseExpressionStatement = function (tn) {\r\n // at previous token\r\n var expr = this.parseExpression(tn);\r\n if (!expr)\r\n return null;\r\n var ret = ast_1.Node.createExpressionStatement(expr);\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseForStatement = function (tn) {\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n var initializer = null;\r\n if (tn.skip(tokenizer_1.Token.LET) || tn.skip(tokenizer_1.Token.CONST) || tn.skip(tokenizer_1.Token.VAR)) {\r\n initializer = this.parseVariable(tn, null, null);\r\n }\r\n else if (!tn.skip(tokenizer_1.Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer)\r\n return null;\r\n }\r\n if (tn.token == tokenizer_1.Token.SEMICOLON) {\r\n var condition = null;\r\n if (!tn.skip(tokenizer_1.Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition)\r\n return null;\r\n }\r\n if (tn.token == tokenizer_1.Token.SEMICOLON) {\r\n var incrementor = null;\r\n if (!tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor)\r\n return null;\r\n if (!tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n return null;\r\n }\r\n }\r\n var statement = this.parseStatement(tn);\r\n if (!statement)\r\n return null;\r\n return ast_1.Node.createForStatement(initializer, condition\r\n ? condition.expression\r\n : null, incrementor, statement, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \";\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \";\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"(\");\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseIfStatement = function (tn) {\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition)\r\n return null;\r\n if (tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement)\r\n return null;\r\n var elseStatement = null;\r\n if (tn.skip(tokenizer_1.Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement)\r\n return null;\r\n }\r\n return ast_1.Node.createIfStatement(condition, statement, elseStatement, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"(\");\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseSwitchStatement = function (tn) {\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition)\r\n return null;\r\n if (tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n if (tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n var cases = new Array();\r\n while (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n var case_ = this.parseSwitchCase(tn);\r\n if (!case_)\r\n return null;\r\n cases.push(case_);\r\n }\r\n var ret = ast_1.Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"{\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"(\");\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseSwitchCase = function (tn) {\r\n var startPos = tn.tokenPos;\r\n var statements, statement;\r\n // 'case' Expression ':' Statement*\r\n if (tn.skip(tokenizer_1.Token.CASE)) {\r\n var label = this.parseExpression(tn);\r\n if (!label)\r\n return null;\r\n if (tn.skip(tokenizer_1.Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != tokenizer_1.Token.CASE && tn.nextToken != tokenizer_1.Token.DEFAULT && tn.nextToken != tokenizer_1.Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement)\r\n return null;\r\n statements.push(statement);\r\n }\r\n return ast_1.Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \":\");\r\n }\r\n // 'default' ':' Statement*\r\n }\r\n else if (tn.skip(tokenizer_1.Token.DEFAULT)) {\r\n if (tn.skip(tokenizer_1.Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != tokenizer_1.Token.CASE && tn.nextToken != tokenizer_1.Token.DEFAULT && tn.nextToken != tokenizer_1.Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement)\r\n return null;\r\n statements.push(statement);\r\n }\r\n return ast_1.Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \":\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._case_or_default_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseThrowStatement = function (tn) {\r\n // at 'throw': Expression ';'?\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression)\r\n return null;\r\n var ret = ast_1.Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n };\r\n Parser.prototype.parseTryStatement = function (tn) {\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n var startPos = tn.tokenPos;\r\n var stmt;\r\n if (tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n var statements = new Array();\r\n while (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt)\r\n return null;\r\n statements.push(stmt);\r\n }\r\n var catchVariable = null;\r\n var catchStatements = null;\r\n var finallyStatements = null;\r\n if (tn.skip(tokenizer_1.Token.CATCH)) {\r\n if (!tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"(\");\r\n return null;\r\n }\r\n if (!tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n return null;\r\n }\r\n catchVariable = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n return null;\r\n }\r\n if (!tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"{\");\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt)\r\n return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(tokenizer_1.Token.FINALLY)) {\r\n if (!tn.skip(tokenizer_1.Token.OPENBRACE)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"{\");\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(tokenizer_1.Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt)\r\n return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"catch\");\r\n return null;\r\n }\r\n var ret = ast_1.Node.createTryStatement(statements, catchVariable, catchStatements, finallyStatements, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"{\");\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseTypeDeclaration = function (tn, modifiers, decorators) {\r\n // at 'type': Identifier '=' Type ';'?\r\n if (modifiers === void 0) { modifiers = null; }\r\n if (decorators === void 0) { decorators = null; }\r\n var startPos = decorators && decorators.length ? decorators[0].range.start\r\n : modifiers && modifiers.length ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.IDENTIFIER)) {\r\n var name = ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(tokenizer_1.Token.EQUALS)) {\r\n var type = this.parseType(tn);\r\n if (!type)\r\n return null;\r\n var ret = ast_1.Node.createTypeDeclaration(name, type, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"=\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, tn.range());\r\n }\r\n return null;\r\n };\r\n Parser.prototype.parseWhileStatement = function (tn) {\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n var expression = this.parseExpression(tn);\r\n if (!expression)\r\n return null;\r\n if (tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement)\r\n return null;\r\n var ret = ast_1.Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(tokenizer_1.Token.SEMICOLON);\r\n return ret;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n }\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"(\");\r\n }\r\n return null;\r\n };\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n Parser.prototype.parseExpressionStart = function (tn) {\r\n var token = tn.next(true);\r\n var startPos = tn.tokenPos;\r\n var expr = null;\r\n if (token == tokenizer_1.Token.NULL) {\r\n return ast_1.Node.createNullExpression(tn.range());\r\n }\r\n if (token == tokenizer_1.Token.TRUE) {\r\n return ast_1.Node.createTrueExpression(tn.range());\r\n }\r\n if (token == tokenizer_1.Token.FALSE) {\r\n return ast_1.Node.createFalseExpression(tn.range());\r\n }\r\n var p = determinePrecedenceStart(token);\r\n if (p != -1 /* INVALID */) {\r\n var operand;\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n // NewExpression\r\n if (token == tokenizer_1.Token.NEW) {\r\n operand = this.parseExpression(tn, 18 /* CALL */);\r\n if (!operand)\r\n return null;\r\n if (operand.kind == ast_1.NodeKind.CALL) {\r\n return ast_1.Node.createNewExpression(operand.expression, operand.typeArguments, operand.arguments, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Operation_not_supported, tn.range());\r\n }\r\n return null;\r\n }\r\n else {\r\n operand = this.parseExpression(tn, p);\r\n if (!operand)\r\n return null;\r\n }\r\n // UnaryPrefixExpression\r\n if (token == tokenizer_1.Token.PLUS_PLUS || token == tokenizer_1.Token.MINUS_MINUS) {\r\n if (operand.kind != ast_1.NodeKind.IDENTIFIER &&\r\n operand.kind != ast_1.NodeKind.ELEMENTACCESS &&\r\n operand.kind != ast_1.NodeKind.PROPERTYACCESS) {\r\n this.error(diagnostics_1.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access, operand.range);\r\n }\r\n }\r\n return ast_1.Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n switch (token) {\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case tokenizer_1.Token.OPENPAREN:\r\n // determine whether this is a function expression\r\n if (tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n return this.parseFunctionExpressionCommon(tn, ast_1.Node.createIdentifierExpression(\"\", tn.range(startPos, startPos)), [], true);\r\n }\r\n tn.mark();\r\n var again = true;\r\n do {\r\n switch (tn.next(true)) {\r\n // function expression\r\n case tokenizer_1.Token.DOT_DOT_DOT:\r\n tn.reset();\r\n return this.parseFunctionExpression(tn);\r\n // can be both\r\n case tokenizer_1.Token.IDENTIFIER:\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n // if we got here, check for arrow\r\n case tokenizer_1.Token.CLOSEPAREN:\r\n if (!tn.skip(tokenizer_1.Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n // function expression\r\n case tokenizer_1.Token.QUESTION: // optional parameter\r\n case tokenizer_1.Token.COLON:// type annotation\r\n tn.reset();\r\n return this.parseFunctionExpression(tn);\r\n // can be both\r\n case tokenizer_1.Token.COMMA:\r\n break; // continue\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default:\r\n again = false;\r\n break;\r\n }\r\n break;\r\n // parenthesized expression\r\n default:\r\n again = false;\r\n break;\r\n }\r\n } while (again);\r\n tn.reset();\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr)\r\n return null;\r\n if (!tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n return null;\r\n }\r\n return ast_1.Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n // ArrayLiteralExpression\r\n case tokenizer_1.Token.OPENBRACKET:\r\n var elementExpressions = new Array();\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACKET)) {\r\n do {\r\n if (tn.peek() == tokenizer_1.Token.COMMA) {\r\n expr = null; // omitted\r\n }\r\n else {\r\n expr = this.parseExpression(tn, 0 /* COMMA */ + 1);\r\n if (!expr)\r\n return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (tn.peek() == tokenizer_1.Token.CLOSEBRACKET)\r\n break;\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACKET)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"]\");\r\n return null;\r\n }\r\n }\r\n return ast_1.Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n // AssertionExpression (unary prefix)\r\n case tokenizer_1.Token.LESSTHAN:\r\n var toType = this.parseType(tn);\r\n if (!toType)\r\n return null;\r\n if (!tn.skip(tokenizer_1.Token.GREATERTHAN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \">\");\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, 18 /* CALL */);\r\n if (!expr)\r\n return null;\r\n return ast_1.Node.createAssertionExpression(0 /* PREFIX */, expr, toType, tn.range(startPos, tn.pos));\r\n case tokenizer_1.Token.IDENTIFIER:\r\n return ast_1.Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n case tokenizer_1.Token.THIS:\r\n return ast_1.Node.createThisExpression(tn.range(startPos, tn.pos));\r\n case tokenizer_1.Token.CONSTRUCTOR:\r\n return ast_1.Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n case tokenizer_1.Token.SUPER:\r\n return ast_1.Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n case tokenizer_1.Token.STRINGLITERAL:\r\n return ast_1.Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n case tokenizer_1.Token.INTEGERLITERAL:\r\n return ast_1.Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n case tokenizer_1.Token.FLOATLITERAL:\r\n return ast_1.Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case tokenizer_1.Token.SLASH:\r\n var regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(tokenizer_1.Token.SLASH)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"/\");\r\n return null;\r\n }\r\n return ast_1.Node.createRegexpLiteralExpression(regexpPattern, tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos));\r\n case tokenizer_1.Token.FUNCTION:\r\n return this.parseFunctionExpression(tn);\r\n default:\r\n this.error(diagnostics_1.DiagnosticCode.Expression_expected, tn.range());\r\n return null;\r\n }\r\n };\r\n Parser.prototype.tryParseTypeArgumentsBeforeArguments = function (tn) {\r\n // at '<': Type (',' Type)* '>' '('\r\n tn.mark();\r\n if (!tn.skip(tokenizer_1.Token.LESSTHAN))\r\n return null;\r\n var typeArguments = new Array();\r\n do {\r\n var type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset();\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n if (tn.skip(tokenizer_1.Token.GREATERTHAN) && tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset();\r\n return null;\r\n };\r\n Parser.prototype.parseArguments = function (tn) {\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n var args = new Array();\r\n if (!tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n do {\r\n var expr = this.parseExpression(tn, 0 /* COMMA */ + 1);\r\n if (!expr)\r\n return null;\r\n args.push(expr);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n if (!tn.skip(tokenizer_1.Token.CLOSEPAREN)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \")\");\r\n return null;\r\n }\r\n }\r\n return args;\r\n };\r\n Parser.prototype.parseExpression = function (tn, precedence) {\r\n if (precedence === void 0) { precedence = 0; }\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr)\r\n return null;\r\n var startPos = expr.range.start;\r\n // CallExpression\r\n var typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn); // skips '(' on success\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n if (typeArguments || tn.skip(tokenizer_1.Token.OPENPAREN)) {\r\n var args = this.parseArguments(tn);\r\n if (!args)\r\n return null;\r\n expr = ast_1.Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos));\r\n }\r\n var token;\r\n var next = null;\r\n var nextPrecedence;\r\n while ((nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence) {\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case tokenizer_1.Token.AS:\r\n var toType = this.parseType(tn);\r\n if (!toType)\r\n return null;\r\n expr = ast_1.Node.createAssertionExpression(1 /* AS */, expr, toType, tn.range(startPos, tn.pos));\r\n break;\r\n // ElementAccessExpression\r\n case tokenizer_1.Token.OPENBRACKET:\r\n next = this.parseExpression(tn);\r\n if (!next)\r\n return null;\r\n if (!tn.skip(tokenizer_1.Token.CLOSEBRACKET)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \"]\");\r\n return null;\r\n }\r\n expr = ast_1.Node.createElementAccessExpression(expr, next, tn.range(startPos, tn.pos));\r\n break;\r\n // UnaryPostfixExpression\r\n case tokenizer_1.Token.PLUS_PLUS:\r\n case tokenizer_1.Token.MINUS_MINUS:\r\n if (expr.kind != ast_1.NodeKind.IDENTIFIER &&\r\n expr.kind != ast_1.NodeKind.ELEMENTACCESS &&\r\n expr.kind != ast_1.NodeKind.PROPERTYACCESS) {\r\n this.error(diagnostics_1.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access, expr.range);\r\n }\r\n expr = ast_1.Node.createUnaryPostfixExpression(token, expr, tn.range(startPos, tn.pos));\r\n break;\r\n // TernaryExpression\r\n case tokenizer_1.Token.QUESTION:\r\n var ifThen = this.parseExpression(tn);\r\n if (!ifThen)\r\n return null;\r\n if (!tn.skip(tokenizer_1.Token.COLON)) {\r\n this.error(diagnostics_1.DiagnosticCode._0_expected, tn.range(), \":\");\r\n return null;\r\n }\r\n var ifElse = this.parseExpression(tn);\r\n if (!ifElse)\r\n return null;\r\n expr = ast_1.Node.createTernaryExpression(expr, ifThen, ifElse, tn.range(startPos, tn.pos));\r\n break;\r\n // CommaExpression\r\n case tokenizer_1.Token.COMMA:\r\n var commaExprs = [expr];\r\n do {\r\n expr = this.parseExpression(tn, 0 /* COMMA */ + 1);\r\n if (!expr)\r\n return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(tokenizer_1.Token.COMMA));\r\n expr = ast_1.Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n default:\r\n next = this.parseExpression(tn, isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1);\r\n if (!next)\r\n return null;\r\n // PropertyAccessExpression\r\n if (token == tokenizer_1.Token.DOT) {\r\n if (next.kind == ast_1.NodeKind.IDENTIFIER) {\r\n expr = ast_1.Node.createPropertyAccessExpression(expr, next, tn.range(startPos, tn.pos));\r\n }\r\n else if (next.kind == ast_1.NodeKind.CALL) {\r\n var propertyCall = next;\r\n if (propertyCall.expression.kind == ast_1.NodeKind.IDENTIFIER) {\r\n propertyCall.expression = ast_1.Node.createPropertyAccessExpression(expr, propertyCall.expression, tn.range(startPos, tn.pos));\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, propertyCall.expression.range);\r\n return null;\r\n }\r\n expr = propertyCall;\r\n }\r\n else {\r\n this.error(diagnostics_1.DiagnosticCode.Identifier_expected, next.range);\r\n return null;\r\n }\r\n // BinaryExpression\r\n }\r\n else {\r\n expr = ast_1.Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n };\r\n return Parser;\r\n}(diagnostics_1.DiagnosticEmitter));\r\nexports.Parser = Parser;\r\n/** Operator precedence from least to largest. */\r\nvar Precedence;\r\n(function (Precedence) {\r\n Precedence[Precedence[\"COMMA\"] = 0] = \"COMMA\";\r\n Precedence[Precedence[\"SPREAD\"] = 1] = \"SPREAD\";\r\n Precedence[Precedence[\"YIELD\"] = 2] = \"YIELD\";\r\n Precedence[Precedence[\"ASSIGNMENT\"] = 3] = \"ASSIGNMENT\";\r\n Precedence[Precedence[\"CONDITIONAL\"] = 4] = \"CONDITIONAL\";\r\n Precedence[Precedence[\"LOGICAL_OR\"] = 5] = \"LOGICAL_OR\";\r\n Precedence[Precedence[\"LOGICAL_AND\"] = 6] = \"LOGICAL_AND\";\r\n Precedence[Precedence[\"BITWISE_OR\"] = 7] = \"BITWISE_OR\";\r\n Precedence[Precedence[\"BITWISE_XOR\"] = 8] = \"BITWISE_XOR\";\r\n Precedence[Precedence[\"BITWISE_AND\"] = 9] = \"BITWISE_AND\";\r\n Precedence[Precedence[\"EQUALITY\"] = 10] = \"EQUALITY\";\r\n Precedence[Precedence[\"RELATIONAL\"] = 11] = \"RELATIONAL\";\r\n Precedence[Precedence[\"SHIFT\"] = 12] = \"SHIFT\";\r\n Precedence[Precedence[\"ADDITIVE\"] = 13] = \"ADDITIVE\";\r\n Precedence[Precedence[\"MULTIPLICATIVE\"] = 14] = \"MULTIPLICATIVE\";\r\n Precedence[Precedence[\"EXPONENTIATED\"] = 15] = \"EXPONENTIATED\";\r\n Precedence[Precedence[\"UNARY_PREFIX\"] = 16] = \"UNARY_PREFIX\";\r\n Precedence[Precedence[\"UNARY_POSTFIX\"] = 17] = \"UNARY_POSTFIX\";\r\n Precedence[Precedence[\"CALL\"] = 18] = \"CALL\";\r\n Precedence[Precedence[\"MEMBERACCESS\"] = 19] = \"MEMBERACCESS\";\r\n Precedence[Precedence[\"GROUPING\"] = 20] = \"GROUPING\";\r\n Precedence[Precedence[\"INVALID\"] = -1] = \"INVALID\";\r\n})(Precedence = exports.Precedence || (exports.Precedence = {}));\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind) {\r\n switch (kind) {\r\n case tokenizer_1.Token.DOT_DOT_DOT:\r\n return 1 /* SPREAD */;\r\n case tokenizer_1.Token.YIELD:\r\n return 2 /* YIELD */;\r\n case tokenizer_1.Token.EXCLAMATION:\r\n case tokenizer_1.Token.TILDE:\r\n case tokenizer_1.Token.PLUS:\r\n case tokenizer_1.Token.MINUS:\r\n case tokenizer_1.Token.PLUS_PLUS:\r\n case tokenizer_1.Token.MINUS_MINUS:\r\n case tokenizer_1.Token.TYPEOF:\r\n case tokenizer_1.Token.VOID:\r\n case tokenizer_1.Token.DELETE:\r\n return 16 /* UNARY_PREFIX */;\r\n case tokenizer_1.Token.NEW:\r\n return 19 /* MEMBERACCESS */;\r\n default:\r\n return -1 /* INVALID */;\r\n }\r\n}\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind) {\r\n switch (kind) {\r\n case tokenizer_1.Token.COMMA:\r\n return 0 /* COMMA */;\r\n case tokenizer_1.Token.EQUALS:\r\n case tokenizer_1.Token.PLUS_EQUALS:\r\n case tokenizer_1.Token.MINUS_EQUALS:\r\n case tokenizer_1.Token.ASTERISK_ASTERISK_EQUALS:\r\n case tokenizer_1.Token.ASTERISK_EQUALS:\r\n case tokenizer_1.Token.SLASH_EQUALS:\r\n case tokenizer_1.Token.PERCENT_EQUALS:\r\n case tokenizer_1.Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case tokenizer_1.Token.AMPERSAND_EQUALS:\r\n case tokenizer_1.Token.CARET_EQUALS:\r\n case tokenizer_1.Token.BAR_EQUALS:\r\n return 3 /* ASSIGNMENT */;\r\n case tokenizer_1.Token.QUESTION:\r\n return 4 /* CONDITIONAL */;\r\n case tokenizer_1.Token.BAR_BAR:\r\n return 5 /* LOGICAL_OR */;\r\n case tokenizer_1.Token.AMPERSAND_AMPERSAND:\r\n return 6 /* LOGICAL_AND */;\r\n case tokenizer_1.Token.BAR:\r\n return 7 /* BITWISE_OR */;\r\n case tokenizer_1.Token.CARET:\r\n return 8 /* BITWISE_XOR */;\r\n case tokenizer_1.Token.AMPERSAND:\r\n return 9 /* BITWISE_AND */;\r\n case tokenizer_1.Token.EQUALS_EQUALS:\r\n case tokenizer_1.Token.EXCLAMATION_EQUALS:\r\n case tokenizer_1.Token.EQUALS_EQUALS_EQUALS:\r\n case tokenizer_1.Token.EXCLAMATION_EQUALS_EQUALS:\r\n return 10 /* EQUALITY */;\r\n case tokenizer_1.Token.AS:\r\n case tokenizer_1.Token.IN:\r\n case tokenizer_1.Token.INSTANCEOF:\r\n case tokenizer_1.Token.LESSTHAN:\r\n case tokenizer_1.Token.GREATERTHAN:\r\n case tokenizer_1.Token.LESSTHAN_EQUALS:\r\n case tokenizer_1.Token.GREATERTHAN_EQUALS:\r\n return 11 /* RELATIONAL */;\r\n case tokenizer_1.Token.LESSTHAN_LESSTHAN:\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN:\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n return 12 /* SHIFT */;\r\n case tokenizer_1.Token.PLUS:\r\n case tokenizer_1.Token.MINUS:\r\n return 13 /* ADDITIVE */;\r\n case tokenizer_1.Token.ASTERISK:\r\n case tokenizer_1.Token.SLASH:\r\n case tokenizer_1.Token.PERCENT:\r\n return 14 /* MULTIPLICATIVE */;\r\n case tokenizer_1.Token.ASTERISK_ASTERISK:\r\n return 15 /* EXPONENTIATED */;\r\n case tokenizer_1.Token.PLUS_PLUS:\r\n case tokenizer_1.Token.MINUS_MINUS:\r\n return 17 /* UNARY_POSTFIX */;\r\n case tokenizer_1.Token.DOT:\r\n case tokenizer_1.Token.NEW:\r\n case tokenizer_1.Token.OPENBRACKET:\r\n return 19 /* MEMBERACCESS */;\r\n default:\r\n return -1 /* INVALID */;\r\n }\r\n}\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind) {\r\n switch (kind) {\r\n case tokenizer_1.Token.EQUALS:\r\n case tokenizer_1.Token.PLUS_EQUALS:\r\n case tokenizer_1.Token.MINUS_EQUALS:\r\n case tokenizer_1.Token.ASTERISK_ASTERISK_EQUALS:\r\n case tokenizer_1.Token.ASTERISK_EQUALS:\r\n case tokenizer_1.Token.SLASH_EQUALS:\r\n case tokenizer_1.Token.PERCENT_EQUALS:\r\n case tokenizer_1.Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case tokenizer_1.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case tokenizer_1.Token.AMPERSAND_EQUALS:\r\n case tokenizer_1.Token.CARET_EQUALS:\r\n case tokenizer_1.Token.BAR_EQUALS:\r\n case tokenizer_1.Token.QUESTION:\r\n case tokenizer_1.Token.ASTERISK_ASTERISK:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// assemblyscript.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 2814b8b5f549cb891410","import {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64()\r\n\r\n // see: https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md#new-sign-extending-operators\r\n // ExtendI8ToI32 =_BinaryenExtendS8Int32()\r\n // ExtendI16ToI32 = _BinaryenExtendS16Int32()\r\n // ExtendI8ToI64 = _BinaryenExtendS8Int64() // operand is I64\r\n // ExtendI16ToI64 = _BinaryenExtendS16Int64()\r\n // ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64) {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n out: usize;\r\n\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n // TODO: static readonly MAX_MEMORY_WASM64\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.out = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.out = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[]\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes.length);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[]\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocI32Array(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var strs = new Array(names.length);\r\n for (var i = 0, k: i32 = names.length; i < k; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, k, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (i = k - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[],\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes.length, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var buffer = segments[i].buffer;\r\n var offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocI32Array(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var k = passes.length;\r\n var names = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, k);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, k);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (; i >= 0; --i) free_memory(names[i]);\r\n }\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): Binary {\r\n var out = this.out;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n var binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n var ret = new Binary();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n if (!this.ref) return; // sic\r\n _BinaryenModuleDispose(this.ref);\r\n free_memory(this.out);\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n\r\n case ExpressionId.Const:\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n case NativeType.I64:\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n case NativeType.F32:\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n case NativeType.F64:\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n\r\n case ExpressionId.GetLocal:\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n\r\n case ExpressionId.GetGlobal:\r\n var globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n\r\n case ExpressionId.Load:\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n );\r\n\r\n case ExpressionId.Unary:\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n\r\n case ExpressionId.Binary:\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n static createStub(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = 0;\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var ptr = allocate_memory(u8s.length);\r\n var idx = ptr;\r\n for (var i = 0, k = u8s.length; i < k; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (var i = 0, k = i32s.length; i < k; ++i) {\r\n var val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (var i = 0, k = str.length; i < k; ++i) {\r\n var u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n var idx = ptr;\r\n for (var i = 0, k = str.length; i < k; ++i) {\r\n var u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nexport function readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nexport function readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (var i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nclass Binary {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/module.ts","import {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util/charcode\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nexport enum DiagnosticCategory {\r\n INFO,\r\n WARNING,\r\n ERROR\r\n}\r\n\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: return \"\";\r\n }\r\n}\r\n\r\nconst colorBlue: string = \"\\u001b[93m\";\r\nconst colorYellow: string = \"\\u001b[93m\";\r\nconst colorRed: string = \"\\u001b[91m\";\r\nconst colorReset: string = \"\\u001b[0m\";\r\n\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return colorBlue;\r\n case DiagnosticCategory.WARNING: return colorYellow;\r\n case DiagnosticCategory.ERROR: return colorRed;\r\n default: return \"\";\r\n }\r\n}\r\n\r\nexport class DiagnosticMessage {\r\n\r\n code: i32;\r\n category: DiagnosticCategory;\r\n message: string;\r\n range: Range | null = null;\r\n\r\n constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \" @ \" +\r\n this.range.start.toString(10) +\r\n \",\" +\r\n this.range.end.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n // format context first (uses same string builder)\r\n var context = \"\";\r\n if (message.range && showContext) {\r\n context = formatDiagnosticContext(message.range, useColors);\r\n }\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(colorReset);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // range information if available\r\n if (message.range) {\r\n var range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(context);\r\n }\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) {\r\n start--;\r\n }\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) {\r\n end++;\r\n }\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(colorRed);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) {\r\n sb.push(\"~\");\r\n }\r\n }\r\n if (useColors) sb.push(colorReset);\r\n return sb.join(\"\");\r\n}\r\n\r\nexport abstract class DiagnosticEmitter {\r\n\r\n diagnostics: DiagnosticMessage[];\r\n // silentDiagnostics: bool = false;\r\n\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ) {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/diagnostics.ts","import {\r\n Options\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n ModifierKind,\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n TypeNode,\r\n TypeParameter,\r\n Decorator,\r\n DecoratorKind,\r\n\r\n Expression,\r\n AssertionExpression,\r\n ElementAccessExpression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n StringLiteralExpression,\r\n CallExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n hasDecorator,\r\n hasModifier\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n} from \"./module\";\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"(lib)\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n\r\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Diagnostic offset used where repeatedly obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n /** Elements by internal name. */\r\n elements: Map = new Map();\r\n /** Types by internal name. */\r\n types: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** Exports of individual files by exported name. Not global exports. */\r\n exports: Map = new Map();\r\n\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.sources = [];\r\n }\r\n\r\n /** Initializes the program and its elements prior to compilation. */\r\n initialize(options: Options): void {\r\n this.options = options;\r\n\r\n this.types = new Map([\r\n [\"i8\", Type.i8],\r\n [\"i16\", Type.i16],\r\n [\"i32\", Type.i32],\r\n [\"i64\", Type.i64],\r\n [\"isize\", options.isizeType],\r\n [\"u8\", Type.u8],\r\n [\"u16\", Type.u16],\r\n [\"u32\", Type.u32],\r\n [\"u64\", Type.u64],\r\n [\"usize\", options.usizeType],\r\n [\"bool\", Type.bool],\r\n [\"f32\", Type.f32],\r\n [\"f64\", Type.f64],\r\n [\"void\", Type.void],\r\n [\"number\", Type.f64],\r\n [\"boolean\", Type.bool]\r\n ]);\r\n\r\n var queuedExports = new Map();\r\n var queuedImports = new Array();\r\n var queuedDerivedClasses = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (var i = 0, k = this.sources.length; i < k; ++i) {\r\n var source = this.sources[i];\r\n var statements = source.statements;\r\n for (var j = 0, l = statements.length; j < l; ++j) {\r\n var statement = statements[j];\r\n switch (statement.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n this.initializeClass(\r\n statement,\r\n queuedDerivedClasses\r\n );\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n this.initializeEnum(statement);\r\n break;\r\n\r\n case NodeKind.EXPORT:\r\n this.initializeExports(\r\n statement,\r\n queuedExports\r\n );\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n this.initializeFunction(statement);\r\n break;\r\n\r\n case NodeKind.IMPORT:\r\n this.initializeImports(\r\n statement,\r\n queuedExports,\r\n queuedImports\r\n );\r\n break;\r\n\r\n case NodeKind.INTERFACEDECLARATION:\r\n this.initializeInterface(statement);\r\n break;\r\n\r\n case NodeKind.NAMESPACEDECLARATION:\r\n this.initializeNamespace(\r\n statement,\r\n queuedDerivedClasses\r\n );\r\n break;\r\n\r\n case NodeKind.TYPEDECLARATION:\r\n this.initializeTypeAlias(statement);\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n var element: Element | null;\r\n\r\n // queued imports should be resolvable now through traversing exports and\r\n // queued exports\r\n for (i = 0; i < queuedImports.length;) {\r\n var queuedImport = queuedImports[i];\r\n element = this.tryResolveImport(\r\n queuedImport.referencedName,\r\n queuedExports\r\n );\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n element = this.tryResolveImport(\r\n queuedImport.referencedNameAlt,\r\n queuedExports\r\n );\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedImport.declaration.range,\r\n (queuedImport.declaration.parent).path.value,\r\n queuedImport.declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n }\r\n\r\n // queued exports should be resolvable now that imports are finalized\r\n for (var [exportName, queuedExport] of queuedExports) {\r\n var currentExport: QueuedExport | null = queuedExport; // nullable below\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.exports.get(currentExport.referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.referencedName);\r\n if (!currentExport) {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedExport.member.externalName.range,\r\n ((\r\n queuedExport.member.parent\r\n ).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.elements.get(currentExport.referencedName)) ||\r\n // library re-export\r\n (element = this.elements.get(currentExport.member.name.text))\r\n ) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n for (i = 0, k = queuedDerivedClasses.length; i < k; ++i) {\r\n var derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n var derivedType = assert(derivedDeclaration.extendsType);\r\n var resolved = this.resolveIdentifier(derivedType.name, null);\r\n if (resolved) {\r\n if (resolved.element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n continue;\r\n }\r\n queuedDerivedClasses[i].basePrototype = (\r\n resolved.element\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Tries to resolve an import by traversing exports and queued exports. */\r\n private tryResolveImport(\r\n referencedName: string,\r\n queuedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n do {\r\n if (element = this.exports.get(referencedName)) {\r\n return element;\r\n }\r\n var queuedExport = queuedExports.get(referencedName);\r\n if (!queuedExport) return null;\r\n if (queuedExport.isReExport) {\r\n referencedName = queuedExport.referencedName;\r\n continue;\r\n }\r\n return this.elements.get(queuedExport.referencedName);\r\n } while (true);\r\n }\r\n\r\n private checkInternalDecorators(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var isBuiltin: bool = hasDecorator(\"builtin\", declaration.decorators);\r\n if (isBuiltin) {\r\n element.set(ElementFlags.BUILTIN);\r\n }\r\n if (\r\n hasDecorator(\"global\", declaration.decorators) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(ElementFlags.EXPORTED) &&\r\n (\r\n assert(declaration.parent).kind == NodeKind.SOURCE ||\r\n (\r\n declaration.parent).kind == NodeKind.VARIABLE &&\r\n assert((declaration.parent).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n element.set(ElementFlags.GLOBAL);\r\n if (this.elements.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elements.set(declaration.name.text, element);\r\n this.exports.set(declaration.name.text, element);\r\n if (isBuiltin) {\r\n element.internalName = declaration.name.text;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedDerivedClasses: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var prototype = new ClassPrototype(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration\r\n );\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (hasDecorator(\"unmanaged\", declaration.decorators)) {\r\n prototype.isUnmanaged = true;\r\n if (declaration.implementsTypes && declaration.implementsTypes.length) {\r\n this.error(\r\n DiagnosticCode.Structs_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n declaration.implementsTypes[declaration.implementsTypes.length - 1]\r\n .range\r\n )\r\n );\r\n }\r\n } else if (declaration.implementsTypes.length) {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) {\r\n queuedDerivedClasses.push(prototype);\r\n }\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, prototype);\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION:\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n\r\n case NodeKind.METHODDECLARATION:\r\n var isGetter = hasModifier(\r\n ModifierKind.GET,\r\n memberDeclaration.modifiers\r\n );\r\n if (\r\n isGetter ||\r\n hasModifier(ModifierKind.SET, memberDeclaration.modifiers)\r\n ) {\r\n this.initializeAccessor(\r\n memberDeclaration,\r\n prototype,\r\n isGetter\r\n );\r\n } else {\r\n this.initializeMethod(\r\n memberDeclaration,\r\n prototype\r\n );\r\n }\r\n break;\r\n\r\n default:\r\n throw new Error(\"class member expected\");\r\n }\r\n }\r\n\r\n // check and possibly register string type\r\n if (\r\n prototype.is(ElementFlags.GLOBAL) &&\r\n declaration.name.text == \"String\"\r\n ) {\r\n if (!this.types.has(\"string\")) {\r\n var instance = prototype.resolve(null);\r\n if (instance) {\r\n this.types.set(\"string\", instance.type);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n }\r\n }\r\n }\r\n\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n\r\n // static fields become global variables\r\n if (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n var staticField = new Global(\r\n this, name, internalName, declaration, Type.void\r\n );\r\n classPrototype.members.set(name, staticField);\r\n this.elements.set(internalName, staticField);\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n var instanceField = new FieldPrototype(\r\n classPrototype,\r\n name, internalName,\r\n declaration\r\n );\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n // static methods become global functions\r\n if (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n name, internalName,\r\n declaration,\r\n null\r\n );\r\n classPrototype.members.set(name, prototype);\r\n this.elements.set(internalName, prototype);\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n name, internalName,\r\n declaration,\r\n classPrototype\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(ElementFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(name, prototype);\r\n }\r\n }\r\n\r\n this.checkOperators(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperators(\r\n decorators: Decorator[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ) {\r\n // handle operator annotations. operators are either instance methods taking\r\n // a second argument of the instance's type or static methods taking two\r\n // arguments of the instance's type. return values vary depending on the\r\n // operation.\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n var decorator = decorators[i];\r\n if (decorator.decoratorKind == DecoratorKind.OPERATOR) {\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n continue;\r\n }\r\n var numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n var firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n switch ((firstArg).value) {\r\n\r\n case \"[]\":\r\n classPrototype.fnIndexedGet = prototype.simpleName;\r\n break;\r\n\r\n case \"[]=\":\r\n classPrototype.fnIndexedSet = prototype.simpleName;\r\n break;\r\n\r\n case \"+\":\r\n classPrototype.fnConcat = prototype.simpleName;\r\n break;\r\n\r\n case \"==\":\r\n classPrototype.fnEquals = prototype.simpleName;\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n } else if (decorator.decoratorKind != DecoratorKind.CUSTOM) {\r\n // methods support built-in @operator only\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype,\r\n isGetter: bool\r\n ): void {\r\n var propertyName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n\r\n var propertyElement = this.elements.get(internalPropertyName);\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n propertyName, internalPropertyName,\r\n classPrototype\r\n );\r\n }\r\n\r\n var name = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + propertyName;\r\n\r\n // static accessors become global functions\r\n if (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n var staticName = classPrototype.internalName + STATIC_DELIMITER + name;\r\n if (this.elements.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n var staticPrototype = new FunctionPrototype(\r\n this,\r\n name, staticName,\r\n declaration,\r\n null\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (!classPrototype.members) {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(propertyName, propertyElement); // check above\r\n this.elements.set(internalPropertyName, propertyElement);\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n var instanceName = classPrototype.internalName + INSTANCE_DELIMITER + name;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n var instancePrototype = new FunctionPrototype(\r\n this,\r\n name, instanceName,\r\n declaration,\r\n classPrototype\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(name, propertyElement);\r\n this.elements.set(internalPropertyName, propertyElement);\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var enm = new Enum(this, declaration.name.text, internalName, declaration);\r\n enm.namespace = namespace;\r\n this.elements.set(internalName, enm);\r\n\r\n this.checkInternalDecorators(enm, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, enm);\r\n } else if (enm.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, enm);\r\n }\r\n\r\n var values = declaration.values;\r\n for (var i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], enm);\r\n }\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n name: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n this.exports.set(name, element);\r\n if (identifier.range.source.isLibrary) { // add global alias\r\n if (this.elements.has(identifier.text)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n identifier.range, identifier.text\r\n );\r\n } else {\r\n element.internalName = identifier.text;\r\n this.elements.set(identifier.text, element);\r\n }\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.exports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elements.get(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.referencedName = referencedName; // -> internal name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elements.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n var seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.exports.get(queuedExport.referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.referencedName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elements.get(queuedExport.referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.referencedName = referencedName; // -> export name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var prototype = new FunctionPrototype(\r\n this,\r\n declaration.name.text, internalName,\r\n declaration,\r\n null\r\n );\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, prototype);\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) {\r\n var internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n statement.namespaceName.text\r\n );\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n this.error( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var referencedName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.exports.get(referencedName)) {\r\n this.elements.set(internalName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n var indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.internalName = internalName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration;\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var prototype = new InterfacePrototype(this, declaration.name.text, internalName, declaration);\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION:\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n\r\n case NodeKind.METHODDECLARATION:\r\n var isGetter = hasModifier(ModifierKind.GET, memberDeclaration.modifiers);\r\n if (isGetter || hasModifier(ModifierKind.SET, memberDeclaration.modifiers)) {\r\n this.initializeAccessor(memberDeclaration, prototype, isGetter);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n\r\n default:\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtendingClasses: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n\r\n var namespace = this.elements.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, declaration.name.text, internalName, declaration);\r\n namespace.namespace = parentNamespace;\r\n this.elements.set(internalName, namespace);\r\n this.checkInternalDecorators(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(declaration.name.text, namespace);\r\n } else if (namespace.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, namespace);\r\n }\r\n\r\n var members = declaration.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n this.initializeClass(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n\r\n case NodeKind.INTERFACEDECLARATION:\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n\r\n case NodeKind.NAMESPACEDECLARATION:\r\n this.initializeNamespace(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n\r\n case NodeKind.TYPEDECLARATION:\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n\r\n default:\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.types.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n this.typeAliases.set(name, declaration.alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n\r\n var global = new Global(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration,\r\n Type.void // resolved later on\r\n );\r\n global.namespace = namespace;\r\n this.elements.set(internalName, global);\r\n\r\n this.checkInternalDecorators(global, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, global);\r\n } else if (global.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.exports.set(internalName, global);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Resolves a {@link TypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: TypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n var globalName = node.name.text;\r\n var localName = node.range.source.internalPath + PATH_DELIMITER + node.name.text;\r\n\r\n var element: Element | null;\r\n\r\n // check file-global / program-global element\r\n if ((element = this.elements.get(localName)) || (element = this.elements.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n var instance = (element).resolveInclTypeArguments(\r\n node.typeArguments,\r\n contextualTypeArguments,\r\n null\r\n ); // reports\r\n return instance ? instance.type : null;\r\n }\r\n }\r\n\r\n // resolve parameters\r\n var k = node.typeArguments.length;\r\n var paramTypes = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var paramType = this.resolveType( // reports\r\n node.typeArguments[i],\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n\r\n if (k) { // can't be a placeholder if it has parameters\r\n var instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n var placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n\r\n var type: Type | null;\r\n\r\n // check file-global / program-global type\r\n if ((type = this.types.get(localName)) || (type = this.types.get(globalName))) {\r\n return type;\r\n }\r\n\r\n // check type alias\r\n var alias = this.typeAliases.get(globalName);\r\n if (alias && (type = this.resolveType(alias, null, reportNotFound))) {\r\n return type;\r\n }\r\n\r\n if (reportNotFound) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n node.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type parameters to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameter[],\r\n typeArgumentNodes: TypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (var i = 0; i < parameterCount; ++i) {\r\n var type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n contextualFunction: Function | null,\r\n contextualEnum: Enum | null = null\r\n ): ResolvedElement | null {\r\n var name = identifier.text;\r\n\r\n var element: Element | null;\r\n var namespace: Element | null;\r\n\r\n // check siblings\r\n if (contextualEnum) {\r\n\r\n if (\r\n contextualEnum.members &&\r\n (element = contextualEnum.members.get(name)) &&\r\n element.kind == ElementKind.ENUMVALUE\r\n ) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n } else if (contextualFunction) {\r\n\r\n // check locals\r\n if (element = contextualFunction.flow.getScopedLocal(name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.namespace) {\r\n do {\r\n if (element = this.elements.get(namespace.internalName + STATIC_DELIMITER + name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n } while (namespace = namespace.namespace);\r\n }\r\n }\r\n\r\n // search current file\r\n if (element = this.elements.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n // search global scope\r\n if (element = this.elements.get(name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function\r\n ): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n resolvedElement = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n var targetType: Type;\r\n var member: Element | null;\r\n\r\n // Resolve variable-likes to their class type first\r\n switch (target.kind) {\r\n\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n if (!(targetType = (target).type).classType) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, targetType.toString()\r\n );\r\n return null;\r\n }\r\n target = targetType.classType;\r\n break;\r\n\r\n case ElementKind.PROPERTY:\r\n var getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n if (!(targetType = getter.returnType).classType) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, targetType.toString()\r\n );\r\n return null;\r\n }\r\n target = targetType.classType;\r\n break;\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS:\r\n do {\r\n if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n // check inherited static members on the base prototype while target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // or inherited instance members on the cbase class while target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n\r\n default: // enums or other namespace-like elements\r\n if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(elementAccess: ElementAccessExpression, contextualFunction: Function): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = elementAccess.expression;\r\n resolvedElement = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\r\n switch (target.kind) {\r\n\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n var type = (target).type;\r\n if (type.classType) {\r\n var indexedGetName = (target = type.classType).prototype.fnIndexedGet;\r\n var indexedGet: Element | null;\r\n if (\r\n indexedGetName != null &&\r\n target.members &&\r\n (indexedGet = target.members.get(indexedGetName)) &&\r\n indexedGet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n return resolvedElement.set(indexedGet).withTarget(type.classType, targetExpression);\r\n }\r\n }\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(expression: Expression, contextualFunction: Function): ResolvedElement | null {\r\n var classType: Class | null;\r\n\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n\r\n switch (expression.kind) {\r\n\r\n case NodeKind.ASSERTION:\r\n var type = this.resolveType((expression).toType); // reports\r\n if (type && (classType = type.classType)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n return null;\r\n\r\n case NodeKind.BINARY:\r\n // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n\r\n case NodeKind.THIS: // -> Class\r\n if (classType = contextualFunction.instanceMethodOf) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n return null;\r\n\r\n case NodeKind.SUPER: // -> Class\r\n if ((classType = contextualFunction.instanceMethodOf) && (classType = classType.base)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n return null;\r\n\r\n case NodeKind.IDENTIFIER:\r\n return this.resolveIdentifier(expression, contextualFunction);\r\n\r\n case NodeKind.PROPERTYACCESS:\r\n return this.resolvePropertyAccess(expression, contextualFunction);\r\n\r\n case NodeKind.ELEMENTACCESS:\r\n return this.resolveElementAccess(expression, contextualFunction);\r\n\r\n case NodeKind.CALL:\r\n var resolved = this.resolveExpression((expression).expression, contextualFunction);\r\n if (resolved) {\r\n var element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = (element).resolveInclTypeArguments(\r\n (expression).typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance && instance.returnType.classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(instance.returnType.classType);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n}\r\n\r\n/** Common result structure returned when calling any of the resolve functions on a {@link Program}. */\r\nexport class ResolvedElement {\r\n\r\n /** The target element, if a property or element access */\r\n target: Element | null;\r\n /** The target element's expression, if a property or element access. */\r\n targetExpression: Expression | null;\r\n /** The element being accessed. */\r\n element: Element;\r\n\r\n /** Clears the target and sets the resolved element. */\r\n set(element: Element): this {\r\n this.target = null;\r\n this.targetExpression = null;\r\n this.element = element;\r\n return this;\r\n }\r\n\r\n /** Sets the resolved target in addition to the previously set element. */\r\n withTarget(target: Element, targetExpression: Expression): this {\r\n this.target = target;\r\n this.targetExpression = targetExpression;\r\n return this;\r\n }\r\n}\r\n\r\n// Cached result structure instance\r\nvar resolvedElement: ResolvedElement | null;\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE\r\n}\r\n\r\n/** Indicates traits of an {@link Element}. */\r\nexport enum ElementFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is compiled. */\r\n COMPILED = 1 << 0,\r\n /** Is an import. */\r\n IMPORTED = 1 << 1,\r\n /** Is an export. */\r\n EXPORTED = 1 << 2,\r\n /** Is built-in. */\r\n BUILTIN = 1 << 3,\r\n /** Is declared. */\r\n DECLARED = 1 << 4,\r\n /** Is generic. */\r\n GENERIC = 1 << 5,\r\n /** Is constant. */\r\n CONSTANT = 1 << 6,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 7,\r\n /** Is instance member. */\r\n INSTANCE = 1 << 8,\r\n /** Is getter. */\r\n GETTER = 1 << 9,\r\n /** Is setter. */\r\n SETTER = 1 << 10,\r\n /** Is global. */\r\n GLOBAL = 1 << 11,\r\n /** Is read-only. */\r\n READONLY = 1 << 12,\r\n /** Is a public member. */\r\n PUBLIC = 1 << 13,\r\n /** Is a protected member. */\r\n PROTECTED = 1 << 14,\r\n /** Is a private member. */\r\n PRIVATE = 1 << 15,\r\n /** Is an abstract member. */\r\n ABSTRACT = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an unmanaged class with limited capabilites. */\r\n UNMANAGED = 1 << 18,\r\n /** Is scoped. */\r\n SCOPED = 1 << 19,\r\n /** Is the start function. */\r\n START = 1 << 20\r\n}\r\n\r\n/** Base class of all program elements. */\r\nexport abstract class Element {\r\n\r\n /** Specific element kind. */\r\n kind: ElementKind;\r\n /** Containing {@link Program}. */\r\n program: Program;\r\n /** Simple name. */\r\n simpleName: string;\r\n /** Internal name referring to this element. */\r\n internalName: string;\r\n /** Element flags. */\r\n flags: ElementFlags = ElementFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent namespace, if applicable. */\r\n namespace: Element | null = null;\r\n\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n protected constructor(program: Program, simpleName: string, internalName: string) {\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n\r\n /** Tests if this element has a specific flag or flags. */\r\n is(flag: ElementFlags): bool { return (this.flags & flag) == flag; }\r\n\r\n /** Sets a specific flag or flags. */\r\n set(flag: ElementFlags): void { this.flags |= flag; }\r\n}\r\n\r\n/** A namespace. */\r\nexport class Namespace extends Element {\r\n\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n kind = ElementKind.NAMESPACE;\r\n\r\n /** Declaration reference. */\r\n declaration: NamespaceDeclaration; // more specific\r\n\r\n /** Constructs a new namespace. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: NamespaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** An enum. */\r\nexport class Enum extends Element {\r\n\r\n kind = ElementKind.ENUM;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumDeclaration;\r\n\r\n /** Constructs a new enum. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n case ModifierKind.CONST: this.set(ElementFlags.CONSTANT); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** An enum value. */\r\nexport class EnumValue extends Element {\r\n\r\n kind = ElementKind.ENUMVALUE;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumValueDeclaration;\r\n /** Parent enum. */\r\n enum: Enum;\r\n /** Constant value, if applicable. */\r\n constantValue: i32 = 0;\r\n\r\n constructor(\r\n enm: Enum,\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumValueDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.enum = enm;\r\n this.declaration = declaration;\r\n }\r\n}\r\n\r\nexport const enum ConstantValueKind {\r\n NONE,\r\n INTEGER,\r\n FLOAT\r\n}\r\n\r\nexport class VariableLikeElement extends Element {\r\n\r\n // kind varies\r\n\r\n /** Declaration reference. */\r\n declaration: VariableLikeDeclarationStatement;\r\n /** Variable type. Is {@link Type.void} for type-inferred {@link Global}s before compilation. */\r\n type: Type;\r\n /** Constant value kind. */\r\n constantValueKind: ConstantValueKind = ConstantValueKind.NONE;\r\n /** Constant integer value, if applicable. */\r\n constantIntegerValue: I64;\r\n /** Constant float value, if applicable. */\r\n constantFloatValue: f64;\r\n\r\n withConstantIntegerValue(lo: i32, hi: i32): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = i64_new(lo, hi);\r\n this.set(ElementFlags.CONSTANT | ElementFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(ElementFlags.CONSTANT | ElementFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: VariableLikeDeclarationStatement,\r\n type: Type\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.IMPORT:\r\n this.set(ElementFlags.IMPORTED);\r\n break;\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.CONST:\r\n this.set(ElementFlags.CONSTANT);\r\n break;\r\n\r\n case ModifierKind.LET:\r\n this.set(ElementFlags.SCOPED);\r\n break;\r\n\r\n case ModifierKind.DECLARE:\r\n this.set(ElementFlags.DECLARED);\r\n break;\r\n\r\n case ModifierKind.READONLY:\r\n this.set(this.declaration.initializer\r\n ? ElementFlags.CONSTANT | ElementFlags.READONLY\r\n : ElementFlags.READONLY\r\n );\r\n break;\r\n\r\n case ModifierKind.PUBLIC:\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.STATIC:\r\n break; // static fields become globals\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n\r\n constructor(program: Program, simpleName: string, index: i32, type: Type) {\r\n super(program, simpleName, simpleName);\r\n this.index = index;\r\n this.type = type;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. */\r\n classTypeArguments: Type[] | null = null;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.IMPORT:\r\n this.set(ElementFlags.IMPORTED);\r\n break;\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.DECLARE:\r\n this.set(ElementFlags.DECLARED);\r\n break;\r\n\r\n case ModifierKind.GET:\r\n this.set(ElementFlags.GETTER);\r\n break;\r\n\r\n case ModifierKind.SET:\r\n this.set(ElementFlags.SETTER);\r\n break;\r\n\r\n case ModifierKind.STATIC:\r\n case ModifierKind.ABSTRACT:\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.PUBLIC:\r\n break; // already handled\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (this.declaration.isGeneric) {\r\n this.set(ElementFlags.GENERIC);\r\n }\r\n if (this.classPrototype = classPrototype) {\r\n this.set(ElementFlags.INSTANCE);\r\n }\r\n }\r\n\r\n resolve(\r\n functionTypeArguments: Type[] | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var instanceKey = functionTypeArguments ? typesToString(functionTypeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = this.declaration;\r\n\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (var [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var i: i32, k: i32;\r\n\r\n // inherit class type arguments if a partially resolved instance method (classTypeArguments is set)\r\n if (this.classTypeArguments) {\r\n if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n var classDeclaration = (this.classPrototype).declaration;\r\n var classTypeParameters = classDeclaration.typeParameters;\r\n if ((k = this.classTypeArguments.length) != classTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(classTypeParameters[i].name.text, this.classTypeArguments[i]);\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments\r\n var functionTypeParameters = declaration.typeParameters;\r\n if (functionTypeArguments && (k = functionTypeArguments.length)) {\r\n if (!functionTypeParameters || k != functionTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(functionTypeParameters[i].name.text, functionTypeArguments[i]);\r\n }\r\n }\r\n\r\n // resolve parameters\r\n // TODO: 'this' type\r\n k = declaration.parameters.length;\r\n var parameters = new Array(k);\r\n var parameterTypes = new Array(k);\r\n var typeNode: TypeNode | null;\r\n for (i = 0; i < k; ++i) {\r\n var parameterDeclaration = declaration.parameters[i];\r\n typeNode = assert(parameterDeclaration.type);\r\n var parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (parameterType) {\r\n parameters[i] = new Parameter(parameterDeclaration.name.text, parameterType, parameterDeclaration.initializer);\r\n parameterTypes[i] = parameterType;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n var classInstance: Class | null = null;\r\n if (this.classPrototype) {\r\n classInstance = this.classPrototype.resolve(this.classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n }\r\n\r\n // resolve return type\r\n // TODO: 'this' type\r\n var returnType: Type;\r\n if (this.is(ElementFlags.SETTER) || this.is(ElementFlags.CONSTRUCTOR)) {\r\n returnType = Type.void; // not annotated\r\n } else {\r\n typeNode = assert(declaration.returnType);\r\n var type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (type) {\r\n returnType = type;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n instance = new Function(this, internalName, functionTypeArguments, parameters, returnType, classInstance);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n return instance;\r\n }\r\n\r\n resolveInclTypeArguments(\r\n typeArgumentNodes: TypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(ElementFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(\r\n assert(this.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n resolvePartial(classTypeArguments: Type[] | null): FunctionPrototype | null {\r\n if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n if (classTypeArguments && classTypeArguments.length) {\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n this.simpleName,\r\n this.internalName,\r\n this.declaration,\r\n this.classPrototype\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n return this; // no need to clone\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Concrete type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Concrete function parameters. Excluding `this` if an instance method. */\r\n parameters: Parameter[] | null;\r\n /** Concrete return type. */\r\n returnType: Type;\r\n /** If an instance method, the concrete class it is a member of. */\r\n instanceMethodOf: Class | null;\r\n /** Map of locals by name. */\r\n locals: Map = new Map();\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] | null = null;\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n typeArguments: Type[] | null,\r\n parameters: Parameter[] | null,\r\n returnType: Type,\r\n instanceMethodOf: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.typeArguments = typeArguments;\r\n this.parameters = parameters || [];\r\n this.returnType = returnType;\r\n this.instanceMethodOf = instanceMethodOf;\r\n this.flags = prototype.flags;\r\n if (!(prototype.is(ElementFlags.BUILTIN) || prototype.is(ElementFlags.DECLARED))) {\r\n var localIndex = 0;\r\n if (instanceMethodOf) {\r\n assert(this.is(ElementFlags.INSTANCE)); // internal error\r\n this.locals.set(\"this\", new Local(prototype.program, \"this\", localIndex++, instanceMethodOf.type));\r\n if (instanceMethodOf.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) {\r\n this.contextualTypeArguments = new Map();\r\n }\r\n for (var [inheritedName, inheritedType] of instanceMethodOf.contextualTypeArguments) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n } else {\r\n assert(!this.is(ElementFlags.INSTANCE)); // internal error\r\n }\r\n for (var i = 0, k = this.parameters.length; i < k; ++i) {\r\n var parameter = this.parameters[i];\r\n var parameterName = assert(parameter.name, \"parameter must be named\"); // not a builtin or declared\r\n this.locals.set(\r\n parameterName,\r\n new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameter.type\r\n )\r\n );\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = (this.parameters ? this.parameters.length : 0) + this.additionalLocals.length;\r\n if (this.is(ElementFlags.INSTANCE)) localIndex++; // plus 'this'\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type\r\n );\r\n if (name) {\r\n if (this.locals.has(name)) throw new Error(\"duplicate local name\");\r\n this.locals.set(name, local);\r\n }\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: temps = this.tempI32s; break;\r\n case NativeType.I64: temps = this.tempI64s; break;\r\n case NativeType.F32: temps = this.tempF32s; break;\r\n case NativeType.F64: temps = this.tempF64s; break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps && temps.length) {\r\n var ret = temps.pop();\r\n ret.type = type;\r\n return ret;\r\n }\r\n return this.addLocal(type);\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: temps = this.tempI32s || (this.tempI32s = []); break;\r\n case NativeType.I64: temps = this.tempI64s || (this.tempI64s = []); break;\r\n case NativeType.F32: temps = this.tempF32s || (this.tempF32s = []); break;\r\n case NativeType.F64: temps = this.tempF64s || (this.tempF64s = []); break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: temps = this.tempI32s || (this.tempI32s = []); break;\r\n case NativeType.I64: temps = this.tempI64s || (this.tempI64s = []); break;\r\n case NativeType.F32: temps = this.tempF32s || (this.tempF32s = []); break;\r\n case NativeType.F64: temps = this.tempF64s || (this.tempF64s = []); break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps.length > 0) {\r\n return temps[temps.length - 1];\r\n }\r\n var local: Local = this.addLocal(type);\r\n temps.push(local);\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) {\r\n this.breakStack = [ id ];\r\n } else {\r\n this.breakStack.push(id);\r\n }\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n var debugLocations = this.debugLocations;\r\n if (debugLocations) {\r\n for (var i = 0, k = debugLocations.length; i < k; ++i) {\r\n var debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n this.debugLocations = null;\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Function): bool {\r\n return this == target; // TODO\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n\r\n /** Returns the function type TypeScript representation of this function.*/\r\n toTypeString(): string { throw new Error(\"not implemented\"); }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.READONLY:\r\n this.set(ElementFlags.READONLY);\r\n break;\r\n\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.PUBLIC:\r\n case ModifierKind.STATIC:\r\n break; // already handled\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Whether the field is read-only or not. */\r\n get isReadonly(): bool {\r\n return (this.flags & ElementFlags.READONLY) != 0;\r\n }\r\n set isReadonly(is: bool) {\r\n if (is) {\r\n this.flags |= ElementFlags.READONLY;\r\n } else {\r\n this.flags &= ~ElementFlags.READONLY;\r\n }\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(prototype: FieldPrototype, internalName: string, type: Type) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n\r\n /** Overloaded indexed get method, if any. */\r\n fnIndexedGet: string | null = null;\r\n /** Overloaded indexed set method, if any. */\r\n fnIndexedSet: string | null = null;\r\n /** Overloaded concatenation method, if any. */\r\n fnConcat: string | null = null;\r\n /** Overloaded equality comparison method, if any. */\r\n fnEquals: string | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (this.declaration.typeParameters.length) {\r\n this.set(ElementFlags.GENERIC);\r\n }\r\n }\r\n\r\n /** Whether an unamanaged class or not. */\r\n get isUnmanaged(): bool {\r\n return (this.flags & ElementFlags.UNMANAGED) != 0;\r\n }\r\n set isUnmanaged(is: bool) {\r\n if (is) {\r\n this.flags |= ElementFlags.UNMANAGED;\r\n } else {\r\n this.flags &= ~ElementFlags.UNMANAGED;\r\n }\r\n }\r\n\r\n resolve(typeArguments: Type[] | null, contextualTypeArguments: Map | null = null): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (var [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var declaration = this.declaration;\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n var baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classType)) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n return null;\r\n }\r\n if (baseClass.prototype.isUnmanaged != this.isUnmanaged) {\r\n this.program.error(\r\n DiagnosticCode.Structs_cannot_extend_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments if provided\r\n var i: i32, k: i32;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(declaration.typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else if (declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (var inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n if (this.constructorPrototype) {\r\n var partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) {\r\n instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n // TODO: ^ doesn't know the return type, hence returns null\r\n }\r\n\r\n if (this.instanceMembers) {\r\n for (var member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n case ElementKind.FIELD_PROTOTYPE: // fields are layed out in advance\r\n if (!instance.members) instance.members = new Map();\r\n var fieldDeclaration = (member).declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n var fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (fieldType) {\r\n var fieldInstance = new Field(member, (member).internalName, fieldType);\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: if (memoryOffset & 1) ++memoryOffset; break;\r\n case 4: if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break;\r\n case 8: if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break;\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n }\r\n break;\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE: // instance methods remain partially resolved prototypes until compiled\r\n if (!instance.members) instance.members = new Map();\r\n var methodPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\r\n instance.members.set(member.simpleName, methodPrototype);\r\n }\r\n break;\r\n\r\n case ElementKind.PROPERTY: // instance properties are cloned with partially resolved getters and setters\r\n if (!instance.members) instance.members = new Map();\r\n assert((member).getterPrototype);\r\n var instanceProperty = new Property(this.program, member.simpleName, member.internalName, this);\r\n instanceProperty.getterPrototype = (\r\n ((member).getterPrototype).resolvePartial(\r\n typeArguments\r\n )\r\n );\r\n if ((member).setterPrototype) {\r\n instanceProperty.setterPrototype = (\r\n ((member).setterPrototype).resolvePartial(\r\n typeArguments\r\n )\r\n );\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n\r\n default:\r\n throw new Error(\"instance member expected\");\r\n }\r\n }\r\n }\r\n instance.currentMemoryOffset = memoryOffset; // sizeof() is its byte size in memory\r\n return instance;\r\n }\r\n\r\n resolveInclTypeArguments(\r\n typeArgumentNodes: TypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n alternativeReportNode: Node | null\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(ElementFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(\r\n this.declaration.typeParameters,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n } else {\r\n assert(typeArgumentNodes == null || !typeArgumentNodes.length);\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n if (base.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (var [baseName, baseType] of base.contextualTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n var typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do {\r\n if (current == target) {\r\n return true;\r\n }\r\n } while (current = current.base);\r\n return false;\r\n }\r\n\r\n toString(): string {\r\n return this.prototype.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName, declaration);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch possibly throws. */\r\n POSSIBLY_THROWS = 1 << 1,\r\n /** This branch possible breaks. */\r\n POSSIBLY_BREAKS = 1 << 2,\r\n /** This branch possible continues. */\r\n POSSIBLY_CONTINUES = 1 << 3\r\n}\r\n\r\n/** A control flow evaluator. */\r\nexport class Flow {\r\n\r\n /** Parent flow. */\r\n parent: Flow | null;\r\n /** Flow flags indicating specific conditions. */\r\n flags: FlowFlags;\r\n /** Function this flow belongs to. */\r\n currentFunction: Function;\r\n /** The label we break to when encountering a continue statement. */\r\n continueLabel: string | null;\r\n /** The label we break to when encountering a break statement. */\r\n breakLabel: string | null;\r\n /** Scoped local variables. */\r\n scopedLocals: Map | null = null;\r\n\r\n /** Creates the parent flow of the specified function. */\r\n static create(currentFunction: Function): Flow {\r\n var parentFlow = new Flow();\r\n parentFlow.parent = null;\r\n parentFlow.flags = FlowFlags.NONE;\r\n parentFlow.currentFunction = currentFunction;\r\n parentFlow.continueLabel = null;\r\n parentFlow.breakLabel = null;\r\n return parentFlow;\r\n }\r\n\r\n private constructor() { }\r\n\r\n /** Tests if this flow has the specified flag or flags. */\r\n is(flag: FlowFlags): bool { return (this.flags & flag) == flag; }\r\n\r\n /** Sets the specified flag or flags. */\r\n set(flag: FlowFlags): void { this.flags |= flag; }\r\n\r\n /** Enters a new branch or scope and returns the new flow. */\r\n enterBranchOrScope(): Flow {\r\n var branchFlow = new Flow();\r\n branchFlow.parent = this;\r\n branchFlow.flags = this.flags;\r\n branchFlow.currentFunction = this.currentFunction;\r\n branchFlow.continueLabel = this.continueLabel;\r\n branchFlow.breakLabel = this.breakLabel;\r\n return branchFlow;\r\n }\r\n\r\n /** Leaves the current branch or scope and returns the parent flow. */\r\n leaveBranchOrScope(): Flow {\r\n var parent = assert(this.parent);\r\n\r\n // Free block-scoped locals\r\n if (this.scopedLocals) {\r\n for (var scopedLocal of this.scopedLocals.values()) {\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n this.scopedLocals = null;\r\n }\r\n\r\n // Propagate flags to parent\r\n if (this.is(FlowFlags.POSSIBLY_THROWS)) {\r\n parent.set(FlowFlags.POSSIBLY_THROWS);\r\n }\r\n if (this.is(FlowFlags.POSSIBLY_BREAKS) && parent.breakLabel == this.breakLabel) {\r\n parent.set(FlowFlags.POSSIBLY_BREAKS);\r\n }\r\n if (this.is(FlowFlags.POSSIBLY_CONTINUES) && parent.continueLabel == this.continueLabel) {\r\n parent.set(FlowFlags.POSSIBLY_CONTINUES);\r\n }\r\n\r\n return parent;\r\n }\r\n\r\n /** Adds a new scoped local of the specified name. */\r\n addScopedLocal(name: string, type: Type, reportNode: Node): void {\r\n var scopedLocal = this.currentFunction.getTempLocal(type);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else if (this.scopedLocals.has(name)) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n reportNode.range\r\n );\r\n return;\r\n }\r\n this.scopedLocals.set(name, scopedLocal);\r\n }\r\n\r\n /** Gets the local of the specified name in the current scope. */\r\n getScopedLocal(name: string): Local | null {\r\n var local: Local | null;\r\n var current: Flow | null = this;\r\n do {\r\n if (current.scopedLocals && (local = current.scopedLocals.get(name))) {\r\n return local;\r\n }\r\n } while (current = current.parent);\r\n return this.currentFunction.locals.get(name);\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): bool {\r\n assert(this.parent == null, \"must be the topmost parent flow\");\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n return this.is(FlowFlags.RETURNS);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/program.ts","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 3\n// module chunks = 0","import {\r\n compileCall as compileBuiltinCall,\r\n compileGetConstant as compileBuiltinGetConstant,\r\n compileAllocate as compileBuiltinAllocate\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId\r\n} from \"./module\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ElementFlags,\r\n ConstantValueKind,\r\n Parameter,\r\n\r\n PATH_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n ModifierKind,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n\r\n hasModifier\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, does not set up a memory. */\r\n noMemory: bool = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n importMemory: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: u32 = 0;\r\n /** Memory allocation implementation to use. */\r\n allocateImpl: string = \"allocate_memory\";\r\n /** Memory freeing implementation to use. */\r\n freeImpl: string = \"free_memory\";\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n\r\n /** Start function being compiled. */\r\n startFunction: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[] = new Array();\r\n\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = new Array();\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n\r\n /** Function table being compiled. */\r\n functionTable: Function[] = new Array();\r\n\r\n /** Already processed file names. */\r\n files: Set = new Set();\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.options = options ? options : new Options();\r\n this.memoryOffset = i64_new(\r\n max(this.options.memoryBase, this.options.usizeType.byteSize) // leave space for `null`\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n this.program.initialize(this.options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(this.program.elements.get(\"start\"));\r\n assert(startFunctionPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n var startFunctionInstance = new Function(\r\n startFunctionPrototype,\r\n startFunctionPrototype.internalName,\r\n null, // not generic\r\n null, // no parameters\r\n Type.void\r\n );\r\n startFunctionInstance.set(ElementFlags.START);\r\n this.currentFunction = this.startFunction = startFunctionInstance;\r\n\r\n var sources = this.program.sources;\r\n\r\n // compile entry file(s) while traversing to reachable elements\r\n for (var i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) {\r\n this.compileSource(sources[i]);\r\n }\r\n }\r\n\r\n // compile the start function if not empty\r\n if (this.startFunctionBody.length) {\r\n var typeRef = this.module.getFunctionTypeBySignature(NativeType.None, []);\r\n if (!typeRef) typeRef = this.module.addFunctionType(\"v\", NativeType.None, []);\r\n var ref: FunctionRef;\r\n this.module.setStart(\r\n ref = this.module.addFunction(\r\n this.startFunction.prototype.internalName,\r\n typeRef,\r\n typesToNativeTypes(this.startFunction.additionalLocals),\r\n this.module.createBlock(null, this.startFunctionBody)\r\n )\r\n );\r\n this.startFunction.finalize(this.module, ref);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!this.options.noMemory) {\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, this.options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (this.options.isWasm64) {\r\n this.module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n this.module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n this.module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n this.module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n this.module.setMemory(\r\n i64_low(pages),\r\n Module.MAX_MEMORY_WASM32 /* TODO: not WASM64 compatible yet */,\r\n this.memorySegments,\r\n this.options.target,\r\n \"memory\"\r\n );\r\n }\r\n\r\n // import memory if requested\r\n if (this.options.importMemory) {\r\n this.module.addMemoryImport(\"memory\", \"env\", \"memory\");\r\n }\r\n\r\n // set up function table\r\n if (k = this.functionTable.length) {\r\n var entries = new Array(k);\r\n for (i = 0; i < k; ++i) {\r\n entries[i] = this.functionTable[i].ref;\r\n }\r\n this.module.setFunctionTable(entries);\r\n }\r\n\r\n return this.module;\r\n }\r\n\r\n // sources\r\n\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var sources = this.program.sources;\r\n\r\n var source: Source;\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (var i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n expected = normalizedPathWithoutExtension + \"/index.ts\";\r\n for (i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n expected = LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\";\r\n for (i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n\r\n compileSource(source: Source): void {\r\n var files = this.files;\r\n if (files.has(source.normalizedPath)) return;\r\n files.add(source.normalizedPath);\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (var i = 0, k = statements.length; i < k; ++i) {\r\n var statement = statements[i];\r\n switch (statement.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\r\n !(statement).typeParameters.length\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n\r\n case NodeKind.IMPORT:\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n\r\n case NodeKind.NAMESPACEDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n\r\n case NodeKind.VARIABLE: // global, always compiled as initializers might have side effects\r\n var variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n\r\n case NodeKind.EXPORT:\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n\r\n // otherwise a top-level statement that is part of the start function's body\r\n default:\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = this.startFunction;\r\n var expr = this.compileStatement(statement);\r\n this.startFunctionBody.push(expr);\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.GLOBAL) {\r\n throw new Error(\"global expected\");\r\n }\r\n if (!this.compileGlobal(element)) { // reports\r\n return null;\r\n }\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(ElementFlags.COMPILED) || global.is(ElementFlags.BUILTIN)) {\r\n return true;\r\n }\r\n\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n if (global.type == Type.void) { // infer type\r\n if (declaration.type) {\r\n var resolvedType = this.program.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.type.range, \"*\", resolvedType.toString()\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n var nativeType = global.type.toNativeType();\r\n\r\n if (global.is(ElementFlags.DECLARED)) {\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n this.module.addGlobalImport(\r\n global.internalName,\r\n global.namespace\r\n ? global.namespace.simpleName\r\n : \"env\",\r\n global.simpleName,\r\n nativeType\r\n );\r\n global.set(ElementFlags.COMPILED);\r\n return true;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n var initializeInStart = false;\r\n\r\n if (global.is(ElementFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type);\r\n } else {\r\n if (declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(declaration.initializer, global.type);\r\n }\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n } else {\r\n initExpr = global.type.toNativeZero(this.module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n if (initializeInStart) {\r\n this.module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(this.module));\r\n var setExpr = this.module.createSetGlobal(internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n } else {\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n var exprType = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n\r\n case NativeType.I32:\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(_BinaryenConstGetValueI32(initExpr), 0);\r\n break;\r\n\r\n case NativeType.I64:\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n _BinaryenConstGetValueI64Low(initExpr),\r\n _BinaryenConstGetValueI64High(initExpr)\r\n );\r\n break;\r\n\r\n case NativeType.F32:\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF32(initExpr);\r\n break;\r\n\r\n case NativeType.F64:\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF64(initExpr);\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n global.set(ElementFlags.INLINED);\r\n if (declaration.isTopLevel) { // might be re-exported\r\n this.module.addGlobal(internalName, nativeType, !global.is(ElementFlags.CONSTANT), initExpr);\r\n }\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addGlobalExport(global.internalName, declaration.programLevelInternalName);\r\n }\r\n } else {\r\n this.module.addGlobal(internalName, nativeType, !global.is(ElementFlags.CONSTANT), initExpr);\r\n }\r\n }\r\n global.set(ElementFlags.COMPILED);\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.ENUM) throw new Error(\"enum expected\");\r\n return this.compileEnum(element) ? element : null;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(ElementFlags.COMPILED)) return true;\r\n\r\n // members might reference each other, triggering another compile\r\n element.set(ElementFlags.COMPILED);\r\n\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n if (element.members) {\r\n for (var member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n var initInStart = false;\r\n var val = member;\r\n var valueDeclaration = val.declaration;\r\n val.set(ElementFlags.COMPILED);\r\n if (val.is(ElementFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n this.module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n this.module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n var initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(valueDeclaration.value, Type.i32);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n if (element.is(ElementFlags.CONSTANT)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = this.module.createI32(0);\r\n } else if (previousValue.is(ElementFlags.INLINED)) {\r\n initExpr = this.module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = this.module.createBinary(BinaryOp.AddI32,\r\n this.module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n this.module.createI32(1)\r\n );\r\n if (element.is(ElementFlags.CONSTANT)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n this.module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n this.module.createI32(0)\r\n );\r\n var setExpr = this.module.createSetGlobal(val.internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n } else {\r\n this.module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (_BinaryenExpressionGetType(initExpr) == NativeType.I32) {\r\n val.constantValue = _BinaryenConstGetValueI32(initExpr);\r\n val.set(ElementFlags.INLINED);\r\n } else {\r\n throw new Error(\"i32 expected\");\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.declaration.range.source.isEntry && element.declaration.isTopLevelExport) {\r\n if (member.is(ElementFlags.INLINED)) {\r\n this.module.addGlobalExport(member.internalName, member.internalName);\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n throw new Error(\"function expected\");\r\n }\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = prototype.resolveInclTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n return this.compileFunction(instance) ? instance : null;\r\n }\r\n\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(ElementFlags.COMPILED)) return true;\r\n\r\n assert(!instance.is(ElementFlags.BUILTIN) || instance.simpleName == \"abort\");\r\n\r\n var declaration = instance.prototype.declaration;\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n if (declaration.body) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n return false;\r\n }\r\n } else if (!declaration.body) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n return false;\r\n }\r\n\r\n // might trigger compilation of other functions referring to this one\r\n instance.set(ElementFlags.COMPILED);\r\n\r\n // compile statements\r\n var stmt: ExpressionRef = 0;\r\n if (!instance.is(ElementFlags.DECLARED)) {\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n var body = assert(declaration.body, \"implementation expected\");\r\n stmt = this.compileStatement(body);\r\n // make sure the top-level branch or all child branches return\r\n var allBranchesReturn = this.currentFunction.flow.finalize();\r\n if (instance.returnType != Type.void && !allBranchesReturn) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n assert(declaration.returnType, \"return type expected\").range\r\n );\r\n }\r\n this.currentFunction = previousFunction;\r\n }\r\n\r\n // create the function type\r\n var numParameters = instance.parameters ? instance.parameters.length : 0;\r\n var numParametersInclThis = instance.instanceMethodOf ? numParameters + 1 : numParameters;\r\n var paramIndex = 0;\r\n\r\n var nativeResultType = instance.returnType.toNativeType();\r\n var nativeParamTypes = new Array(numParametersInclThis);\r\n var signatureNameParts = new Array(numParametersInclThis + 1);\r\n\r\n if (instance.instanceMethodOf) {\r\n nativeParamTypes[paramIndex] = this.options.isWasm64 ? NativeType.I64 : NativeType.I32;\r\n signatureNameParts[paramIndex++] = instance.instanceMethodOf.type.toSignatureString();\r\n }\r\n if (instance.parameters) {\r\n for (var i = 0; i < numParameters; ++i) {\r\n nativeParamTypes[paramIndex] = instance.parameters[i].type.toNativeType();\r\n signatureNameParts[paramIndex++] = instance.parameters[i].type.toSignatureString();\r\n }\r\n }\r\n signatureNameParts[paramIndex] = instance.returnType.toSignatureString();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeResultType, nativeParamTypes);\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(\r\n signatureNameParts.join(\"\"),\r\n nativeResultType,\r\n nativeParamTypes\r\n );\r\n }\r\n\r\n // create the function\r\n var ref: FunctionRef;\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n ref = this.module.addFunctionImport(\r\n instance.internalName,\r\n instance.prototype.namespace\r\n ? instance.prototype.namespace.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n } else {\r\n ref = this.module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n assert(stmt)\r\n );\r\n }\r\n\r\n // check module export\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addFunctionExport(instance.internalName, declaration.name.text);\r\n }\r\n\r\n instance.finalize(this.module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n switch (member.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).typeParameters.length\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.INTERFACEDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).typeParameters.length\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.NAMESPACEDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n var variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n\r\n default:\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (var element of ns.members.values()) {\r\n switch (element.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(ElementFlags.EXPORTED)\r\n ) && !(element).is(ElementFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n\r\n case ElementKind.ENUM:\r\n this.compileEnum(element);\r\n break;\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (\r\n (\r\n noTreeShaking || (element).is(ElementFlags.EXPORTED)\r\n ) && !(element).is(ElementFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n\r\n case ElementKind.GLOBAL:\r\n this.compileGlobal(element);\r\n break;\r\n\r\n case ElementKind.NAMESPACE:\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var members = statement.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n var internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n var element = this.program.exports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n\r\n switch (element.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n if (!(element).is(ElementFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n\r\n case ElementKind.ENUM:\r\n this.compileEnum(element);\r\n break;\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (\r\n !(element).is(ElementFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n var functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null,\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n var functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n this.module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case ElementKind.GLOBAL:\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n var globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(ElementFlags.INLINED)) {\r\n this.module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case ElementKind.NAMESPACE:\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n throw new Error(\"class expected\");\r\n }\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = prototype.resolveInclTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(ElementFlags.COMPILED)) return true;\r\n instance.set(ElementFlags.COMPILED);\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Adds a function table entry and returns the assigned index. */\r\n addFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(ElementFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var index = this.functionTable.length;\r\n this.functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var expr: ExpressionRef;\r\n switch (statement.kind) {\r\n\r\n case NodeKind.BLOCK:\r\n expr = this.compileBlockStatement(statement);\r\n break;\r\n\r\n case NodeKind.BREAK:\r\n expr = this.compileBreakStatement(statement);\r\n break;\r\n\r\n case NodeKind.CONTINUE:\r\n expr = this.compileContinueStatement(statement);\r\n break;\r\n\r\n case NodeKind.DO:\r\n expr = this.compileDoStatement(statement);\r\n break;\r\n\r\n case NodeKind.EMPTY:\r\n expr = this.compileEmptyStatement(statement);\r\n break;\r\n\r\n case NodeKind.EXPRESSION:\r\n expr = this.compileExpressionStatement(statement);\r\n break;\r\n\r\n case NodeKind.FOR:\r\n expr = this.compileForStatement(statement);\r\n break;\r\n\r\n case NodeKind.IF:\r\n expr = this.compileIfStatement(statement);\r\n break;\r\n\r\n case NodeKind.RETURN:\r\n expr = this.compileReturnStatement(statement);\r\n break;\r\n\r\n case NodeKind.SWITCH:\r\n expr = this.compileSwitchStatement(statement);\r\n break;\r\n\r\n case NodeKind.THROW:\r\n expr = this.compileThrowStatement(statement);\r\n break;\r\n\r\n case NodeKind.TRY:\r\n expr = this.compileTryStatement(statement);\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n var variableInit = this.compileVariableStatement(statement);\r\n expr = variableInit ? variableInit : this.module.createNop();\r\n break;\r\n\r\n case NodeKind.WHILE:\r\n expr = this.compileWhileStatement(statement);\r\n break;\r\n\r\n case NodeKind.TYPEDECLARATION:\r\n if (this.currentFunction == this.startFunction) {\r\n return this.module.createNop();\r\n }\r\n // fall-through: must be top-level; function bodies are not guaranteed to be evaluated\r\n\r\n default:\r\n throw new Error(\"statement expected\");\r\n }\r\n\r\n this.addDebugLocation(expr, statement.range);\r\n return expr;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var k = statements.length;\r\n var stmts = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n stmts[i] = this.compileStatement(statements[i]);\r\n }\r\n return stmts; // array of 0-es in noEmit-mode\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // NOTE that we could optimize this to a NOP if empty or unwrap a single\r\n // statement, but that's not what the source told us to do and left to the\r\n // optimizer.\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n\r\n var stmt = this.module.createBlock(null, this.compileStatements(statements), NativeType.None);\r\n var stmtReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n if (stmtReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n }\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var breakLabel = this.currentFunction.flow.breakLabel;\r\n if (breakLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_BREAKS);\r\n return this.module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var continueLabel = this.currentFunction.flow.continueLabel;\r\n if (continueLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_CONTINUES);\r\n return this.module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n\r\n // A do statement does not initiate a new branch because it is executed at\r\n // least once, but has its own break and continue labels.\r\n var label = this.currentFunction.enterBreakContext();\r\n var previousBreakLabel = this.currentFunction.flow.breakLabel;\r\n var previousContinueLabel = this.currentFunction.flow.continueLabel;\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n\r\n // Reset to the previous break and continue labels, if any.\r\n this.currentFunction.flow.breakLabel = previousBreakLabel;\r\n this.currentFunction.flow.continueLabel = previousContinueLabel;\r\n\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n this.currentFunction.leaveBreakContext();\r\n\r\n return this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel,\r\n this.module.createBlock(null, [\r\n body,\r\n this.module.createBreak(continueLabel, condition)\r\n ], NativeType.None))\r\n ], NativeType.None);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var context = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + context;\r\n\r\n // Compile in correct order\r\n var initializer = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : this.module.createNop();\r\n var condition = statement.condition\r\n ? this.compileExpression(statement.condition, Type.i32)\r\n : this.module.createI32(1);\r\n var incrementor = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void)\r\n : this.module.createNop();\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = !statement.condition && this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n // TODO: check other always-true conditions as well, not just omitted\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n\r\n var expr = this.module.createBlock(breakLabel, [\r\n initializer,\r\n this.module.createLoop(continueLabel, this.module.createBlock(null, [\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n incrementor,\r\n this.module.createBreak(continueLabel)\r\n ], NativeType.None))\r\n ], NativeType.None))\r\n ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n expr = this.module.createBlock(null, [\r\n expr,\r\n this.module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Each arm initiates a branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var ifTrue = this.compileStatement(statement.ifTrue);\r\n var ifTrueReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n\r\n var ifFalse: ExpressionRef = 0;\r\n var ifFalseReturns = false;\r\n if (statement.ifFalse) {\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n ifFalse = this.compileStatement(statement.ifFalse);\r\n ifFalseReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n }\r\n if (ifTrueReturns && ifFalseReturns) { // not necessary to append a hint\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n }\r\n return this.module.createIf(condition, ifTrue, ifFalse);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var expression: ExpressionRef = 0;\r\n if (statement.value) {\r\n expression = this.compileExpression(statement.value, this.currentFunction.returnType);\r\n }\r\n\r\n // Remember that this flow returns\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n\r\n return this.module.createReturn(expression);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n\r\n // Everything within a switch uses the same break context\r\n var context = this.currentFunction.enterBreakContext();\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = this.currentFunction.getTempLocal(Type.u32);\r\n var k = statement.cases.length;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + k);\r\n breaks[0] = this.module.createSetLocal( // initializer\r\n tempLocal.index,\r\n this.compileExpression(statement.condition, Type.u32)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (var i = 0; i < k; ++i) {\r\n var case_ = statement.cases[i];\r\n if (case_.label) {\r\n breaks[breakIndex++] = this.module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n this.module.createBinary(BinaryOp.EqI32,\r\n this.module.createGetLocal(tempLocal.index, NativeType.I32),\r\n this.compileExpression(case_.label, Type.i32)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = this.module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = this.module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n for (i = 0; i < k; ++i) {\r\n case_ = statement.cases[i];\r\n var l = case_.statements.length;\r\n var body = new Array(1 + l);\r\n body[0] = currentBlock;\r\n\r\n // Each switch case initiates a new branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n\r\n var fallsThrough = i != k - 1;\r\n var nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (var j = 0; j < l; ++j) {\r\n body[j + 1] = this.compileStatement(case_.statements[j]);\r\n }\r\n if (!(fallsThrough || this.currentFunction.flow.is(FlowFlags.RETURNS))) {\r\n alwaysReturns = false; // ignore fall-throughs\r\n }\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n\r\n currentBlock = this.module.createBlock(nextLabel, body, NativeType.None);\r\n }\r\n this.currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0 && alwaysReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n // Binaryen understands that so we don't need a hint\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n\r\n // Remember that this branch possibly throws\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n throw new Error(\"not implemented\");\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var declarations = statement.declarations;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n this.currentFunction == this.startFunction &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n for (i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var name = declaration.name.text;\r\n var type: Type | null = null;\r\n var init: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = this.program.resolveType( // reports\r\n declaration.type,\r\n this.currentFunction.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n init = this.compileExpression(declaration.initializer, type); // reports\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n init = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n if (hasModifier(ModifierKind.CONST, declaration.modifiers)) {\r\n if (init) {\r\n init = this.precomputeExpressionRef(init);\r\n if (_BinaryenExpressionGetId(init) == ExpressionId.Const) {\r\n var local = new Local(this.program, name, -1, type);\r\n switch (_BinaryenExpressionGetType(init)) {\r\n case NativeType.I32:\r\n local = local.withConstantIntegerValue(_BinaryenConstGetValueI32(init), 0);\r\n break;\r\n case NativeType.I64:\r\n local = local.withConstantIntegerValue(\r\n _BinaryenConstGetValueI64Low(init),\r\n _BinaryenConstGetValueI64High(init)\r\n );\r\n break;\r\n case NativeType.F32:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n case NativeType.F64:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n var scopedLocals = this.currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) scopedLocals = this.currentFunction.flow.scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return 0;\r\n }\r\n scopedLocals.set(name, local);\r\n return 0;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (hasModifier(ModifierKind.LET, declaration.modifiers)) { // here: not top-level\r\n this.currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports\r\n } else {\r\n this.currentFunction.addLocal(type, name); // reports\r\n }\r\n if (init) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, init));\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n\r\n // The condition does not yet initialize a branch\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Statements initiate a new branch with its own break context\r\n var label = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = false && this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate possible always-true conditions\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n\r\n var expr = this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel,\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n this.module.createBreak(continueLabel)\r\n ], NativeType.None))\r\n )\r\n ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n expr = this.module.createBlock(null, [\r\n expr,\r\n this.module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /** Compiles an inlined constant value of a variable-like element. */\r\n compileInlineConstant(element: VariableLikeElement, contextualType: Type): ExpressionRef {\r\n assert(element.is(ElementFlags.INLINED));\r\n\r\n switch (\r\n element.type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n element.type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = element.type).kind\r\n ) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n var shift = element.type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n );\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n var mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n );\r\n\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n\r\n case TypeKind.F32:\r\n return this.module.createF32((element).constantFloatValue);\r\n\r\n case TypeKind.F64:\r\n return this.module.createF64((element).constantFloatValue);\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n\r\n case NodeKind.ASSERTION:\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.BINARY:\r\n expr = this.compileBinaryExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n\r\n case NodeKind.CALL:\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.COMMA:\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.ELEMENTACCESS:\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.FUNCTION:\r\n case NodeKind.FUNCTIONARROW:\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.TRUE:\r\n expr = this.compileIdentifierExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.LITERAL:\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.NEW:\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.PARENTHESIZED:\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.PROPERTYACCESS:\r\n expr = this.compilePropertyAccessExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.TERNARY:\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.UNARYPOSTFIX:\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.UNARYPREFIX:\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n\r\n default:\r\n throw new Error(\"expression expected\");\r\n }\r\n\r\n if (conversionKind != ConversionKind.NONE && this.currentType != contextualType) {\r\n expr = this.convertExpression(expr, this.currentType, contextualType, conversionKind, expression);\r\n this.currentType = contextualType;\r\n }\r\n\r\n this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(this.compileExpression(expression, contextualType, conversionKind));\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var nativeType = this.currentType.toNativeType();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeType, []);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(this.currentType.toSignatureString(), nativeType, []);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = this.module.addFunction(\"__precompute\", typeRef, [], expr);\r\n this.module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = _BinaryenFunctionGetBody(funcRef);\r\n this.module.removeFunction(\"__precompute\");\r\n if (typeRefAdded) {\r\n // TODO: also remove the function type somehow if no longer used or make the C-API accept\r\n // a `null` typeRef, using an implicit type.\r\n }\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n if (conversionKind == ConversionKind.NONE) {\r\n assert(false, \"concrete type expected\");\r\n return expr;\r\n }\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) {\r\n return this.module.createDrop(expr);\r\n }\r\n\r\n if (conversionKind == ConversionKind.IMPLICIT && !fromType.isAssignableTo(toType)) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n }\r\n\r\n var mod = this.module;\r\n var losesInformation = false;\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = mod.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n losesInformation = true;\r\n expr = mod.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n losesInformation = true;\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = mod.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = mod.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = mod.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = mod.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = mod.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = mod.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = mod.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = mod.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = this.module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n losesInformation = true;\r\n expr = mod.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n losesInformation = !fromType.is(TypeFlags.SMALL);\r\n expr = mod.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n losesInformation = true;\r\n expr = mod.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = mod.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32\r\n if (!toType.is(TypeFlags.LONG)) {\r\n losesInformation = true;\r\n expr = mod.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n\r\n // i32 to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = mod.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr);\r\n\r\n // i32 or smaller to even smaller or same size int with change of sign\r\n } else if (\r\n toType.is(TypeFlags.SMALL) &&\r\n (\r\n fromType.size > toType.size ||\r\n (\r\n fromType.size == toType.size &&\r\n fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED)\r\n )\r\n )\r\n ) {\r\n losesInformation = true;\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n\r\n // otherwise (smaller) i32/u32 to (same size) i32/u32\r\n }\r\n\r\n return expr;\r\n }\r\n\r\n /** Computes the common compatible type of two types. Returns `null` if incompatible. */\r\n computeCommonType(leftType: Type, rightType: Type): Type | null {\r\n if (leftType.isAssignableTo(rightType)) {\r\n return rightType;\r\n } else if (rightType.isAssignableTo(leftType)) {\r\n return leftType;\r\n }\r\n return null;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.program.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT);\r\n }\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n var left: ExpressionRef;\r\n var right: ExpressionRef;\r\n\r\n // TODO: Currently, the common type of any binary expression is the first operand's type. This\r\n // differs from C and other languages where comparing an int to a long, in this order, upcasts\r\n // left to a long before comparison, instead of failing when trying to downcast right to an int.\r\n // NOTE that if we change the current behaviour, some examples, tests and wiki pages will have\r\n // to be updated, while compound binary operations must retain the previous behavior.\r\n\r\n // var left = this.compileExpression(\r\n // expression.left,\r\n // contextualType == Type.void\r\n // ? Type.i32\r\n // : contextualType,\r\n // ConversionKind.NONE\r\n // );\r\n // var leftType = this.currentType;\r\n // var right = this.compileExpression(\r\n // expression.right,\r\n // leftType,\r\n // ConversionKind.NONE\r\n // );\r\n // var rightType = this.currentType;\r\n // var commonType = this.computeCommonType(leftType, rightType);\r\n // if (!commonType) {\r\n // this.error(\r\n // DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n // expression.range,\r\n // Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n // );\r\n // this.currentType = contextualType;\r\n // return this.module.createUnreachable();\r\n // }\r\n\r\n var condition: ExpressionRef;\r\n var expr: ExpressionRef;\r\n\r\n var compound = false;\r\n var possiblyOverflows = false;\r\n var tempLocal: Local | null = null;\r\n\r\n switch (expression.operator) {\r\n\r\n case Token.LESSTHAN:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE\r\n );\r\n right = this.compileExpression(expression.right, this.currentType);\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.LtI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.LtI64, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.LtU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.LtU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.LtF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.LtF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.GREATERTHAN:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE\r\n );\r\n right = this.compileExpression(expression.right, this.currentType);\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.GtI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.GtI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.GtU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.GtU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.GtF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.GtF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.LESSTHAN_EQUALS:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE\r\n );\r\n right = this.compileExpression(expression.right, this.currentType);\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.LeI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.LeI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.LeU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.LeU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.LeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.LeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.GREATERTHAN_EQUALS:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE\r\n );\r\n right = this.compileExpression(expression.right, this.currentType);\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.GeI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.GeI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.GeU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.GeU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.GeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.GeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n // TODO?\r\n case Token.EQUALS_EQUALS:\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE\r\n );\r\n right = this.compileExpression(expression.right, this.currentType);\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.EqI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.EqI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.EqF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.EqF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n // TODO?\r\n case Token.EXCLAMATION_EQUALS:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE\r\n );\r\n right = this.compileExpression(expression.right, this.currentType);\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.NeI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.NeI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.NeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.NeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.EQUALS:\r\n return this.compileAssignment(expression.left, expression.right, contextualType);\r\n\r\n case Token.PLUS_EQUALS:\r\n compound = true;\r\n case Token.PLUS:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.AddI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AddI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.AddF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.AddF64, left, right);\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.MINUS_EQUALS:\r\n compound = true;\r\n case Token.MINUS:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.SubI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.SubF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.SubF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.ASTERISK_EQUALS:\r\n compound = true;\r\n case Token.ASTERISK:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n // fall-through\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.MulI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.MulI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.MulF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.MulF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.SLASH_EQUALS:\r\n compound = true;\r\n case Token.SLASH:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n true // TODO: when can division remain unwrapped? does it overflow?\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n possiblyOverflows = true;\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.DivI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.DivI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.DivU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.DivU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.DivF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.DivF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.PERCENT_EQUALS:\r\n compound = true;\r\n case Token.PERCENT:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n true // TODO: when can remainder remain unwrapped? may it overflow?\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.RemI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.RemI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.RemU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.RemU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n // TODO: internal fmod, possibly simply imported from JS\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n compound = true;\r\n case Token.LESSTHAN_LESSTHAN:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n default:\r\n expr = this.module.createBinary(BinaryOp.ShlI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShlI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n true // must wrap small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n default:\r\n // assumes signed shr on signed small integers does not overflow\r\n expr = this.module.createBinary(BinaryOp.ShrI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.ShrI64, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n // assumes unsigned shr on unsigned small integers does not overflow\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.ShrU32, left, right);\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShrU64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType == Type.void\r\n ? Type.u64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n true // modifies low bits of small integers if unsigned\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n possiblyOverflows = true;\r\n // fall-through\r\n default:\r\n // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = this.module.createBinary(BinaryOp.ShrU32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShrU64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.AMPERSAND_EQUALS:\r\n compound = true;\r\n case Token.AMPERSAND:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.AndI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AndI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.BAR_EQUALS:\r\n compound = true;\r\n case Token.BAR:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.OrI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.OrI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.CARET_EQUALS:\r\n compound = true;\r\n case Token.CARET:\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.XorI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.XorI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: // left && right\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(left, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER);\r\n condition = makeIsTrueish(left, this.currentType, this.module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(\r\n condition, // left\r\n right, // ? right\r\n expr // : cloned left\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = this.module.createIf(\r\n condition,\r\n right,\r\n this.module.createGetLocal(\r\n assert(tempLocal, \"tempLocal must be set\").index,\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n\r\n case Token.BAR_BAR: // left || right\r\n left = this.compileExpression(\r\n expression.left,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(left, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if right did\r\n condition = makeIsTrueish(left, this.currentType, this.module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(\r\n condition, // left\r\n expr, // ? cloned left\r\n right // : right\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = this.module.createIf(\r\n condition,\r\n this.module.createGetLocal(\r\n assert(tempLocal, \"tempLocal must be set\").index,\r\n this.currentType.toNativeType()\r\n ),\r\n right\r\n );\r\n }\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"not implemented\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER), \"small integer type expected\");\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var element = resolved.element;\r\n var elementType: Type;\r\n switch (element.kind) {\r\n\r\n case ElementKind.GLOBAL:\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n // fall-through\r\n\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n elementType = (element).type;\r\n break;\r\n\r\n case ElementKind.PROPERTY:\r\n var setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return this.module.createUnreachable();\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n elementType = (setterInstance.parameters)[0].type;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n assert(\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS &&\r\n element.simpleName == (resolved.target).prototype.fnIndexedGet\r\n );\r\n var resolvedIndexedSet = (element).resolve(null);\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.returnType;\r\n break;\r\n }\r\n }\r\n // fall-through\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // now compile the value and do the assignment\r\n this.currentType = elementType;\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n this.compileExpression(valueExpression, elementType),\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var tempLocal: Local;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n case ElementKind.LOCAL:\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(ElementFlags.CONSTANT)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return tee\r\n ? this.module.createTeeLocal((element).index, valueWithCorrectType)\r\n : this.module.createSetLocal((element).index, valueWithCorrectType);\r\n\r\n case ElementKind.GLOBAL:\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(ElementFlags.CONSTANT)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n if (!tee) {\r\n return this.module.createSetGlobal((element).internalName, valueWithCorrectType);\r\n }\r\n var globalNativeType = (element).type.toNativeType();\r\n return this.module.createBlock(null, [ // emulated teeGlobal\r\n this.module.createSetGlobal((element).internalName, valueWithCorrectType),\r\n this.module.createGetGlobal((element).internalName, globalNativeType)\r\n ], globalNativeType);\r\n\r\n case ElementKind.FIELD:\r\n if ((element).prototype.isReadonly) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n assert(resolved.targetExpression != null, \"target expression expected\");\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType, \"class type expected\");\r\n this.currentType = tee ? (element).type : Type.void;\r\n var elementNativeType = (element).type.toNativeType();\r\n if (!tee) {\r\n return this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n valueWithCorrectType,\r\n elementNativeType,\r\n (element).memoryOffset\r\n );\r\n }\r\n tempLocal = this.currentFunction.getAndFreeTempLocal((element).type);\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal(tempLocal.index, valueWithCorrectType),\r\n this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n this.module.createGetLocal(tempLocal.index, elementNativeType),\r\n elementNativeType,\r\n (element).memoryOffset\r\n ),\r\n this.module.createGetLocal(tempLocal.index, elementNativeType)\r\n ], elementNativeType);\r\n\r\n case ElementKind.PROPERTY:\r\n var setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (setterInstance) {\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n if (!tee) {\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n this.currentType = Type.void;\r\n return this.makeCall(setterInstance, [ targetExpr, valueWithCorrectType ]);\r\n } else {\r\n this.currentType = Type.void;\r\n return this.makeCall(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n var getterPrototype = (element).getterPrototype;\r\n assert(getterPrototype != null);\r\n var getterInstance = (getterPrototype).resolve(); // reports\r\n if (getterInstance) {\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(getterInstance.returnType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [\r\n this.module.createTeeLocal(tempLocal.index, targetExpr), valueWithCorrectType\r\n ]),\r\n this.makeCall(getterInstance, [\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ])\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n } else {\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCall(getterInstance)\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n }\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n assert(resolved.target && resolved.target.kind == ElementKind.CLASS);\r\n var resolvedIndexedGet = (element).resolve();\r\n if (!resolvedIndexedGet) return this.module.createUnreachable();\r\n var indexedSetName = (resolved.target).prototype.fnIndexedSet;\r\n var indexedSet: Element | null;\r\n if (\r\n indexedSetName != null &&\r\n (resolved.target).members &&\r\n (indexedSet = (>(resolved.target).members).get(indexedSetName)) &&\r\n indexedSet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) { // @operator(\"[]=\")\r\n var resolvedIndexedSet = (indexedSet).resolve();\r\n if (!resolvedIndexedSet) return this.module.createUnreachable();\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n var elementExpr = this.compileExpression(\r\n (expression).elementExpression,\r\n Type.i32\r\n );\r\n if (!tee) {\r\n this.currentType = resolvedIndexedSet.returnType;\r\n return this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n this.currentType = resolvedIndexedGet.returnType;\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n this.module.createTeeLocal(tempLocal.index, valueWithCorrectType)\r\n ]),\r\n // TODO: could be different from an actual __get (needs 2 temp locals)\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ], this.currentType.toNativeType());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (resolved.target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // fall-through\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression.expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n if (element.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, element.internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var functionPrototype = element;\r\n var functionInstance: Function | null = null;\r\n\r\n // TODO: generalize?\r\n if (functionPrototype.is(ElementFlags.BUILTIN)) {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (expression.typeArguments) {\r\n var k = expression.typeArguments.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var resolvedType = this.program.resolveType( // reports\r\n expression.typeArguments[i],\r\n this.currentFunction.contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return this.module.createUnreachable();\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n var expr = compileBuiltinCall(\r\n this,\r\n functionPrototype,\r\n resolvedTypeArguments,\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n\r\n // TODO: infer type arguments from parameter types if omitted\r\n functionInstance = functionPrototype.resolveInclTypeArguments( // reports\r\n expression.typeArguments,\r\n this.currentFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (!functionInstance) return this.module.createUnreachable();\r\n\r\n // TODO: generalize? (see above)\r\n /* if (functionInstance.is(ElementFlags.BUILTIN)) {\r\n var expr = compileBuiltinCall(\r\n this,\r\n functionPrototype,\r\n functionInstance.typeArguments,\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n } */\r\n\r\n var numArguments = expression.arguments.length;\r\n var numArgumentsInclThis = functionInstance.instanceMethodOf\r\n ? numArguments + 1\r\n : numArguments;\r\n var argumentIndex = 0;\r\n\r\n var args = new Array(numArgumentsInclThis);\r\n if (functionInstance.instanceMethodOf) {\r\n assert(resolved.targetExpression != null);\r\n args[argumentIndex++] = resolved.targetExpression;\r\n }\r\n for (i = 0; i < numArguments; ++i) {\r\n args[argumentIndex++] = expression.arguments[i];\r\n }\r\n return this.compileCall(functionInstance, args, expression);\r\n }\r\n\r\n /**\r\n * Compiles a call to a function. If an instance method, `this` is the first element in\r\n * `argumentExpressions` or can be specified explicitly as the last argument.\r\n */\r\n compileCall(\r\n functionInstance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n\r\n // validate and compile arguments\r\n var parameters = functionInstance.parameters;\r\n\r\n var numParameters = parameters ? parameters.length : 0;\r\n var numParametersInclThis = functionInstance.instanceMethodOf != null\r\n ? numParameters + 1\r\n : numParameters;\r\n var numArgumentsInclThis = argumentExpressions.length;\r\n var numArguments = functionInstance.instanceMethodOf != null\r\n ? numArgumentsInclThis - 1\r\n : numArgumentsInclThis;\r\n if (thisArg) numArgumentsInclThis++;\r\n\r\n if (numArgumentsInclThis > numParametersInclThis) { // too many arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, numParameters.toString(10), numArguments.toString(10)\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var operands = new Array(numParametersInclThis);\r\n var operandIndex = 0;\r\n var argumentIndex = 0;\r\n if (functionInstance.instanceMethodOf) {\r\n if (thisArg) {\r\n operands[operandIndex++] = thisArg;\r\n } else {\r\n operands[operandIndex++] = this.compileExpression(\r\n argumentExpressions[argumentIndex++],\r\n functionInstance.instanceMethodOf.type\r\n );\r\n }\r\n }\r\n if (parameters) {\r\n for (; operandIndex < numParametersInclThis; ++operandIndex) {\r\n\r\n // argument has been provided\r\n if (numArgumentsInclThis > operandIndex) {\r\n operands[operandIndex] = this.compileExpression(\r\n argumentExpressions[argumentIndex++],\r\n parameters[operandIndex + numParameters - numParametersInclThis].type\r\n );\r\n\r\n // argument has been omitted\r\n } else {\r\n var initializer = parameters[operandIndex + numParameters - numParametersInclThis].initializer;\r\n if (initializer) { // fall back to provided initializer\r\n operands[operandIndex] = this.compileExpression(\r\n initializer,\r\n parameters[operandIndex + numParameters - numParametersInclThis].type\r\n );\r\n // FIXME: here, the initializer is compiled in the caller's scope.\r\n // a solution could be to use a stub for each possible overload, calling the\r\n // full function with optional arguments being part of the stub's body.\r\n\r\n } else { // too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range,\r\n (operandIndex + numParameters - numParametersInclThis).toString(10),\r\n numArguments.toString(10)\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = functionInstance.returnType;\r\n return this.makeCall(functionInstance, operands);\r\n }\r\n\r\n /** Makes a call operation as is. */\r\n makeCall(functionInstance: Function, operands: ExpressionRef[] | null = null): ExpressionRef {\r\n if (!(functionInstance.is(ElementFlags.COMPILED) || this.compileFunction(functionInstance))) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // imported function\r\n if (functionInstance.is(ElementFlags.DECLARED)) {\r\n return this.module.createCallImport(\r\n functionInstance.internalName,\r\n operands,\r\n functionInstance.returnType.toNativeType()\r\n );\r\n }\r\n\r\n // internal function\r\n return this.module.createCall(\r\n functionInstance.internalName,\r\n operands,\r\n functionInstance.returnType.toNativeType()\r\n );\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var k = expressions.length;\r\n var exprs = new Array(k--);\r\n for (var i = 0; i < k; ++i) {\r\n exprs[i] = this.compileExpression(expressions[i], Type.void); // drop all\r\n }\r\n exprs[i] = this.compileExpression(expressions[i], contextualType); // except last\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n assert(\r\n resolved.element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS\r\n );\r\n var instance = (resolved.element).resolve(\r\n null,\r\n (resolved.target).contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.compileCall(instance, [\r\n expression.expression,\r\n expression.elementExpression\r\n ], expression);\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var simpleName = (declaration.name.text.length\r\n ? declaration.name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n this.currentFunction.internalName + \"~\" + simpleName,\r\n declaration\r\n );\r\n var instance = this.compileFunctionUsingTypeArguments(prototype, [], null, declaration);\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = Type.u32.asFunction(instance);\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.addFunctionTableEntry(instance);\r\n if (index < 0) return this.module.createUnreachable();\r\n return this.module.createI32(index);\r\n }\r\n\r\n compileIdentifierExpression(expression: IdentifierExpression, contextualType: Type): ExpressionRef {\r\n // check special keywords first\r\n switch (expression.kind) {\r\n\r\n case NodeKind.NULL:\r\n if (this.options.isWasm64) {\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == TypeKind.USIZE);\r\n this.currentType = Type.usize64;\r\n }\r\n return this.module.createI64(0);\r\n }\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == TypeKind.USIZE);\r\n this.currentType = Type.usize32;\r\n }\r\n return this.module.createI32(0);\r\n\r\n case NodeKind.TRUE:\r\n this.currentType = Type.bool;\r\n return this.module.createI32(1);\r\n\r\n case NodeKind.FALSE:\r\n this.currentType = Type.bool;\r\n return this.module.createI32(0);\r\n\r\n case NodeKind.THIS:\r\n if (this.currentFunction.instanceMethodOf) {\r\n this.currentType = this.currentFunction.instanceMethodOf.type;\r\n return this.module.createGetLocal(0, this.currentType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.isWasm64 ? Type.usize64 : Type.usize32;\r\n return this.module.createUnreachable();\r\n\r\n case NodeKind.SUPER:\r\n if (this.currentFunction.instanceMethodOf && this.currentFunction.instanceMethodOf.base) {\r\n this.currentType = this.currentFunction.instanceMethodOf.base.type;\r\n return this.module.createGetLocal(0, this.currentType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.isWasm64 ? Type.usize64 : Type.usize32;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // otherwise resolve\r\n var resolved = this.program.resolveIdentifier( // reports\r\n expression,\r\n this.currentFunction,\r\n this.currentEnum\r\n );\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n\r\n case ElementKind.LOCAL:\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType);\r\n }\r\n assert((element).index >= 0);\r\n this.currentType = (element).type;\r\n return this.module.createGetLocal((element).index, this.currentType.toNativeType());\r\n\r\n case ElementKind.GLOBAL:\r\n if (element.is(ElementFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, element, expression);\r\n }\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType);\r\n }\r\n this.currentType = (element).type;\r\n return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType());\r\n\r\n case ElementKind.ENUMVALUE: // here: if referenced from within the same enum\r\n if (!element.is(ElementFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.module.createI32((element).constantValue);\r\n }\r\n return this.module.createGetGlobal((element).internalName, NativeType.I32);\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n switch (expression.literalKind) {\r\n\r\n case LiteralKind.ARRAY:\r\n assert(!implicitNegate);\r\n var classType = contextualType.classType;\r\n if (\r\n classType &&\r\n classType == this.program.elements.get(\"Array\") &&\r\n classType.typeArguments && classType.typeArguments.length == 1\r\n ) {\r\n return this.compileStaticArray(\r\n classType.typeArguments[0],\r\n (expression).elementExpressions\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n\r\n case LiteralKind.FLOAT: {\r\n var floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return this.module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return this.module.createF64(floatValue);\r\n }\r\n\r\n case LiteralKind.INTEGER:\r\n var intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8:\r\n if (i64_is_i8(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.I16:\r\n if (i64_is_i16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.I32:\r\n if (i64_is_i32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U8:\r\n if (i64_is_u8(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U16:\r\n if (i64_is_u16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U32:\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n if (i64_is_bool(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.USIZE:\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.F32:\r\n if (i64_is_f32(intValue)) {\r\n return this.module.createF32(i64_to_f32(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.F64:\r\n if (i64_is_f64(intValue)) {\r\n return this.module.createF64(i64_to_f64(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.VOID:\r\n break;\r\n\r\n default:\r\n assert(false);\r\n break;\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return this.module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n\r\n case LiteralKind.STRING:\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n\r\n // case LiteralKind.OBJECT:\r\n // case LiteralKind.REGEXP:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var stringSegment: MemorySegment | null = this.stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n var stringLength = stringValue.length;\r\n var stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (var i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, this.options.usizeType.byteSize);\r\n this.stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.types.get(\"string\");\r\n this.currentType = stringType ? stringType : this.options.usizeType;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileStaticArray(elementType: Type, expressions: (Expression | null)[]): ExpressionRef {\r\n // compile as static if all element expressions are precomputable, otherwise\r\n // initialize in place.\r\n var isStatic = true;\r\n var size = expressions.length;\r\n\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n switch (nativeType) {\r\n\r\n case NativeType.I32:\r\n values = changetype(new Int32Array(size));\r\n break;\r\n\r\n case NativeType.I64:\r\n values = changetype(new Array(size));\r\n break;\r\n\r\n case NativeType.F32:\r\n values = changetype(new Float32Array(size));\r\n break;\r\n\r\n case NativeType.F64:\r\n values = changetype(new Float64Array(size));\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n\r\n var exprs = new Array(size);\r\n var expr: BinaryenExpressionRef;\r\n for (var i = 0; i < size; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType)\r\n : elementType.toNativeZero(this.module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (_BinaryenExpressionGetId(expr) == ExpressionId.Const) {\r\n assert(_BinaryenExpressionGetType(expr) == nativeType);\r\n switch (nativeType) {\r\n\r\n case NativeType.I32:\r\n changetype(values)[i] = _BinaryenConstGetValueI32(expr);\r\n break;\r\n\r\n case NativeType.I64:\r\n changetype(values)[i] = i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n break;\r\n\r\n case NativeType.F32:\r\n changetype(values)[i] = _BinaryenConstGetValueF32(expr);\r\n break;\r\n\r\n case NativeType.F64:\r\n changetype(values)[i] = _BinaryenConstGetValueF64(expr);\r\n break;\r\n\r\n default:\r\n assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n if (isStatic) {\r\n // TODO: convert to Uint8Array and create the segment\r\n } else {\r\n // TODO: initialize in place\r\n }\r\n // TODO: alternatively, static elements could go into data segments while\r\n // dynamic ones are initialized on top? any benefits? (doesn't seem so)\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression( // reports\r\n expression.expression,\r\n this.currentFunction\r\n );\r\n if (resolved) {\r\n if (resolved.element.kind == ElementKind.CLASS_PROTOTYPE) {\r\n var prototype = resolved.element;\r\n var instance = prototype.resolveInclTypeArguments( // reports\r\n expression.typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance) {\r\n var thisExpr = compileBuiltinAllocate(this, instance, expression);\r\n var initializers = new Array();\r\n\r\n // use a temp local for 'this'\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n initializers.push(this.module.createSetLocal(tempLocal.index, thisExpr));\r\n\r\n // apply field initializers\r\n if (instance.members) {\r\n for (var member of instance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n var field = member;\r\n var fieldDeclaration = field.prototype.declaration;\r\n if (field.is(ElementFlags.CONSTANT)) {\r\n assert(false); // there are no built-in fields currently\r\n } else if (fieldDeclaration && fieldDeclaration.initializer) {\r\n initializers.push(this.module.createStore(field.type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(fieldDeclaration.initializer, field.type),\r\n field.type.toNativeType(),\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // apply constructor\r\n var constructorInstance = instance.constructorInstance;\r\n if (constructorInstance) {\r\n initializers.push(this.compileCall(constructorInstance, expression.arguments, expression,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType)\r\n ));\r\n }\r\n\r\n // return 'this'\r\n initializers.push(this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType));\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n thisExpr = this.module.createBlock(null, initializers, this.options.nativeSizeType);\r\n\r\n this.currentType = instance.type;\r\n return thisExpr;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n }\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileParenthesizedExpression(expression: ParenthesizedExpression, contextualType: Type): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(expression.expression, contextualType, ConversionKind.NONE);\r\n }\r\n\r\n compilePropertyAccessExpression(propertyAccess: PropertyAccessExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n case ElementKind.GLOBAL: // static property\r\n if (element.is(ElementFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, element, propertyAccess);\r\n }\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType);\r\n }\r\n this.currentType = (element).type;\r\n return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType());\r\n\r\n case ElementKind.ENUMVALUE: // enum value\r\n if (!this.compileEnum((element).enum)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.module.createI32((element).constantValue);\r\n }\r\n return this.module.createGetGlobal((element).internalName, NativeType.I32);\r\n\r\n case ElementKind.FIELD: // instance field\r\n assert(resolved.target != null);\r\n assert(resolved.targetExpression != null);\r\n assert((element).memoryOffset >= 0);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = (element).type;\r\n return this.module.createLoad(\r\n (element).type.size >> 3,\r\n (element).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n targetExpr,\r\n (element).type.toNativeType(),\r\n (element).memoryOffset\r\n );\r\n\r\n case ElementKind.PROPERTY: // instance property (here: getter)\r\n var getter = (element).getterPrototype;\r\n assert(getter != null);\r\n var getterInstance = (getter).resolve(null); // reports\r\n if (!getterInstance) return this.module.createUnreachable();\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n this.currentType = getterInstance.returnType;\r\n if (getterInstance.is(ElementFlags.INSTANCE)) {\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = getterInstance.returnType;\r\n return this.makeCall(getterInstance, [ targetExpr ]);\r\n } else {\r\n return this.makeCall(getterInstance);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var condition = makeIsTrueish(\r\n this.compileExpression(expression.condition, Type.u32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n var ifThen = this.compileExpression(expression.ifThen, contextualType);\r\n var ifElse = this.compileExpression(expression.ifElse, contextualType);\r\n return this.module.createIf(condition, ifThen, ifElse);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n var possiblyOverflows = false;\r\n\r\n switch (expression.operator) {\r\n\r\n case Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n default:\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n op = this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = this.options.isWasm64\r\n ? NativeType.I64\r\n : NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.module);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = this.module.createI64(1);\r\n break;\r\n\r\n case TypeKind.F32:\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = this.module.createF32(1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = this.module.createF64(1);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n default:\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n op = this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = this.options.isWasm64\r\n ? NativeType.I64\r\n : NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.module);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = this.module.createI64(1);\r\n break;\r\n\r\n case TypeKind.F32:\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = this.module.createF32(1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = this.module.createF64(1);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"unary postfix operator expected\");\r\n }\r\n\r\n var setValue: ExpressionRef;\r\n var tempLocal: Local | null = null;\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n setValue = this.module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n );\r\n\r\n // otherwise use a temp local for the intermediate value\r\n } else {\r\n tempLocal = this.currentFunction.getTempLocal(this.currentType);\r\n setValue = this.module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n );\r\n }\r\n\r\n if (possiblyOverflows) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n setValue = makeSmallIntegerWrap(setValue, this.currentType, this.module);\r\n }\r\n\r\n setValue = this.compileAssignmentWithValue(expression.operand, setValue, false);\r\n // ^ sets currentType = void\r\n if (contextualType == Type.void) {\r\n assert(!tempLocal);\r\n return setValue;\r\n }\r\n\r\n this.currentType = assert(tempLocal).type;\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal((tempLocal).index, getValue),\r\n setValue,\r\n this.module.createGetLocal((tempLocal).index, nativeType)\r\n ], nativeType);\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n var possiblyOverflows = false;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n\r\n case Token.PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did\r\n break;\r\n\r\n case Token.MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n this.addDebugLocation(expr, expression.range); // compileExpression normally does this\r\n } else {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.SubI32, this.module.createI32(0), expr);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(this.module),\r\n expr\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, this.module.createI64(0), expr);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n }\r\n break;\r\n\r\n case Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AddI64, expr, this.module.createI64(1));\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.AddF32, expr, this.module.createF32(1));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.AddF64, expr, this.module.createF64(1));\r\n break;\r\n }\r\n break;\r\n\r\n case Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // or if operand already did\r\n // fall-through\r\n default:\r\n expr = this.module.createBinary(BinaryOp.SubI32, expr, this.module.createI32(1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, expr, this.module.createI64(1));\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.SubF32, expr, this.module.createF32(1));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.SubF64, expr, this.module.createF64(1));\r\n break;\r\n }\r\n break;\r\n\r\n case Token.EXCLAMATION:\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n true // must wrap small integers\r\n );\r\n expr = makeIsFalseish(expr, this.currentType, this.module);\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.TILDE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n contextualType == Type.void\r\n ? ConversionKind.NONE\r\n : ConversionKind.IMPLICIT,\r\n false // retains low bits of small integers\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.XorI32, expr, this.module.createI32(-1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.XorI64, expr, this.module.createI64(-1, -1));\r\n break;\r\n }\r\n break;\r\n\r\n case Token.TYPEOF:\r\n // it might make sense to implement typeof in a way that a generic function can detect\r\n // whether its type argument is a class type or string. that could then be used, for\r\n // example, to generate hash codes for sets and maps, depending on the kind of type\r\n // parameter we have. ideally the comparison would not involve actual string comparison and\r\n // limit available operations to hard-coded string literals.\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"not implemented\");\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"unary operator expected\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n if (this.options.sourceMap != null) {\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) {\r\n source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n }\r\n range.debugInfoRef = expr;\r\n if (!this.currentFunction.debugLocations) this.currentFunction.debugLocations = [];\r\n this.currentFunction.debugLocations.push(range);\r\n }\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Wraps a 32-bit integer expression so it evaluates to a valid value of the specified type. */\r\nexport function makeSmallIntegerWrap(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n\r\n case TypeKind.I8:\r\n expr = module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n break;\r\n\r\n case TypeKind.I16:\r\n expr = module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n break;\r\n\r\n case TypeKind.U16:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\n\r\n/** Creates a comparison whether an expression is not 'true' in a broader sense. */\r\nexport function makeIsFalseish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n\r\n default: // any integer up to 32 bits\r\n expr = module.createUnary(UnaryOp.EqzI32, expr);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = module.createUnary(UnaryOp.EqzI64, expr);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: strings\r\n case TypeKind.ISIZE:\r\n expr = module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\n\r\n/** Creates a comparison whether an expression is 'true' in a broader sense. */\r\nexport function makeIsTrueish(\r\n expr: ExpressionRef,\r\n type: Type,\r\n module: Module\r\n): ExpressionRef {\r\n switch (type.kind) {\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: strings\r\n case TypeKind.ISIZE:\r\n if (type.size == 64) {\r\n expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/compiler.ts","import {\r\n Class,\r\n Function\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n I8,\r\n I16,\r\n I32,\r\n I64,\r\n ISIZE,\r\n\r\n // unsigned integers\r\n U8,\r\n U16,\r\n U32,\r\n U64,\r\n USIZE,\r\n BOOL, // sic\r\n\r\n // floats\r\n F32,\r\n F64,\r\n\r\n // other\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a sized integer type with a target specific bit size. */\r\n SIZE = 1 << 4,\r\n /** Is a small type that is emulated in a larger type. */\r\n SMALL = 1 << 5,\r\n /** Is a long type larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. Ceiled to 8-bits. */\r\n byteSize: i32;\r\n /** Underlying class type, if a class type. */\r\n classType: Class | null;\r\n /** Underlying function type, if a function type. */\r\n functionType: Function | null;\r\n /** Respective nullable type, if non-nullable. */\r\n nullableType: Type | null = null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: i32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classType = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Computes the sign-extending shift in the target type. */\r\n computeSmallIntegerShift(targetType: Type): u32 {\r\n return targetType.size - this.size;\r\n }\r\n\r\n /** Computes the truncating mask in the target type. */\r\n computeSmallIntegerMask(targetType: Type): u32 {\r\n return -1 >>> (targetType.size - this.size);\r\n }\r\n\r\n /** Tests if this type has the specified capabilities. */\r\n is(flags: TypeFlags): bool {\r\n return (this.flags & flags) == flags;\r\n }\r\n\r\n /** Tests if this type is a class type. */\r\n get isClass(): bool { return this.classType != null; }\r\n /** Tests if this type is a function type. */\r\n get isFunction(): bool { return this.functionType != null; }\r\n /** Tests if this type is a reference type. */\r\n get isReference(): bool { return this.classType != null || this.functionType != null; }\r\n\r\n /** Composes a class type from this type and a class. */\r\n asClass(classType: Class): Type {\r\n assert(this.kind == TypeKind.USIZE);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classType = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(functionType: Function): Type {\r\n assert(this.kind == TypeKind.U32 && !this.isReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.functionType = functionType;\r\n return ret;\r\n }\r\n\r\n /** Composes the respective nullable type of this type. */\r\n asNullable(): Type | null {\r\n assert(this.kind == TypeKind.USIZE);\r\n if (!this.nullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE) && this.isReference);\r\n this.nullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.nullableType.classType = this.classType;\r\n this.nullableType.functionType = this.functionType;\r\n }\r\n return this.nullableType;\r\n }\r\n\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n isAssignableTo(target: Type): bool {\r\n var currentClass: Class | null;\r\n var targetClass: Class | null;\r\n var currentFunction: Function | null;\r\n var targetFunction: Function | null;\r\n if (this.isReference) {\r\n if (target.isReference) {\r\n if (currentClass = this.classType) {\r\n if (targetClass = target.classType) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.functionType) {\r\n if (targetFunction = target.functionType) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n } else if (!target.isReference) {\r\n switch (this.kind) {\r\n\r\n case TypeKind.I8:\r\n switch (target.kind) {\r\n case TypeKind.I8: // same\r\n case TypeKind.I16: // larger\r\n case TypeKind.I32: // larger\r\n case TypeKind.I64: // larger\r\n case TypeKind.ISIZE: // larger\r\n case TypeKind.U8: // signed to unsigned\r\n case TypeKind.U16: // larger\r\n case TypeKind.U32: // larger\r\n case TypeKind.U64: // larger\r\n case TypeKind.USIZE: // larger\r\n case TypeKind.F32: // safe\r\n case TypeKind.F64: // safe\r\n return true;\r\n }\r\n break;\r\n\r\n case TypeKind.I16:\r\n switch (target.kind) {\r\n case TypeKind.I16: // same\r\n case TypeKind.I32: // larger\r\n case TypeKind.I64: // larger\r\n case TypeKind.ISIZE: // larger\r\n case TypeKind.U16: // signed to unsigned\r\n case TypeKind.U32: // larger\r\n case TypeKind.U64: // larger\r\n case TypeKind.USIZE: // larger\r\n case TypeKind.F32: // safe\r\n case TypeKind.F64: // safe\r\n return true;\r\n }\r\n break;\r\n\r\n case TypeKind.I32:\r\n switch (target.kind) {\r\n case TypeKind.I32: // same\r\n case TypeKind.I64: // larger\r\n case TypeKind.ISIZE: // same or larger\r\n case TypeKind.U32: // signed to unsigned\r\n case TypeKind.U64: // larger\r\n case TypeKind.USIZE: // signed to unsigned or larger\r\n case TypeKind.F64: // safe\r\n return true;\r\n }\r\n break;\r\n\r\n case TypeKind.I64:\r\n switch (target.kind) {\r\n case TypeKind.I64: // same\r\n case TypeKind.U64: // signed to unsigned\r\n return true;\r\n case TypeKind.ISIZE: // possibly same\r\n case TypeKind.USIZE: // possibly signed to unsigned\r\n return target.size == 64;\r\n }\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n switch (target.kind) {\r\n case TypeKind.I32: // possibly same\r\n case TypeKind.U32: // possibly signed to unsigned\r\n return this.size == 32;\r\n case TypeKind.I64: // same or larger\r\n case TypeKind.ISIZE: // same\r\n case TypeKind.U64: // signed to unsigned or larger\r\n case TypeKind.USIZE: // signed to unsigned\r\n return true;\r\n case TypeKind.F64: // possibly safe\r\n return target.size == 32;\r\n }\r\n break;\r\n\r\n case TypeKind.U8:\r\n switch (target.kind) {\r\n case TypeKind.I16: // larger\r\n case TypeKind.I32: // larger\r\n case TypeKind.I64: // larger\r\n case TypeKind.ISIZE: // larger\r\n case TypeKind.U8: // same\r\n case TypeKind.U16: // larger\r\n case TypeKind.U32: // larger\r\n case TypeKind.U64: // larger\r\n case TypeKind.USIZE: // larger\r\n case TypeKind.F32: // safe\r\n case TypeKind.F64: // safe\r\n return true;\r\n }\r\n break;\r\n\r\n case TypeKind.U16:\r\n switch (target.kind) {\r\n case TypeKind.I32: // larger\r\n case TypeKind.I64: // larger\r\n case TypeKind.ISIZE: // larger\r\n case TypeKind.U16: // same\r\n case TypeKind.U32: // larger\r\n case TypeKind.U64: // larger\r\n case TypeKind.USIZE: // larger\r\n case TypeKind.F32: // safe\r\n case TypeKind.F64: // safe\r\n return true;\r\n }\r\n break;\r\n\r\n case TypeKind.U32:\r\n switch (target.kind) {\r\n case TypeKind.I64: // larger\r\n case TypeKind.U32: // same\r\n case TypeKind.U64: // larger\r\n case TypeKind.USIZE: // same or larger\r\n case TypeKind.F64: // safe\r\n return true;\r\n }\r\n break;\r\n\r\n case TypeKind.U64:\r\n switch (target.kind) {\r\n case TypeKind.U64: // same\r\n return true;\r\n case TypeKind.USIZE: // possibly same\r\n return target.size == 64;\r\n }\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n switch (target.kind) {\r\n case TypeKind.U32: // possibly same\r\n return this.size == 32;\r\n case TypeKind.U64: // same or larger\r\n case TypeKind.USIZE: // same\r\n return true;\r\n case TypeKind.F64: // possibly safe\r\n return target.size == 32;\r\n }\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n switch (target.kind) {\r\n case TypeKind.I8: // larger\r\n case TypeKind.I16: // larger\r\n case TypeKind.I32: // larger\r\n case TypeKind.I64: // larger\r\n case TypeKind.ISIZE: // larger\r\n case TypeKind.U8: // larger\r\n case TypeKind.U16: // larger\r\n case TypeKind.U32: // larger\r\n case TypeKind.U64: // larger\r\n case TypeKind.USIZE: // larger\r\n case TypeKind.BOOL: // same\r\n return true;\r\n }\r\n break;\r\n\r\n case TypeKind.F32:\r\n switch (target.kind) {\r\n case TypeKind.F32: // same\r\n case TypeKind.F64: // larger\r\n return true;\r\n }\r\n break;\r\n\r\n case TypeKind.F64:\r\n return target.kind == TypeKind.F64;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Converts this type to its TypeScript representation. */\r\n toString(kindOnly: bool = false): string {\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE:\r\n if (kindOnly) return \"usize\";\r\n return this.classType\r\n ? this.classType.toString()\r\n : this.functionType\r\n ? this.functionType.toTypeString()\r\n : \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: assert(false); return \"\";\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n\r\n default:\r\n return NativeType.I32;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return NativeType.I64;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n\r\n case TypeKind.F32:\r\n return NativeType.F32;\r\n\r\n case TypeKind.F64:\r\n return NativeType.F64;\r\n\r\n case TypeKind.VOID:\r\n return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(0);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(0);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(0);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(0);\r\n\r\n case TypeKind.F64:\r\n return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(1);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(1);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(1);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(1);\r\n\r\n case TypeKind.F64:\r\n return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(-1);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(-1);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(-1, -1);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(-1);\r\n\r\n case TypeKind.F64:\r\n return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n\r\n default:\r\n return \"i\";\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return \"I\";\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n return this.size == 64 ? \"I\" : \"i\";\r\n\r\n case TypeKind.F32:\r\n return \"f\";\r\n\r\n case TypeKind.F64:\r\n return \"F\";\r\n\r\n case TypeKind.VOID:\r\n return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var k = types.length;\r\n var ret = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n ret[i] = types[i].toNativeType();\r\n }\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var k = types.length;\r\n if (!k) return \"\";\r\n var sb = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n sb[i] = types[i].toString();\r\n }\r\n return sb.join(\", \");\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/types.ts","import {\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER\r\n} from \"./program\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalize as normalizePath,\r\n resolve as resolvePath\r\n} from \"./util/path\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n FUNCTIONARROW,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // other\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n MODIFIER,\r\n PARAMETER,\r\n SWITCHCASE\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n\r\n // types\r\n\r\n static createType(\r\n identifier: IdentifierExpression,\r\n typeArguments: TypeNode[],\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = identifier;\r\n type.typeArguments = typeArguments;\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentOpt(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: TypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: TypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration,\r\n isArrow: bool = false\r\n ): FunctionExpression {\r\n var expr = isArrow\r\n ? new FunctionArrowExpression()\r\n : new FunctionExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: TypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameter[],\r\n extendsType: TypeNode | null,\r\n implementsTypes: TypeNode[],\r\n members: DeclarationStatement[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDecorator(\r\n expression: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): Decorator {\r\n var stmt = new Decorator();\r\n stmt.range = range;\r\n stmt.name = expression; expression.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n if (expression.kind == NodeKind.IDENTIFIER) {\r\n switch ((expression).text) {\r\n case \"global\": stmt.decoratorKind = DecoratorKind.GLOBAL; break;\r\n case \"operator\": stmt.decoratorKind = DecoratorKind.OPERATOR; break;\r\n case \"unmanaged\": stmt.decoratorKind = DecoratorKind.UNMANAGED; break;\r\n case \"offset\": stmt.decoratorKind = DecoratorKind.OFFSET; break;\r\n default: stmt.decoratorKind = DecoratorKind.CUSTOM; break;\r\n }\r\n } else {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[],\r\n path: StringLiteralExpression | null,\r\n modifiers: Modifier[] | null,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n members: DeclarationStatement[],\r\n modifiers: Modifier[] | null,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: TypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameter {\r\n var elem = new TypeParameter();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: TypeNode | null,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): Parameter {\r\n var elem = new Parameter();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameter[] | null,\r\n parameters: Parameter[],\r\n returnType: TypeNode | null,\r\n body: Statement | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.parameters = parameters; setParent(parameters, stmt);\r\n stmt.returnType = returnType; if (returnType) returnType.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameter[] | null,\r\n parameters: Parameter[],\r\n returnType: TypeNode | null,\r\n body: Statement | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.parameters = parameters; setParent(parameters, stmt);\r\n stmt.returnType = returnType; if (returnType) returnType.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createModifier(kind: ModifierKind, range: Range): Modifier {\r\n var elem = new Modifier();\r\n elem.range = range;\r\n elem.modifierKind = kind;\r\n return elem;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n alias: TypeNode,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.alias = alias; alias.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: TypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.modifiers = modifiers; // inherited from parent VariableStatement\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends Node {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: TypeNode[];\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameter extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport const enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport const enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: TypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: TypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an arrow function expression. */\r\nexport class FunctionArrowExpression extends FunctionExpression {\r\n kind = NodeKind.FUNCTIONARROW;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\n/** Indicates the specific kind of a modifier. */\r\nexport enum ModifierKind {\r\n ASYNC,\r\n CONST,\r\n LET,\r\n DECLARE,\r\n EXPORT,\r\n IMPORT,\r\n STATIC,\r\n ABSTRACT,\r\n PUBLIC,\r\n PRIVATE,\r\n PROTECTED,\r\n READONLY,\r\n GET,\r\n SET,\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n this.internalPath = mangleInternalPath(this.normalizedPath);\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of decorators. */\r\n decorators: Decorator[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return (\r\n hasModifier(ModifierKind.EXPORT, this.modifiers) &&\r\n (parent).isTopLevelExport\r\n );\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return (\r\n hasModifier(ModifierKind.STATIC, this.modifiers) &&\r\n (parent).isTopLevelExport\r\n );\r\n }\r\n return (\r\n parent.kind == NodeKind.SOURCE &&\r\n hasModifier(ModifierKind.EXPORT, this.modifiers)\r\n );\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: TypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameter[];\r\n /** Base class type being extended. */\r\n extendsType: TypeNode | null;\r\n /** Interface types being implemented. */\r\n implementsTypes: TypeNode[];\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Built-in decorator kinds. */\r\nexport const enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n UNMANAGED,\r\n OFFSET\r\n}\r\n\r\n/** Depresents a decorator. */\r\nexport class Decorator extends Statement {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n modifiers = null;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of members. */\r\n members: ExportMember[];\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameter[] | null;\r\n /** Accepted parameters. */\r\n parameters: Parameter[];\r\n /** Return type. */\r\n returnType: TypeNode | null;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n return this.typeParameters != null && this.typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n modifiers = null;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class Parameter extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: TypeNode | null;\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a single modifier. */\r\nexport class Modifier extends Node {\r\n kind = NodeKind.MODIFIER;\r\n\r\n /** Specific modifier kind. */\r\n modifierKind: ModifierKind;\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type being aliased. */\r\n alias: TypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n\r\n /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of decorators. */\r\n decorators: Decorator[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Cached unused modifiers for reuse. */\r\nvar reusableModifiers: Modifier[] | null = null;\r\n\r\nexport function setReusableModifiers(modifiers: Modifier[]): void {\r\n reusableModifiers = modifiers;\r\n}\r\n\r\n/** Creates a new modifiers array. */\r\nexport function createModifiers(): Modifier[] {\r\n var ret: Modifier[];\r\n if (reusableModifiers != null) {\r\n ret = reusableModifiers;\r\n reusableModifiers = null;\r\n } else {\r\n ret = [];\r\n }\r\n ret.length = 0;\r\n return ret;\r\n}\r\n\r\n// Utility\r\n\r\n/** Adds a modifier to a set of modifiers. Creates a new set if `null`. */\r\nexport function addModifier(modifier: Modifier, modifiers: Modifier[] | null): Modifier[] {\r\n if (modifiers == null) modifiers = createModifiers();\r\n modifiers.push(modifier);\r\n return modifiers;\r\n}\r\n\r\n/** Gets a specific modifier from the specified set of modifiers. */\r\nexport function getModifier(kind: ModifierKind, modifiers: Modifier[] | null): Modifier | null {\r\n if (modifiers) {\r\n for (var i = 0, k = modifiers.length; i < k; ++i) {\r\n if (modifiers[i].modifierKind == kind) {\r\n return modifiers[i];\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Tests whether a modifier exists in the specified set of modifiers. */\r\nexport function hasModifier(kind: ModifierKind, modifiers: Modifier[] | null): bool {\r\n return getModifier(kind, modifiers) != null;\r\n}\r\n\r\n/** Gets the first decorator by name within at set of decorators, if present. */\r\nexport function getFirstDecorator(name: string, decorators: Decorator[] | null): Decorator | null {\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n var decorator = decorators[i];\r\n var expression = decorator.name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return decorator;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Tests if a specific decorator is present within the specified decorators. */\r\nexport function hasDecorator(name: string, decorators: Decorator[] | null): bool {\r\n return getFirstDecorator(name, decorators) != null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n hasModifier(ModifierKind.STATIC, declaration.modifiers)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\nfunction setParentOpt(nodes: (Node | null)[], parent: Node): void {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n var node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/ast.ts","/*\r\n\r\n This is a modified version of TypeScript's scanner that doesn't perform as much bookkeeping, simply\r\n skips over trivia and provides a more general mark/reset mechanism for the parser to utilize on\r\n ambiguous tokens.\r\n\r\n next() advances the token\r\n peek() peeks for the next token\r\n skip(token) skips over a token if possible\r\n mark() marks at current token\r\n reset() resets to marked state\r\n range() gets the range of the current token\r\n\r\n readFloat() on FLOATLITERAL\r\n readIdentifier() on IDENTIFIER\r\n readInteger() on INTEGERLITERAL\r\n readString() on STRINGLITERAL\r\n\r\n*/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util/charcode\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport namespace Token {\r\n\r\n export function fromKeyword(text: string): Token {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n case \"break\": return Token.BREAK;\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n case \"get\": return Token.GET;\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n case \"keyof\": return Token.KEYOF;\r\n case \"let\": return Token.LET;\r\n case \"module\": return Token.MODULE;\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n case \"of\": return Token.OF;\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n case \"yield\": return Token.YIELD;\r\n default: return Token.INVALID;\r\n }\r\n }\r\n\r\n export function isAlsoIdentifier(token: Token): bool {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n export function operatorToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: assert(false); return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var pos = this.start;\r\n var line = 1;\r\n while (pos-- > 0) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) {\r\n line++;\r\n }\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var pos = this.start;\r\n var column = 0;\r\n while (pos-- > 0) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n column++;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n markedPos: i32 = 0;\r\n markedToken: Token = -1;\r\n markedTokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(preferIdentifier: bool = false): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(preferIdentifier);\r\n }\r\n\r\n private unsafeNext(preferIdentifier: bool = false, maxTokenLength: i32 = i32.MAX_VALUE): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n var c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n\r\n case CharCode.CARRIAGERETURN:\r\n if (\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n break;\r\n\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE:\r\n ++this.pos;\r\n break;\r\n\r\n case CharCode.EXCLAMATION:\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n\r\n case CharCode.PERCENT:\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n\r\n case CharCode.AMPERSAND:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n\r\n case CharCode.OPENPAREN:\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n\r\n case CharCode.CLOSEPAREN:\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n\r\n case CharCode.ASTERISK:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n\r\n case CharCode.PLUS:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n\r\n case CharCode.COMMA:\r\n ++this.pos;\r\n return Token.COMMA;\r\n\r\n case CharCode.MINUS:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n\r\n case CharCode.DOT:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n\r\n case CharCode.SLASH:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n // TODO: triple-slash?\r\n // if (\r\n // this.pos + 1 < this.end &&\r\n // text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n // ) {\r\n // }\r\n while (++this.pos < this.end) {\r\n if (isLineBreak(text.charCodeAt(this.pos))) break;\r\n }\r\n continue;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n var closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n }\r\n continue;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9:\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n\r\n case CharCode.COLON:\r\n ++this.pos;\r\n return Token.COLON;\r\n\r\n case CharCode.SEMICOLON:\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n\r\n case CharCode.LESSTHAN:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n\r\n case CharCode.EQUALS:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n\r\n case CharCode.GREATERTHAN:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n\r\n case CharCode.QUESTION:\r\n ++this.pos;\r\n return Token.QUESTION;\r\n\r\n case CharCode.OPENBRACKET:\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n\r\n case CharCode.CLOSEBRACKET:\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n\r\n case CharCode.CARET:\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n\r\n case CharCode.OPENBRACE:\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n\r\n case CharCode.BAR:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n\r\n case CharCode.CLOSEBRACE:\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n\r\n case CharCode.TILDE:\r\n ++this.pos;\r\n return Token.TILDE;\r\n\r\n case CharCode.AT:\r\n ++this.pos;\r\n return Token.AT;\r\n\r\n default:\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n var posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n var keywordText = text.substring(posBefore, this.pos);\r\n var keywordToken = Token.fromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n !(preferIdentifier && Token.isAlsoIdentifier(keywordToken))\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n preferIdentifier: bool = false,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(preferIdentifier, maxCompoundLength);\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skip(token: Token): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n this.token = this.unsafeNext(token == Token.IDENTIFIER, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n // skipUntil(token1: Token, token2: Token = -1): bool {\r\n // var next: Token;\r\n // do {\r\n // if ((next = this.peek()) == Token.ENDOFFILE)\r\n // return false;\r\n // if (next == token1 || next == token2)\r\n // return true;\r\n // this.next();\r\n // } while (true);\r\n // }\r\n\r\n mark(): void {\r\n this.markedPos = this.pos;\r\n this.markedToken = this.token;\r\n this.markedTokenPos = this.tokenPos;\r\n }\r\n\r\n reset(): void {\r\n this.pos = this.markedPos;\r\n this.token = this.markedToken;\r\n this.tokenPos = this.markedTokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n var c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n\r\n case CharCode._0:\r\n return \"\\0\";\r\n\r\n case CharCode.b:\r\n return \"\\b\";\r\n\r\n case CharCode.t:\r\n return \"\\t\";\r\n\r\n case CharCode.n:\r\n return \"\\n\";\r\n\r\n case CharCode.v:\r\n return \"\\v\";\r\n\r\n case CharCode.f:\r\n return \"\\f\";\r\n\r\n case CharCode.r:\r\n return \"\\r\";\r\n\r\n case CharCode.SINGLEQUOTE:\r\n return \"'\";\r\n\r\n case CharCode.DOUBLEQUOTE:\r\n return \"\\\"\";\r\n\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n\r\n case CharCode.CARRIAGERETURN:\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR:\r\n return \"\";\r\n default:\r\n return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n var c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n var c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n\r\n case CharCode.g:\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n\r\n case CharCode.i:\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n\r\n case CharCode.m:\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n\r\n default:\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o:\r\n return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n var c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if (c < CharCode._0 || c > CharCode._9) break;\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n\r\n case CharCode.X:\r\n case CharCode.x:\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n\r\n case CharCode.B:\r\n case CharCode.b:\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n\r\n case CharCode.O:\r\n case CharCode.o:\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n var start = this.pos;\r\n ++this.pos;\r\n var value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/tokenizer.ts","// code below is generated from diagnosticsMessages.json by scripts/build-diagnostics\n/* tslint:disable:max-line-length */\n\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Structs_cannot_extend_classes_and_vice_versa = 207,\n Structs_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n A_class_may_only_extend_another_class = 1311,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054\n}\n\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Structs cannot extend classes and vice-versa.\";\n case 208: return \"Structs cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1311: return \"A class may only extend another class.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n default: return \"\";\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/diagnosticMessages.generated.ts","/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK:\r\n return true;\r\n default:\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is an octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/charcode.ts","import {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalize(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n var ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolve(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalize(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/path.ts","import \"../../../std/portable\";\r\nimport \"./binaryen\";\r\nimport \"./i64\";\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/glue/js/index.ts","var globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./std/portable.js\n// module id = 13\n// module chunks = 0","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function toText() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrint(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\r\nModule.prototype.toAsmjs = function toAsmjs() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrintAsmjs(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/glue/js/binaryen.js\n// module id = 14\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"binaryen\"\n// module id = 15\n// module chunks = 0","import {\r\n Compiler,\r\n ConversionKind,\r\n\r\n makeSmallIntegerWrap\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n Expression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId\r\n} from \"./module\";\r\n\r\nimport {\r\n Global,\r\n FunctionPrototype,\r\n Local,\r\n ElementFlags,\r\n Class,\r\n ElementKind\r\n} from \"./program\";\r\n\r\n/** Compiles a get of a built-in global. */\r\nexport function compileGetConstant(\r\n compiler: Compiler,\r\n global: Global,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (global.internalName) {\r\n\r\n case \"NaN\": // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(NaN);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(NaN);\r\n }\r\n\r\n case \"Infinity\": // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(Infinity);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(Infinity);\r\n }\r\n\r\n case \"HEAP_BASE\": // never inlined for linking purposes\r\n compiler.currentType = compiler.options.usizeType;\r\n return compiler.module.createGetGlobal(\"HEAP_BASE\", compiler.currentType.toNativeType());\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return compiler.module.createUnreachable();\r\n}\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n var tempLocal0: Local,\r\n tempLocal1: Local;\r\n\r\n var type: Type,\r\n offset: i32;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // math\r\n\r\n case \"isNaN\": // isNaN(value: T) -> bool\r\n compiler.currentType = Type.bool;\r\n if (operands.length != 1) {\r\n if (typeArguments && typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createBinary(BinaryOp.NeF32,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createBinary(BinaryOp.NeF64,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createGetLocal(tempLocal0.index, NativeType.F64)\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n\r\n default: // every other type is never NaN\r\n ret = module.createI32(0);\r\n break;\r\n\r\n }\r\n compiler.currentType = Type.bool;\r\n return ret;\r\n\r\n case \"isFinite\": // isFinite(value: T) -> bool\r\n compiler.currentType = Type.bool;\r\n if (operands.length != 1) {\r\n if (typeArguments && typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createSelect(\r\n module.createBinary(BinaryOp.NeF32,\r\n module.createUnary(UnaryOp.AbsF32,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n module.createF32(Infinity)\r\n ),\r\n module.createI32(0),\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createGetLocal(tempLocal0.index, NativeType.F32),\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createSelect(\r\n module.createBinary(BinaryOp.NeF64,\r\n module.createUnary(UnaryOp.AbsF64,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n module.createF64(Infinity)\r\n ),\r\n module.createI32(0),\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createGetLocal(tempLocal0.index, NativeType.F64),\r\n module.createGetLocal(tempLocal0.index, NativeType.F64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n\r\n default: // every other type is always finite\r\n ret = module.createI32(1);\r\n break;\r\n }\r\n compiler.currentType = Type.bool;\r\n return ret;\r\n\r\n case \"clz\": // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"ctz\": // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"popcnt\": // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"rotl\": // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n ret = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType,\r\n module\r\n );\r\n // fall-through\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n\r\n default:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"rotr\": // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n ret = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType,\r\n module\r\n );\r\n break;\r\n\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n\r\n default:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"abs\": // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n // doesn't need sign-extension here because ifFalse below is either positive\r\n // or MIN_VALUE (-MIN_VALUE == MIN_VALUE) if selected\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal0.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL:\r\n ret = arg0;\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n ret = module.createUnreachable();\r\n break;\r\n\r\n default: // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"max\": // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n\r\n default: // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"min\": // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n\r\n default: // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"ceil\": // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default: // any integer\r\n ret = arg0;\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"floor\": // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default: // any integer\r\n ret = arg0;\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"copysign\": // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n // TODO: does an integer version make sense?\r\n\r\n case TypeKind.F32:\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n\r\n default:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"nearest\": // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default: // any integer\r\n ret = arg0;\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"reinterpret\": // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (typeArguments[0].kind) {\r\n\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n arg0 = compiler.compileExpression(operands[0], Type.f32);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n arg0 = compiler.compileExpression(operands[0], Type.f64);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (typeArguments[0].isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n arg0 = compiler.compileExpression(operands[0], Type.u32);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n arg0 = compiler.compileExpression(operands[0], Type.u64);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n\r\n default: // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n\r\n case \"sqrt\": // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n // TODO: integer versions (that return f64 or convert)?\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n\r\n default:\r\n // case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"trunc\": // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default: // any integer\r\n ret = arg0;\r\n break;\r\n\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n // memory access\r\n\r\n case \"load\": // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size >= typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n\r\n case \"store\": // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // wraps a larger integer type to a smaller one, i.e. i32.store8\r\n : ConversionKind.IMPLICIT\r\n );\r\n if (\r\n compiler.currentType.is(TypeFlags.INTEGER) &&\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n typeArguments[0].size > compiler.currentType.size\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n\r\n case \"sizeof\": // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n ret = compiler.options.isWasm64\r\n ? module.createI64(typeArguments[0].byteSize, 0)\r\n : module.createI32(typeArguments[0].byteSize);\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n return ret;\r\n\r\n // control flow\r\n\r\n case \"select\": // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], type = compiler.currentType);\r\n arg2 = compiler.compileExpression(operands[2], Type.bool);\r\n compiler.currentType = type;\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"unreachable\": // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n\r\n // host operations\r\n\r\n case \"current_memory\": // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n\r\n case \"grow_memory\": // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], compiler.options.usizeType);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n\r\n case \"set_memory\": // set_memory(dest: usize, value: u32, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], Type.u32);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n\r\n // other\r\n\r\n case \"changetype\": // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n } else if (typeArguments[0].kind != TypeKind.USIZE) { // any usize\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.kind != TypeKind.USIZE) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n\r\n case \"assert\": // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n\r\n type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n var abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n\r\n case TypeKind.F32:\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64)\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.F64)\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n return ret;\r\n\r\n // conversions\r\n\r\n case \"i8\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i8, ConversionKind.EXPLICIT);\r\n\r\n case \"i16\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i16, ConversionKind.EXPLICIT);\r\n\r\n case \"i32\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i32, ConversionKind.EXPLICIT);\r\n\r\n case \"i64\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i64, ConversionKind.EXPLICIT);\r\n\r\n case \"isize\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT\r\n );\r\n\r\n case \"u8\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u8, ConversionKind.EXPLICIT);\r\n\r\n case \"u16\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u16, ConversionKind.EXPLICIT);\r\n\r\n case \"u32\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u32, ConversionKind.EXPLICIT);\r\n\r\n case \"u64\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u64, ConversionKind.EXPLICIT);\r\n\r\n case \"usize\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT\r\n );\r\n\r\n case \"bool\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.bool, ConversionKind.EXPLICIT);\r\n\r\n case \"f32\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.f32, ConversionKind.EXPLICIT);\r\n\r\n case \"f64\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.f64, ConversionKind.EXPLICIT);\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I64 ||\r\n _BinaryenConstGetValueI64High(expr) != 0 ||\r\n (value = _BinaryenConstGetValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I32 ||\r\n (value = _BinaryenConstGetValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n cls: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = cls.program;\r\n var prototype = program.elements.get(compiler.options.allocateImpl);\r\n if (prototype) {\r\n if (prototype.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = (prototype).resolve(); // reports\r\n if (instance) {\r\n if (\r\n !instance.is(ElementFlags.GENERIC) &&\r\n instance.returnType == compiler.options.usizeType &&\r\n instance.parameters &&\r\n instance.parameters.length == 1 &&\r\n instance.parameters[0].type == compiler.options.usizeType\r\n ) {\r\n if (compiler.compileFunction(instance)) { // reports\r\n return compiler.makeCall(instance, [\r\n compiler.options.isWasm64\r\n ? compiler.module.createI64(cls.currentMemoryOffset)\r\n : compiler.module.createI32(cls.currentMemoryOffset)\r\n ]);\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Implementation_0_must_match_the_signature_1,\r\n reportNode.range, compiler.options.allocateImpl, \"(size: usize): usize\"\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, compiler.options.allocateImpl\r\n );\r\n }\r\n return compiler.module.createUnreachable();\r\n}\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n var abort: ExpressionRef = module.createUnreachable();\r\n var abortPrototype = compiler.program.elements.get(\"abort\");\r\n var stringType = compiler.program.types.get(\"string\");\r\n if (\r\n abortPrototype &&\r\n abortPrototype.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n stringType\r\n ) {\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (\r\n abortInstance &&\r\n compiler.compileFunction(abortInstance) // reports\r\n ) {\r\n assert(abortInstance.parameters && abortInstance.parameters.length == 4); // to be sure\r\n abort = module.createBlock(null, [\r\n compiler.makeCall(abortInstance, [\r\n message != null\r\n ? compiler.compileExpression(message, stringType)\r\n : compiler.options.usizeType.toNativeZero(module),\r\n compiler.compileStaticString(reportNode.range.source.normalizedPath),\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ]),\r\n abort\r\n ]);\r\n }\r\n }\r\n return abort;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/builtins.ts","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/glue/js/i64.js\n// module id = 17\n// module chunks = 0","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/long/src/long.js\n// module id = 18\n// module chunks = 0","//////////////////////// Low-level C-Like Compiler API /////////////////////////\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\n/** Parses a source file. If `parser` has been omitted a new one is created. */\r\nexport function parseFile(text: string, path: string, isEntry: bool = false,\r\n parser: Parser | null = null\r\n): Parser {\r\n if (!parser) {\r\n parser = new Parser();\r\n isEntry = true;\r\n }\r\n parser.parseFile(text, path, isEntry);\r\n return parser;\r\n}\r\n\r\n/** Obtains the next required file's path. Returns `null` once complete. */\r\nexport function nextFile(parser: Parser): string | null {\r\n return parser.nextFile();\r\n}\r\n\r\n/** Obtains the next diagnostic message. Returns `null` once complete. */\r\nexport function nextDiagnostic(parser: Parser): DiagnosticMessage | null {\r\n var program = parser.program;\r\n return program.diagnosticsOffset < program.diagnostics.length\r\n ? program.diagnostics[program.diagnosticsOffset++]\r\n : null;\r\n}\r\n\r\n/** Formats a diagnostic message to a string. */\r\nexport { formatDiagnosticMessage as formatDiagnostic };\r\n\r\n/** Tests whether a diagnostic is informatory. */\r\nexport function isInfo(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.INFO;\r\n}\r\n\r\n/** Tests whether a diagnostic is a warning. */\r\nexport function isWarning(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.WARNING;\r\n}\r\n\r\n/** Tests whether a diagnostic is an error. */\r\nexport function isError(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.ERROR;\r\n}\r\n\r\n/** Creates a new set of compiler options. */\r\nexport function createOptions(): Options {\r\n return new Options();\r\n}\r\n\r\n/** Sets the `target` option. */\r\nexport function setTarget(options: Options, target: Target): void {\r\n options.target = target;\r\n}\r\n\r\n/** Sets the `noTreeShaking` option. */\r\nexport function setNoTreeShaking(options: Options, noTreeShaking: bool): void {\r\n options.noTreeShaking = noTreeShaking;\r\n}\r\n\r\n/** Sets the `noAssert` option. */\r\nexport function setNoAssert(options: Options, noAssert: bool): void {\r\n options.noAssert = noAssert;\r\n}\r\n\r\n/** Sets the `noMemory` option. */\r\nexport function setNoMemory(options: Options, noMemory: bool): void {\r\n options.noMemory = noMemory;\r\n}\r\n\r\n/** Sets the `importMemory` option. */\r\nexport function setImportMemory(options: Options, importMemory: bool): void {\r\n options.importMemory = importMemory;\r\n}\r\n\r\n/** Sets the `sourceMap` option. */\r\nexport function setSourceMap(options: Options, sourceMap: bool): void {\r\n options.sourceMap = sourceMap;\r\n}\r\n\r\n/** Sets the `memoryBase` option. */\r\nexport function setMemoryBase(options: Options, memoryBase: u32): void {\r\n options.memoryBase = memoryBase;\r\n}\r\n\r\n/** Compiles the sources computed by the parser to a module. */\r\nexport function compile(parser: Parser, options: Options | null = null): Module {\r\n var program = parser.finish();\r\n var compiler = new Compiler(program, options);\r\n return compiler.compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n}\r\n\r\n/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX } from \"./program\";\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.ts","import {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n readString\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module) {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = readString(_BinaryenFunctionGetName(func)) || \"$\" + this.functionId.toString(10);\r\n var body = _BinaryenFunctionGetBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (var i: Index = 0, k: Index = _BinaryenFunctionGetNumParams(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetParam(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetResult(func)));\r\n this.push(\" \");\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = _BinaryenExpressionGetId(expr);\r\n var type = _BinaryenExpressionGetType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n\r\n case ExpressionId.Block: // TODO: magic\r\n if ((string = readString(_BinaryenBlockGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = _BinaryenBlockGetNumChildren(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(_BinaryenBlockGetChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n\r\n case ExpressionId.If:\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n if (nested = _BinaryenIfGetIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(_BinaryenIfGetIfFalse(expr));\r\n }\r\n return;\r\n\r\n case ExpressionId.Loop:\r\n if ((string = readString(_BinaryenLoopGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(_BinaryenLoopGetBody(expr));\r\n this.push(\"while (0);\\n\");\r\n\r\n case ExpressionId.Break:\r\n if (nested = _BinaryenBreakGetCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = readString(_BinaryenBreakGetName(expr))) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n\r\n case ExpressionId.Switch:\r\n\r\n case ExpressionId.Call:\r\n\r\n case ExpressionId.CallImport:\r\n\r\n case ExpressionId.CallIndirect:\r\n\r\n case ExpressionId.GetLocal:\r\n this.push(\"$\");\r\n this.push(_BinaryenGetLocalGetIndex(expr).toString(10));\r\n return;\r\n\r\n case ExpressionId.SetLocal:\r\n this.push(\"$\");\r\n this.push(_BinaryenSetLocalGetIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(_BinaryenSetLocalGetValue(expr));\r\n return;\r\n\r\n case ExpressionId.GetGlobal:\r\n\r\n case ExpressionId.SetGlobal:\r\n\r\n case ExpressionId.Load:\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenLoadGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenLoadGetPtr(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case ExpressionId.Store:\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenStoreGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenStoreGetPtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenStoreGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case ExpressionId.Const:\r\n switch (type) {\r\n\r\n case NativeType.I32:\r\n this.push(_BinaryenConstGetValueI32(expr).toString(10));\r\n return;\r\n\r\n case NativeType.I64:\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n\r\n case NativeType.F32:\r\n this.push(_BinaryenConstGetValueF32(expr).toString(10));\r\n return;\r\n\r\n case NativeType.F64:\r\n this.push(_BinaryenConstGetValueF64(expr).toString(10));\r\n return;\r\n }\r\n break;\r\n\r\n case ExpressionId.Unary:\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n\r\n case UnaryOp.ClzI32:\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.CtzI32:\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.PopcntI32:\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64:\r\n this.push(\"-\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.AbsF32:\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.CeilF32:\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.FloorF32:\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.TruncF32:\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.NearestF32:\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.SqrtF32:\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64:\r\n this.push(\"!\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ClzI64:\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.CtzI64:\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.PopcntI64:\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.AbsF64:\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.CeilF64:\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.FloorF64:\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.TruncF64:\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.NearestF64:\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.SqrtF64:\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.ExtendI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ExtendU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.WrapI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF32ToI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF32ToI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF32ToU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF32ToU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF64ToI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF64ToI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF64ToU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF64ToU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ReinterpretF32:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.ReinterpretF64:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.ConvertI32ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertI32ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertU32ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertU32ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertI64ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertI64ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertU64ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertU64ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.PromoteF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.DemoteF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ReinterpretI32:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.ReinterpretI64:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n break;\r\n\r\n case ExpressionId.Binary: // TODO: precedence\r\n switch (_BinaryenBinaryGetOp(expr)) {\r\n\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.DivU32:\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.RemU32:\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.RotlI32:\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.RotrI32:\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LtU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LeU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GtU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GeU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.DivU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.RemU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.RotlI64:\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.RotrI64:\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.LtU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LeU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GtU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GeU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.CopysignF32:\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.MinF32:\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.MaxF32:\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.CopysignF64:\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.MinF64:\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.MaxF64:\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n return;\r\n\r\n case ExpressionId.Select:\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(_BinaryenSelectGetIfTrue(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetIfFalse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetCondition(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case ExpressionId.Drop:\r\n this.decompileExpression(_BinaryenDropGetValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n\r\n case ExpressionId.Return:\r\n if (nested = _BinaryenReturnGetValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n\r\n case ExpressionId.Host:\r\n switch (_BinaryenHostGetOp(expr)) {\r\n case HostOp.CurrentMemory:\r\n this.push(\"current_memory()\");\r\n return;\r\n case HostOp.GrowMemory:\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(_BinaryenHostGetOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n break;\r\n\r\n case ExpressionId.Nop:\r\n this.push(\";\\n\");\r\n return;\r\n\r\n case ExpressionId.Unreachable:\r\n this.push(\"unreachable()\");\r\n return;\r\n\r\n case ExpressionId.AtomicCmpxchg:\r\n\r\n case ExpressionId.AtomicRMW:\r\n\r\n case ExpressionId.AtomicWait:\r\n\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/decompiler.ts","/*\r\n\r\n This is a custom parser specifically written for the AssemblyScript subset. It accepts some of the\r\n most common TypeScript-only patterns that it knows an appropriate error message for but, though it\r\n uses TypeScript's codes for diagnostics, doesn't ultimately aim at full compatibility.\r\n\r\n*/\r\n\r\nimport {\r\n Program,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalize as normalizePath\r\n} from \"./util/path\";\r\n\r\nimport {\r\n\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n TypeNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n Decorator,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionExpression,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n Modifier,\r\n ModifierKind,\r\n NamespaceDeclaration,\r\n Parameter,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameter,\r\n VariableStatement,\r\n VariableDeclaration,\r\n WhileStatement,\r\n\r\n addModifier,\r\n getModifier,\r\n hasModifier,\r\n setReusableModifiers\r\n\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Log of source file names to be requested. */\r\n backlog: string[] = new Array();\r\n /** Log of source file names already processed. */\r\n seenlog: Set = new Set();\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n for (var i = 0, k = this.program.sources.length; i < k; ++i) {\r\n if (this.program.sources[i].normalizedPath == normalizedPath) return;\r\n }\r\n this.seenlog.add(normalizedPath);\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n this.program.sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, this.program.diagnostics);\r\n source.tokenizer = tn;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n var statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n source.statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n isNamespaceMember: bool = false\r\n ): Statement | null {\r\n\r\n // check decorators\r\n var decorators: Decorator[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n var decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // check modifiers\r\n var modifiers: Modifier[] | null = null;\r\n if (tn.skip(Token.EXPORT)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.EXPORT, tn.range()), modifiers);\r\n }\r\n if (tn.skip(Token.DECLARE)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.DECLARE, tn.range()), modifiers);\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) {\r\n this.error(\r\n DiagnosticCode.Line_break_not_permitted_here,\r\n tn.range(tn.pos)\r\n ); // recoverable, compatibility\r\n }\r\n }\r\n\r\n // remember where we took off\r\n tn.mark();\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n var modifier: Modifier | null;\r\n\r\n // handle declarations\r\n switch (tn.next()) {\r\n\r\n case Token.CONST:\r\n modifiers = addModifier(Node.createModifier(ModifierKind.CONST, tn.range()), modifiers);\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n break;\r\n }\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.LET:\r\n modifiers = addModifier(Node.createModifier(ModifierKind.LET, tn.range()), modifiers);\r\n // fall-through\r\n\r\n case Token.VAR:\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.ENUM:\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.FUNCTION:\r\n statement = this.parseFunction(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.ABSTRACT:\r\n if (!tn.skip(Token.CLASS)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"class\"\r\n );\r\n break;\r\n }\r\n modifiers = addModifier(\r\n Node.createModifier(ModifierKind.ABSTRACT, tn.range()), modifiers\r\n );\r\n // fall through\r\n\r\n case Token.CLASS:\r\n statement = this.parseClass(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.NAMESPACE:\r\n statement = this.parseNamespace(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.IMPORT:\r\n if (modifier = getModifier(ModifierKind.EXPORT, modifiers)) {\r\n statement = this.parseExportImport(tn, modifier.range);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n if (modifiers) setReusableModifiers(modifiers);\r\n break;\r\n\r\n case Token.TYPE:\r\n statement = this.parseTypeDeclaration(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n default:\r\n\r\n // handle plain exports\r\n if (hasModifier(ModifierKind.EXPORT, modifiers)) {\r\n tn.reset();\r\n statement = this.parseExport(tn, modifiers); // TODO: why exactly does this have modifiers again? 'declare'?\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (modifiers) {\r\n if (modifier = getModifier(ModifierKind.DECLARE, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"declare\"\r\n ); // recoverable\r\n }\r\n setReusableModifiers(modifiers);\r\n }\r\n tn.reset();\r\n if (!isNamespaceMember) {\r\n statement = this.parseStatement(tn, true);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n return this.backlog.length ? this.backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): TypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n // void\r\n if (token == Token.VOID) {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n var type: TypeNode;\r\n\r\n // ( ... )\r\n if (acceptParenthesized && token == Token.OPENPAREN) {\r\n var innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n\r\n // this\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // true\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // string literal\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Name\r\n } else if (token == Token.IDENTIFIER) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var parameters = new Array();\r\n var nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n var parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n var bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n var bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): Decorator | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var name = tn.readIdentifier();\r\n var expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n var args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n var members = new Array();\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseVariableDeclaration(tn, isDeclare, modifiers, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n isDeclare: bool = false,\r\n parentModifiers: Modifier[] | null,\r\n parentDecorators: Decorator[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var type: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isDeclare) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (hasModifier(ModifierKind.CONST, parentModifiers)) {\r\n if (!hasModifier(ModifierKind.DECLARE, parentModifiers)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n );\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentModifiers,\r\n parentDecorators,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseEnumValue(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameter[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n do {\r\n var typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameter | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n if (!(extendsType = this.parseType(tn))) return null;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseParameters(\r\n tn: Tokenizer\r\n ): Parameter[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: Parameter | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n\r\n if (tn.peek() != Token.CLOSEPAREN) {\r\n do {\r\n var param = this.parseParameter(tn);\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n\r\n default:\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n\r\n case ParameterKind.OPTIONAL:\r\n seenOptional = true;\r\n break;\r\n\r\n case ParameterKind.REST:\r\n seenRest = param;\r\n break;\r\n }\r\n parameters.push(param);\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n suppressErrors: bool = false\r\n ): Parameter | null {\r\n\r\n // before: '...'? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isRest = true;\r\n startRange = tn.range();\r\n }\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n if (!isRest) startRange = tn.range();\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var type: TypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n }\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n return Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var typeParameters: TypeParameter[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n var isSetter = hasModifier(ModifierKind.SET, modifiers);\r\n if (isSetter) {\r\n\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var isGetter = hasModifier(ModifierKind.GET, modifiers);\r\n if (isGetter && parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, isSetter);\r\n if (!returnType) return null;\r\n\r\n } else if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (isDeclare) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!isDeclare) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n identifier,\r\n typeParameters,\r\n parameters,\r\n returnType,\r\n body,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var identifier: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n isArrow = false;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n identifier = Node.createIdentifierExpression(\"\", tn.range(tn.pos, tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n identifier = Node.createIdentifierExpression(\"\", tn.range(tn.tokenPos, tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, identifier, parameters, isArrow, startPos);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n identifier: IdentifierExpression,\r\n parameters: Parameter[],\r\n isArrow: bool,\r\n startPos: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = identifier.range.start;\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n identifier,\r\n null,\r\n parameters,\r\n returnType,\r\n body,\r\n null,\r\n null,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration, isArrow);\r\n }\r\n\r\n parseClass(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): ClassDeclaration | null {\r\n\r\n // at 'class':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var startPos = decorators && decorators.length\r\n ? decorators[0].range.start\r\n : modifiers && modifiers.length\r\n ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameter[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n extendsType = this.parseType(tn);\r\n if (!extendsType) return null;\r\n }\r\n\r\n var implementsTypes = new Array();\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n do {\r\n var type = this.parseType(tn);\r\n if (!type) return null;\r\n implementsTypes.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseClassMember(tn, isDeclare);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parentIsDeclare: bool\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n var decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var modifiers: Modifier[] | null = null;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PUBLIC, tn.range()), modifiers);\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PRIVATE, tn.range()), modifiers);\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PROTECTED, tn.range()), modifiers);\r\n }\r\n\r\n if (tn.skip(Token.STATIC)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.STATIC, tn.range()), modifiers);\r\n } else if (tn.skip(Token.ABSTRACT)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.ABSTRACT, tn.range()), modifiers);\r\n }\r\n\r\n if (tn.skip(Token.READONLY)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.READONLY, tn.range()), modifiers);\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n tn.mark();\r\n\r\n var isGetter = false;\r\n var isSetter = false;\r\n\r\n if (isGetter = tn.skip(Token.GET)) {\r\n if (tn.peek(true, true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.GET, tn.range()), modifiers);\r\n } else {\r\n tn.reset();\r\n isGetter = false;\r\n }\r\n\r\n } else if (isSetter = tn.skip(Token.SET)) { // can't be both\r\n if (tn.peek(true, true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.SET, tn.range()), modifiers);\r\n } else {\r\n tn.reset();\r\n isSetter = false;\r\n }\r\n }\r\n\r\n var isConstructor = tn.skip(Token.CONSTRUCTOR);\r\n if (isConstructor || tn.skip(Token.IDENTIFIER)) {\r\n\r\n var identifier = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var typeParameters: TypeParameter[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n if (isGetter && parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n identifier.range\r\n );\r\n }\r\n\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n identifier.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n }\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (identifier.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, identifier.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else if (!isSetter && identifier.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (parentIsDeclare) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!parentIsDeclare) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n var retMethod = Node.createMethodDeclaration(\r\n identifier,\r\n typeParameters,\r\n parameters,\r\n returnType,\r\n body,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n identifier.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n identifier.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n var modifier: Modifier | null;\r\n\r\n if (modifier = getModifier(ModifierKind.ABSTRACT, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (modifier = getModifier(ModifierKind.GET, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (modifier = getModifier(ModifierKind.SET, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"set\"\r\n ); // recoverable\r\n }\r\n\r\n var type: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n var retField = Node.createFieldDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var member = this.parseTopLevelStatement(tn, true);\r\n if (!member) return null;\r\n members.push(member);\r\n }\r\n var ret = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n var ret = Node.createExportStatement(members, path, modifiers, tn.range(startPos, tn.pos));\r\n if (ret.normalizedPath && !this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n var path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n var ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n if (!this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startRange: Range\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var ret = Node.createExportImportStatement(identifier, asIdentifier, Range.join(startRange, tn.range()));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n tn.mark();\r\n var token = tn.next();\r\n switch (token) {\r\n\r\n case Token.BREAK:\r\n return this.parseBreak(tn);\r\n\r\n case Token.CONST:\r\n return this.parseVariable(tn, [\r\n Node.createModifier(ModifierKind.CONST, tn.range())\r\n ], null);\r\n\r\n case Token.CONTINUE:\r\n return this.parseContinue(tn);\r\n\r\n case Token.DO:\r\n return this.parseDoStatement(tn);\r\n\r\n case Token.FOR:\r\n return this.parseForStatement(tn);\r\n\r\n case Token.IF:\r\n return this.parseIfStatement(tn);\r\n\r\n case Token.LET:\r\n return this.parseVariable(tn, [\r\n Node.createModifier(ModifierKind.LET, tn.range())\r\n ], null);\r\n\r\n case Token.VAR:\r\n return this.parseVariable(tn, null, null);\r\n\r\n case Token.OPENBRACE:\r\n return this.parseBlockStatement(tn, topLevel);\r\n\r\n case Token.RETURN:\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return this.parseReturn(tn);\r\n\r\n case Token.SEMICOLON:\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n\r\n case Token.SWITCH:\r\n return this.parseSwitchStatement(tn);\r\n\r\n case Token.THROW:\r\n return this.parseThrowStatement(tn);\r\n\r\n case Token.TRY:\r\n return this.parseTryStatement(tn);\r\n\r\n case Token.TYPE:\r\n return this.parseTypeDeclaration(tn, null);\r\n\r\n case Token.WHILE:\r\n return this.parseWhileStatement(tn);\r\n\r\n default:\r\n tn.reset();\r\n return this.parseExpressionStatement(tn);\r\n }\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var statement = this.parseStatement(tn, topLevel);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(true);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(true);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n\r\n var initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.LET) || tn.skip(Token.CONST) || tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, null, null);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n var condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n var incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n var elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n var ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n var label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n var catchVariable: IdentifierExpression | null = null;\r\n var catchStatements: Statement[] | null = null;\r\n var finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n var ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null = null,\r\n decorators: Decorator[] | null = null\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier '=' Type ';'?\r\n\r\n var startPos = decorators && decorators.length ? decorators[0].range.start\r\n : modifiers && modifiers.length ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n var type = this.parseType(tn);\r\n if (!type) return null;\r\n var ret = Node.createTypeDeclaration(name, type, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n var ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(true);\r\n var startPos = tn.tokenPos;\r\n var expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var p = determinePrecedenceStart(token);\r\n if (p != Precedence.INVALID) {\r\n var operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, p);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n switch (token) {\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN:\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createIdentifierExpression(\"\", tn.range(startPos, startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n tn.mark();\r\n var again = true;\r\n do {\r\n switch (tn.next(true)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT:\r\n tn.reset();\r\n return this.parseFunctionExpression(tn);\r\n\r\n // can be both\r\n case Token.IDENTIFIER:\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN:\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n\r\n // function expression\r\n case Token.QUESTION: // optional parameter\r\n case Token.COLON: // type annotation\r\n tn.reset();\r\n return this.parseFunctionExpression(tn);\r\n\r\n // can be both\r\n case Token.COMMA:\r\n break; // continue\r\n\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default:\r\n again = false;\r\n break;\r\n }\r\n break;\r\n\r\n // parenthesized expression\r\n default:\r\n again = false;\r\n break;\r\n }\r\n } while (again);\r\n tn.reset();\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET:\r\n var elementExpressions = new Array();\r\n\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n do {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (tn.peek() == Token.CLOSEBRACKET) break;\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN:\r\n var toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n case Token.IDENTIFIER:\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n\r\n case Token.THIS:\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n\r\n case Token.CONSTRUCTOR:\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n\r\n case Token.SUPER:\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n\r\n case Token.STRINGLITERAL:\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n\r\n case Token.INTEGERLITERAL:\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n\r\n case Token.FLOATLITERAL:\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH:\r\n var regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n case Token.FUNCTION:\r\n return this.parseFunctionExpression(tn);\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): TypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n var type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset();\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset();\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n do {\r\n var expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 0\r\n ): Expression | null {\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression\r\n var typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn); // skips '(' on success\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n if (typeArguments || tn.skip(Token.OPENPAREN)) {\r\n var args = this.parseArguments(tn);\r\n if (!args) return null;\r\n expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n\r\n switch (token) {\r\n\r\n // AssertionExpression\r\n case Token.AS:\r\n var toType = this.parseType(tn);\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET:\r\n next = this.parseExpression(tn);\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n\r\n // TernaryExpression\r\n case Token.QUESTION:\r\n var ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n var ifElse = this.parseExpression(tn);\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n\r\n // CommaExpression\r\n case Token.COMMA:\r\n var commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n\r\n default:\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n var propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING,\r\n INVALID = -1\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): i32 {\r\n switch (kind) {\r\n\r\n case Token.DOT_DOT_DOT:\r\n return Precedence.SPREAD;\r\n\r\n case Token.YIELD:\r\n return Precedence.YIELD;\r\n\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE:\r\n return Precedence.UNARY_PREFIX;\r\n\r\n case Token.NEW:\r\n return Precedence.MEMBERACCESS;\r\n\r\n default:\r\n return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): i32 {\r\n switch (kind) {\r\n\r\n case Token.COMMA:\r\n return Precedence.COMMA;\r\n\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n return Precedence.ASSIGNMENT;\r\n\r\n case Token.QUESTION:\r\n return Precedence.CONDITIONAL;\r\n\r\n case Token.BAR_BAR:\r\n return Precedence.LOGICAL_OR;\r\n\r\n case Token.AMPERSAND_AMPERSAND:\r\n return Precedence.LOGICAL_AND;\r\n\r\n case Token.BAR:\r\n return Precedence.BITWISE_OR;\r\n\r\n case Token.CARET:\r\n return Precedence.BITWISE_XOR;\r\n\r\n case Token.AMPERSAND:\r\n return Precedence.BITWISE_AND;\r\n\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n return Precedence.EQUALITY;\r\n\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS:\r\n return Precedence.RELATIONAL;\r\n\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n return Precedence.SHIFT;\r\n\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n return Precedence.ADDITIVE;\r\n\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT:\r\n return Precedence.MULTIPLICATIVE;\r\n\r\n case Token.ASTERISK_ASTERISK:\r\n return Precedence.EXPONENTIATED;\r\n\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n return Precedence.UNARY_POSTFIX;\r\n\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET:\r\n return Precedence.MEMBERACCESS;\r\n\r\n default:\r\n return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/parser.ts"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__17__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","DiagnosticCategory","diagnosticMessages_generated_1","charcode_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","DiagnosticCode","diagnosticCodeToString","colorBlue","colorYellow","colorRed","colorReset","diagnosticCategoryToColor","DiagnosticMessage","code","message","this","range","create","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","start","end","formatDiagnosticContext","useColors","text","len","length","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","context","line","column","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","error","info","warning","NativeType","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","ref","_BinaryenModuleCreate","out","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","paramTypes","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","createI32","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","expr","_BinaryenUnary","createBinary","left","right","_BinaryenBinary","createHost","operands","_BinaryenHost","createGetLocal","index","type","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","label","children","None","_BinaryenBlock","createBreak","condition","_BinaryenBreak","createDrop","expression","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","strs","k","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","initializer","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addFunctionExport","internalName","externalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","Binary","output","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","relooper","_RelooperCreate","createStub","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","idx","store","i32s","val","str","u","stringLengthUTF8","load","Uint8Array","cp","u1","u2","u3","u4","arr","String","fromCodePoints","diagnostics_1","types_1","ast_1","module_1","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","QueuedExport","QueuedImport","noTypesYet","Map","Program","_super","_this","diagnosticsOffset","elements","types","typeAliases","sources","__extends","initialize","options","Type","i8","i16","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","element","queuedExports","queuedImports","queuedDerivedClasses","statements","j","statement","kind","NodeKind","CLASSDECLARATION","initializeClass","ENUMDECLARATION","initializeEnum","EXPORT","initializeExports","FUNCTIONDECLARATION","initializeFunction","IMPORT","initializeImports","INTERFACEDECLARATION","initializeInterface","NAMESPACEDECLARATION","initializeNamespace","TYPEDECLARATION","initializeTypeAlias","VARIABLE","initializeVariables","queuedImport","tryResolveImport","referencedName","set","splice","referencedNameAlt","Module_0_has_no_exported_member_1","declaration","parent","path","queuedExports_1","__values","queuedExports_1_1","next","done","_a","__read","queuedExport","currentExport","isReExport","member","setExportAndCheckLibrary","Cannot_find_name_0","derivedDeclaration","derivedType","assert","extendsType","resolved","resolveIdentifier","ElementKind","CLASS_PROTOTYPE","A_class_may_only_extend_another_class","basePrototype","checkInternalDecorators","isBuiltin","hasDecorator","decorators","ElementFlags","BUILTIN","isLibrary","is","EXPORTED","SOURCE","GLOBAL","has","Duplicate_identifier_0","namespace","fileLevelInternalName","ClassPrototype","isUnmanaged","implementsTypes","Structs_cannot_implement_interfaces","Range","members","Export_declaration_conflicts_with_exported_declaration_of_0","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isGetter","hasModifier","ModifierKind","GET","modifiers","SET","initializeAccessor","initializeMethod","programLevelInternalName","instance","resolve","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperators","decorator","decoratorKind","Operation_not_supported","numArgs","arguments","firstArg","LITERAL","literalKind","fnIndexedGet","simpleName","fnIndexedSet","fnConcat","fnEquals","String_literal_expected","Expected_0_arguments_but_got_1","propertyName","internalPropertyName","propertyElement","PROPERTY","getterPrototype","setterPrototype","Property","staticName","staticPrototype","instanceName","instancePrototype","enm","Enum","values","initializeEnumValue","EnumValue","initializeExport","internalPath","identifier","referencedElement","seen","Set","add","declarations","initializeImport","namespaceName","indexPart","endsWith","InterfacePrototype","queuedExtendingClasses","parentNamespace","Namespace","alias","global","resolveType","node","contextualTypeArguments","reportNotFound","localName","resolveInclTypeArguments","typeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeParameters","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","resolvedElement","ResolvedElement","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","resolveExpression","targetType","LOCAL","FIELD","classType","Property_0_does_not_exist_on_type_1","CLASS","withTarget","base","resolveElementAccess","elementAccess","indexedGet","indexedGetName","FUNCTION_PROTOTYPE","Index_signature_is_missing_in_type_0","PARENTHESIZED","ASSERTION","toType","BINARY","THIS","instanceMethodOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","Element","program","flags","NONE","flag","NAMESPACE","modifierKind","IMPORTED","DECLARE","DECLARED","ENUM","CONST","CONSTANT","constantValue","enum","ConstantValueKind","VariableLikeElement","apply","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","INLINED","withConstantFloatValue","constantFloatValue","LET","SCOPED","READONLY","PUBLIC","PRIVATE","PROTECTED","Parameter","Local","instances","classTypeArguments","GETTER","SETTER","ABSTRACT","isGeneric","GENERIC","INSTANCE","functionTypeArguments","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","functionTypeParameters","parameters","typeNode","parameterTypes","parameterDeclaration","parameterType","classInstance","Function","reportNode","resolvedTypeArguments","resolvePartial","partialPrototype","FUNCTION","locals","additionalLocals","breakContext","debugLocations","functionTableIndex","nextBreakId","breakStack","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","_b","_c","parameter","parameterName","Flow","addLocal","local","getTempLocal","temps","toNativeType","pop","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","debugInfoIndex","isAssignableTo","toTypeString","FIELD_PROTOTYPE","Field","memoryOffset","UNMANAGED","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseClass","baseClassType","Structs_cannot_extend_classes_and_vice_versa","Class","currentMemoryOffset","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","methodPrototype","instanceProperty","asClass","baseName","baseType","current","INTERFACE_PROTOTYPE","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","enterBranchOrScope","branchFlow","leaveBranchOrScope","scopedLocal","addScopedLocal","Token","fromKeyword","AS","ASYNC","AWAIT","BREAK","CASE","CATCH","CONTINUE","DEBUGGER","DEFAULT","DELETE","DO","ELSE","EXTENDS","FALSE","FINALLY","FOR","FROM","IF","IMPLEMENTS","IN","INSTANCEOF","IS","KEYOF","MODULE","NEW","NULL","OF","PACKAGE","RETURN","SWITCH","THROW","TRUE","TRY","TYPE","TYPEOF","VAR","VOID","WHILE","WITH","YIELD","INVALID","isAlsoIdentifier","token","operatorToString","DOT_DOT_DOT","COMMA","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","PLUS","MINUS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","pos","Tokenizer","tokenPos","markedPos","markedToken","markedTokenPos","nextToken","nextTokenOnNewLine","preferIdentifier","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordText","keywordToken","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skip","mark","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","i64_add","i64_mul","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","parseFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","program_1","tokenizer_1","path_1","Node","createType","isNullable","TypeNode","createIdentifierExpression","IdentifierExpression","createArrayLiteralExpression","ArrayLiteralExpression","elementExpressions","nodes","setParentOpt","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","args","CallExpression","setParent","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","isArrow","FunctionArrowExpression","FunctionExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","stmt","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDecorator","Decorator","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalize","startsWith","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","elem","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createTypeParameter","TypeParameter","createParameter","parameterKind","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createModifier","Modifier","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createWhileStatement","WhileStatement","TYPEPARAMETER","Expression","LiteralKind","LiteralExpression","AssertionKind","FUNCTIONARROW","TERNARY","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","DecoratorKind","DECORATOR","EMPTY","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","IMPORTDECLARATION","ParameterKind","PARAMETER","MODIFIER","SWITCHCASE","VARIABLEDECLARATION","reusableModifiers","createModifiers","getModifier","getFirstDecorator","asGlobal","setReusableModifiers","addModifier","modifier","TypeKind","TypeFlags","size","nullableType","ceil","nonNullableType","computeSmallIntegerShift","computeSmallIntegerMask","asFunction","asNullable","isReference","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","toSignatureString","isize32","isize64","usize32","usize64","typesToNativeTypes","builtins_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","memoryBase","allocateImpl","freeImpl","ConversionKind","Compiler","startFunctionBody","currentEnum","currentType","memorySegments","stringSegments","functionTable","files","max","compile","startFunctionPrototype","startFunctionInstance","START","startFunction","isEntry","compileSource","typeRef","i64_align","isWasm64","pages","i64_shr_u","entries","compileSourceByPath","normalizedPathWithoutExtension","File_0_not_found","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","COMPILED","initExpr","resolvedType","Type_0_is_not_assignable_to_type_1","Type_expected","compileExpression","nativeType","initializeInStart","compileInlineConstant","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","setExpr","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","allBranchesReturn","A_function_whose_declared_type_is_not_void_must_return_a_value","numParameters","numParametersInclThis","paramIndex","nativeResultType","nativeParamTypes","signatureNameParts","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","addMemorySegment","alignment","addFunctionTableEntry","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileWhileStatement","addDebugLocation","compileStatements","stmts","stmtReturns","A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement","A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement","previousBreakLabel","previousContinueLabel","makeIsTrueish","alwaysReturns","ifTrueReturns","ifFalseReturns","tempLocal","breaks","breakIndex","defaultIndex","case_","EqI32","currentBlock","fallsThrough","nextLabel","isKnownGlobal","initializers","init","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","shift","mask","conversionKind","wrapSmallIntegers","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","compileExpressionRetainType","precomputeExpression","funcRef","_BinaryenFunctionGetBody","fromType","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","makeSmallIntegerWrap","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftType","rightType","commonType","compound","possiblyOverflows","Operator_0_cannot_be_applied_to_types_1_and_2","LtI32","LtI64","LtU32","LtU64","LtF32","LtF64","GtI32","GtI64","GtU32","GtU64","GtF32","GtF64","LeI32","LeI64","LeU32","LeU64","LeF32","LeF64","GeI32","GeI64","GeU32","GeU64","GeF32","GeF64","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI32","MulI64","MulF32","MulF64","DivI32","DivI64","DivU32","DivU64","DivF32","DivF64","RemI32","RemI64","RemU32","RemU64","ShlI32","ShlI64","ShrI32","ShrI64","ShrU32","ShrU64","AndI32","AndI64","OrI32","OrI64","XorI32","XorI64","valueExpression","elementType","setterInstance","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","resolvedIndexedSet","valueWithCorrectType","tee","targetExpr","globalNativeType","isReadonly","elementNativeType","makeCall","getterInstance","resolvedIndexedGet","indexedSet","indexedSetName","elementExpr","Index_signature_in_type_0_only_permits_reading","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","functionPrototype","compileCall","numArguments","numArgumentsInclThis","argumentIndex","argumentExpressions","thisArg","operandIndex","Expected_at_least_0_arguments_but_got_1","exprs","retainConstantType","compileGetConstant","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileStaticArray","floatValue","intValue","i64_sub","i64_is_i8","i64_is_i16","i64_is_i32","i64_is_u8","i64_is_u16","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStaticString","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","isStatic","Int32Array","Float32Array","Float64Array","thisExpr","compileAllocate","field","nativeSizeType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","nativeOne","setValue","getValue","NegF32","NegF64","makeIsFalseish","EqzI32","EqzI64","g","eval","e","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","map","mid","Parser","backlog","seenlog","parseFile","indexOf","tn","parseTopLevelStatement","isNamespaceMember","parseDecorator","Line_break_not_permitted_here","parseEnum","parseVariable","parseFunction","parseClass","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","parseStatement","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","startPos","innerType","Identifier_expected","nullable","bracketStart","bracketRange","parseArguments","isDeclare","parseVariableDeclaration","parentModifiers","parentDecorators","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","Type_parameter_list_cannot_be_empty","typeParameter","parseTypeParameter","parseParameters","seenRest","seenOptional","reportedRest","param","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","OPTIONAL","REST","isRest","isOptional","startRange","A_rest_parameter_cannot_be_optional","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","parseFunctionExpressionCommon","parseClassMember","parentIsDeclare","isConstructor","Type_parameters_cannot_appear_on_a_constructor_declaration","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseExpressionStatement","elseStatement","parseSwitchCase","_case_or_default_expected","parseExpressionStart","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","precedence","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","Decompiler","functionId","decompile","decompiler","decompileFunction","_BinaryenFunctionGetName","_BinaryenFunctionGetNumParams","nativeTypeToType","_BinaryenFunctionGetParam","_BinaryenFunctionGetResult","Block","decompileExpression","nested","string","_BinaryenBlockGetName","_BinaryenBlockGetNumChildren","_BinaryenBlockGetChild","If","_BinaryenIfGetCondition","_BinaryenIfGetIfTrue","_BinaryenIfGetIfFalse","Loop","_BinaryenLoopGetName","_BinaryenLoopGetBody","Break","_BinaryenBreakGetCondition","_BinaryenBreakGetName","Switch","Call","CallImport","CallIndirect","SetLocal","_BinaryenSetLocalGetIndex","_BinaryenSetLocalGetValue","SetGlobal","Store","_BinaryenStoreGetOffset","_BinaryenStoreGetPtr","_BinaryenStoreGetValue","i64_to_string","ClzI32","CtzI32","PopcntI32","AbsF32","CeilF32","FloorF32","TruncF32","NearestF32","SqrtF32","ClzI64","CtzI64","PopcntI64","AbsF64","CeilF64","FloorF64","TruncF64","NearestF64","SqrtF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","RotlI32","RotrI32","RotlI64","RotrI64","CopysignF32","MinF32","MaxF32","CopysignF64","MinF64","MaxF64","Select","_BinaryenSelectGetIfTrue","_BinaryenSelectGetIfFalse","_BinaryenSelectGetCondition","Drop","_BinaryenDropGetValue","Return","_BinaryenReturnGetValue","Host","_BinaryenHostGetOp","CurrentMemory","GrowMemory","_BinaryenHostGetOperand","Nop","Unreachable","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setNoMemory","setImportMemory","setSourceMap","setMemoryBase","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","min","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","other","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_and","i64_or","i64_xor","i64_shl","i64_shr","i64_not","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","evaluateConstantOffset","compiler","compileAbort","abort","abortPrototype","abortInstance","NaN","Infinity","tempLocal0","tempLocal1","Type_0_is_not_generic","cls","Implementation_0_must_match_the_signature_1","binaryen","Binaryen","key","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","self","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","EPSILON","clz32","abs","sqrt","trunc","isTrueish","undefined","fromCodePoint"],"mappings":"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AAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCC,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__17__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 21);\n","import {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util/charcode\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nexport enum DiagnosticCategory {\r\n INFO,\r\n WARNING,\r\n ERROR\r\n}\r\n\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: return \"\";\r\n }\r\n}\r\n\r\nconst colorBlue: string = \"\\u001b[93m\";\r\nconst colorYellow: string = \"\\u001b[93m\";\r\nconst colorRed: string = \"\\u001b[91m\";\r\nconst colorReset: string = \"\\u001b[0m\";\r\n\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return colorBlue;\r\n case DiagnosticCategory.WARNING: return colorYellow;\r\n case DiagnosticCategory.ERROR: return colorRed;\r\n default: return \"\";\r\n }\r\n}\r\n\r\nexport class DiagnosticMessage {\r\n\r\n code: i32;\r\n category: DiagnosticCategory;\r\n message: string;\r\n range: Range | null = null;\r\n\r\n constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \" @ \" +\r\n this.range.start.toString(10) +\r\n \",\" +\r\n this.range.end.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n // format context first (uses same string builder)\r\n var context = \"\";\r\n if (message.range && showContext) {\r\n context = formatDiagnosticContext(message.range, useColors);\r\n }\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(colorReset);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // range information if available\r\n if (message.range) {\r\n var range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(context);\r\n }\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) {\r\n start--;\r\n }\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) {\r\n end++;\r\n }\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(colorRed);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) {\r\n sb.push(\"~\");\r\n }\r\n }\r\n if (useColors) sb.push(colorReset);\r\n return sb.join(\"\");\r\n}\r\n\r\nexport abstract class DiagnosticEmitter {\r\n\r\n diagnostics: DiagnosticMessage[];\r\n // silentDiagnostics: bool = false;\r\n\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ) {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","import {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64()\r\n\r\n // see: https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md#new-sign-extending-operators\r\n // ExtendI8ToI32 =_BinaryenExtendS8Int32()\r\n // ExtendI16ToI32 = _BinaryenExtendS16Int32()\r\n // ExtendI8ToI64 = _BinaryenExtendS8Int64() // operand is I64\r\n // ExtendI16ToI64 = _BinaryenExtendS16Int64()\r\n // ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64) {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n out: usize;\r\n\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n // TODO: static readonly MAX_MEMORY_WASM64\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.out = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.out = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[]\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes.length);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[]\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocI32Array(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var strs = new Array(names.length);\r\n for (var i = 0, k: i32 = names.length; i < k; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, k, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (i = k - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[],\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes.length, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var buffer = segments[i].buffer;\r\n var offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocI32Array(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var k = passes.length;\r\n var names = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, k);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, k);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (; i >= 0; --i) free_memory(names[i]);\r\n }\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): Binary {\r\n var out = this.out;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n var binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n var ret = new Binary();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n if (!this.ref) return; // sic\r\n _BinaryenModuleDispose(this.ref);\r\n free_memory(this.out);\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n\r\n case ExpressionId.Const:\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n case NativeType.I64:\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n case NativeType.F32:\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n case NativeType.F64:\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n\r\n case ExpressionId.GetLocal:\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n\r\n case ExpressionId.GetGlobal:\r\n var globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n\r\n case ExpressionId.Load:\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n );\r\n\r\n case ExpressionId.Unary:\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n\r\n case ExpressionId.Binary:\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n static createStub(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = 0;\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var ptr = allocate_memory(u8s.length);\r\n var idx = ptr;\r\n for (var i = 0, k = u8s.length; i < k; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (var i = 0, k = i32s.length; i < k; ++i) {\r\n var val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (var i = 0, k = str.length; i < k; ++i) {\r\n var u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n var idx = ptr;\r\n for (var i = 0, k = str.length; i < k; ++i) {\r\n var u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nexport function readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nexport function readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (var i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nclass Binary {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","import {\r\n Options\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n ModifierKind,\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n TypeNode,\r\n TypeParameter,\r\n Decorator,\r\n DecoratorKind,\r\n\r\n Expression,\r\n AssertionExpression,\r\n ElementAccessExpression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n StringLiteralExpression,\r\n CallExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n hasDecorator,\r\n hasModifier\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n} from \"./module\";\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"(lib)\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n\r\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Diagnostic offset used where repeatedly obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n /** Elements by internal name. */\r\n elements: Map = new Map();\r\n /** Types by internal name. */\r\n types: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** Exports of individual files by exported name. Not global exports. */\r\n exports: Map = new Map();\r\n\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.sources = [];\r\n }\r\n\r\n /** Initializes the program and its elements prior to compilation. */\r\n initialize(options: Options): void {\r\n this.options = options;\r\n\r\n this.types = new Map([\r\n [\"i8\", Type.i8],\r\n [\"i16\", Type.i16],\r\n [\"i32\", Type.i32],\r\n [\"i64\", Type.i64],\r\n [\"isize\", options.isizeType],\r\n [\"u8\", Type.u8],\r\n [\"u16\", Type.u16],\r\n [\"u32\", Type.u32],\r\n [\"u64\", Type.u64],\r\n [\"usize\", options.usizeType],\r\n [\"bool\", Type.bool],\r\n [\"f32\", Type.f32],\r\n [\"f64\", Type.f64],\r\n [\"void\", Type.void],\r\n [\"number\", Type.f64],\r\n [\"boolean\", Type.bool]\r\n ]);\r\n\r\n var queuedExports = new Map();\r\n var queuedImports = new Array();\r\n var queuedDerivedClasses = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (var i = 0, k = this.sources.length; i < k; ++i) {\r\n var source = this.sources[i];\r\n var statements = source.statements;\r\n for (var j = 0, l = statements.length; j < l; ++j) {\r\n var statement = statements[j];\r\n switch (statement.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n this.initializeClass(\r\n statement,\r\n queuedDerivedClasses\r\n );\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n this.initializeEnum(statement);\r\n break;\r\n\r\n case NodeKind.EXPORT:\r\n this.initializeExports(\r\n statement,\r\n queuedExports\r\n );\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n this.initializeFunction(statement);\r\n break;\r\n\r\n case NodeKind.IMPORT:\r\n this.initializeImports(\r\n statement,\r\n queuedExports,\r\n queuedImports\r\n );\r\n break;\r\n\r\n case NodeKind.INTERFACEDECLARATION:\r\n this.initializeInterface(statement);\r\n break;\r\n\r\n case NodeKind.NAMESPACEDECLARATION:\r\n this.initializeNamespace(\r\n statement,\r\n queuedDerivedClasses\r\n );\r\n break;\r\n\r\n case NodeKind.TYPEDECLARATION:\r\n this.initializeTypeAlias(statement);\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n var element: Element | null;\r\n\r\n // queued imports should be resolvable now through traversing exports and\r\n // queued exports\r\n for (i = 0; i < queuedImports.length;) {\r\n var queuedImport = queuedImports[i];\r\n element = this.tryResolveImport(\r\n queuedImport.referencedName,\r\n queuedExports\r\n );\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n element = this.tryResolveImport(\r\n queuedImport.referencedNameAlt,\r\n queuedExports\r\n );\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedImport.declaration.range,\r\n (queuedImport.declaration.parent).path.value,\r\n queuedImport.declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n }\r\n\r\n // queued exports should be resolvable now that imports are finalized\r\n for (var [exportName, queuedExport] of queuedExports) {\r\n var currentExport: QueuedExport | null = queuedExport; // nullable below\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.exports.get(currentExport.referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.referencedName);\r\n if (!currentExport) {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedExport.member.externalName.range,\r\n ((\r\n queuedExport.member.parent\r\n ).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.elements.get(currentExport.referencedName)) ||\r\n // library re-export\r\n (element = this.elements.get(currentExport.member.name.text))\r\n ) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n for (i = 0, k = queuedDerivedClasses.length; i < k; ++i) {\r\n var derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n var derivedType = assert(derivedDeclaration.extendsType);\r\n var resolved = this.resolveIdentifier(derivedType.name, null);\r\n if (resolved) {\r\n if (resolved.element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n continue;\r\n }\r\n queuedDerivedClasses[i].basePrototype = (\r\n resolved.element\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Tries to resolve an import by traversing exports and queued exports. */\r\n private tryResolveImport(\r\n referencedName: string,\r\n queuedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n do {\r\n if (element = this.exports.get(referencedName)) {\r\n return element;\r\n }\r\n var queuedExport = queuedExports.get(referencedName);\r\n if (!queuedExport) return null;\r\n if (queuedExport.isReExport) {\r\n referencedName = queuedExport.referencedName;\r\n continue;\r\n }\r\n return this.elements.get(queuedExport.referencedName);\r\n } while (true);\r\n }\r\n\r\n private checkInternalDecorators(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var isBuiltin: bool = hasDecorator(\"builtin\", declaration.decorators);\r\n if (isBuiltin) {\r\n element.set(ElementFlags.BUILTIN);\r\n }\r\n if (\r\n hasDecorator(\"global\", declaration.decorators) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(ElementFlags.EXPORTED) &&\r\n (\r\n assert(declaration.parent).kind == NodeKind.SOURCE ||\r\n (\r\n declaration.parent).kind == NodeKind.VARIABLE &&\r\n assert((declaration.parent).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n element.set(ElementFlags.GLOBAL);\r\n if (this.elements.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elements.set(declaration.name.text, element);\r\n this.exports.set(declaration.name.text, element);\r\n if (isBuiltin) {\r\n element.internalName = declaration.name.text;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedDerivedClasses: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var prototype = new ClassPrototype(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration\r\n );\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (hasDecorator(\"unmanaged\", declaration.decorators)) {\r\n prototype.isUnmanaged = true;\r\n if (declaration.implementsTypes && declaration.implementsTypes.length) {\r\n this.error(\r\n DiagnosticCode.Structs_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n declaration.implementsTypes[declaration.implementsTypes.length - 1]\r\n .range\r\n )\r\n );\r\n }\r\n } else if (declaration.implementsTypes.length) {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) {\r\n queuedDerivedClasses.push(prototype);\r\n }\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, prototype);\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION:\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n\r\n case NodeKind.METHODDECLARATION:\r\n var isGetter = hasModifier(\r\n ModifierKind.GET,\r\n memberDeclaration.modifiers\r\n );\r\n if (\r\n isGetter ||\r\n hasModifier(ModifierKind.SET, memberDeclaration.modifiers)\r\n ) {\r\n this.initializeAccessor(\r\n memberDeclaration,\r\n prototype,\r\n isGetter\r\n );\r\n } else {\r\n this.initializeMethod(\r\n memberDeclaration,\r\n prototype\r\n );\r\n }\r\n break;\r\n\r\n default:\r\n throw new Error(\"class member expected\");\r\n }\r\n }\r\n\r\n // check and possibly register string type\r\n if (\r\n prototype.is(ElementFlags.GLOBAL) &&\r\n declaration.name.text == \"String\"\r\n ) {\r\n if (!this.types.has(\"string\")) {\r\n var instance = prototype.resolve(null);\r\n if (instance) {\r\n this.types.set(\"string\", instance.type);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n }\r\n }\r\n }\r\n\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n\r\n // static fields become global variables\r\n if (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n var staticField = new Global(\r\n this, name, internalName, declaration, Type.void\r\n );\r\n classPrototype.members.set(name, staticField);\r\n this.elements.set(internalName, staticField);\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n var instanceField = new FieldPrototype(\r\n classPrototype,\r\n name, internalName,\r\n declaration\r\n );\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n // static methods become global functions\r\n if (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n name, internalName,\r\n declaration,\r\n null\r\n );\r\n classPrototype.members.set(name, prototype);\r\n this.elements.set(internalName, prototype);\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n name, internalName,\r\n declaration,\r\n classPrototype\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(ElementFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(name, prototype);\r\n }\r\n }\r\n\r\n this.checkOperators(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperators(\r\n decorators: Decorator[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ) {\r\n // handle operator annotations. operators are either instance methods taking\r\n // a second argument of the instance's type or static methods taking two\r\n // arguments of the instance's type. return values vary depending on the\r\n // operation.\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n var decorator = decorators[i];\r\n if (decorator.decoratorKind == DecoratorKind.OPERATOR) {\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n continue;\r\n }\r\n var numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n var firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n switch ((firstArg).value) {\r\n\r\n case \"[]\":\r\n classPrototype.fnIndexedGet = prototype.simpleName;\r\n break;\r\n\r\n case \"[]=\":\r\n classPrototype.fnIndexedSet = prototype.simpleName;\r\n break;\r\n\r\n case \"+\":\r\n classPrototype.fnConcat = prototype.simpleName;\r\n break;\r\n\r\n case \"==\":\r\n classPrototype.fnEquals = prototype.simpleName;\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n } else if (decorator.decoratorKind != DecoratorKind.CUSTOM) {\r\n // methods support built-in @operator only\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype,\r\n isGetter: bool\r\n ): void {\r\n var propertyName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n\r\n var propertyElement = this.elements.get(internalPropertyName);\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n propertyName, internalPropertyName,\r\n classPrototype\r\n );\r\n }\r\n\r\n var name = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + propertyName;\r\n\r\n // static accessors become global functions\r\n if (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n var staticName = classPrototype.internalName + STATIC_DELIMITER + name;\r\n if (this.elements.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n var staticPrototype = new FunctionPrototype(\r\n this,\r\n name, staticName,\r\n declaration,\r\n null\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (!classPrototype.members) {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(propertyName, propertyElement); // check above\r\n this.elements.set(internalPropertyName, propertyElement);\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n var instanceName = classPrototype.internalName + INSTANCE_DELIMITER + name;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n var instancePrototype = new FunctionPrototype(\r\n this,\r\n name, instanceName,\r\n declaration,\r\n classPrototype\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(name, propertyElement);\r\n this.elements.set(internalPropertyName, propertyElement);\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var enm = new Enum(this, declaration.name.text, internalName, declaration);\r\n enm.namespace = namespace;\r\n this.elements.set(internalName, enm);\r\n\r\n this.checkInternalDecorators(enm, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, enm);\r\n } else if (enm.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, enm);\r\n }\r\n\r\n var values = declaration.values;\r\n for (var i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], enm);\r\n }\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n name: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n this.exports.set(name, element);\r\n if (identifier.range.source.isLibrary) { // add global alias\r\n if (this.elements.has(identifier.text)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n identifier.range, identifier.text\r\n );\r\n } else {\r\n element.internalName = identifier.text;\r\n this.elements.set(identifier.text, element);\r\n }\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.exports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elements.get(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.referencedName = referencedName; // -> internal name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elements.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n var seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.exports.get(queuedExport.referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.referencedName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elements.get(queuedExport.referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.referencedName = referencedName; // -> export name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var prototype = new FunctionPrototype(\r\n this,\r\n declaration.name.text, internalName,\r\n declaration,\r\n null\r\n );\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, prototype);\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) {\r\n var internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n statement.namespaceName.text\r\n );\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n this.error( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var referencedName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.exports.get(referencedName)) {\r\n this.elements.set(internalName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n var indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.internalName = internalName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration;\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var prototype = new InterfacePrototype(this, declaration.name.text, internalName, declaration);\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, prototype);\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION:\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n\r\n case NodeKind.METHODDECLARATION:\r\n var isGetter = hasModifier(ModifierKind.GET, memberDeclaration.modifiers);\r\n if (isGetter || hasModifier(ModifierKind.SET, memberDeclaration.modifiers)) {\r\n this.initializeAccessor(memberDeclaration, prototype, isGetter);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n\r\n default:\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtendingClasses: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n\r\n var namespace = this.elements.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, declaration.name.text, internalName, declaration);\r\n namespace.namespace = parentNamespace;\r\n this.elements.set(internalName, namespace);\r\n this.checkInternalDecorators(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(declaration.name.text, namespace);\r\n } else if (namespace.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.exports.set(internalName, namespace);\r\n }\r\n\r\n var members = declaration.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n this.initializeClass(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n\r\n case NodeKind.INTERFACEDECLARATION:\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n\r\n case NodeKind.NAMESPACEDECLARATION:\r\n this.initializeNamespace(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n\r\n case NodeKind.TYPEDECLARATION:\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n\r\n default:\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.types.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n this.typeAliases.set(name, declaration.alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n\r\n var global = new Global(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration,\r\n Type.void // resolved later on\r\n );\r\n global.namespace = namespace;\r\n this.elements.set(internalName, global);\r\n\r\n this.checkInternalDecorators(global, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(declaration.name.text, global);\r\n } else if (global.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.exports.set(internalName, global);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Resolves a {@link TypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: TypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n var globalName = node.name.text;\r\n var localName = node.range.source.internalPath + PATH_DELIMITER + node.name.text;\r\n\r\n var element: Element | null;\r\n\r\n // check file-global / program-global element\r\n if ((element = this.elements.get(localName)) || (element = this.elements.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n var instance = (element).resolveInclTypeArguments(\r\n node.typeArguments,\r\n contextualTypeArguments,\r\n null\r\n ); // reports\r\n return instance ? instance.type : null;\r\n }\r\n }\r\n\r\n // resolve parameters\r\n var k = node.typeArguments.length;\r\n var paramTypes = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var paramType = this.resolveType( // reports\r\n node.typeArguments[i],\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n\r\n if (k) { // can't be a placeholder if it has parameters\r\n var instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n var placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n\r\n var type: Type | null;\r\n\r\n // check file-global / program-global type\r\n if ((type = this.types.get(localName)) || (type = this.types.get(globalName))) {\r\n return type;\r\n }\r\n\r\n // check type alias\r\n var alias = this.typeAliases.get(globalName);\r\n if (alias && (type = this.resolveType(alias, null, reportNotFound))) {\r\n return type;\r\n }\r\n\r\n if (reportNotFound) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n node.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type parameters to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameter[],\r\n typeArgumentNodes: TypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (var i = 0; i < parameterCount; ++i) {\r\n var type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n contextualFunction: Function | null,\r\n contextualEnum: Enum | null = null\r\n ): ResolvedElement | null {\r\n var name = identifier.text;\r\n\r\n var element: Element | null;\r\n var namespace: Element | null;\r\n\r\n // check siblings\r\n if (contextualEnum) {\r\n\r\n if (\r\n contextualEnum.members &&\r\n (element = contextualEnum.members.get(name)) &&\r\n element.kind == ElementKind.ENUMVALUE\r\n ) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n } else if (contextualFunction) {\r\n\r\n // check locals\r\n if (element = contextualFunction.flow.getScopedLocal(name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.namespace) {\r\n do {\r\n if (element = this.elements.get(namespace.internalName + STATIC_DELIMITER + name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n } while (namespace = namespace.namespace);\r\n }\r\n }\r\n\r\n // search current file\r\n if (element = this.elements.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n // search global scope\r\n if (element = this.elements.get(name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function\r\n ): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n resolvedElement = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n var targetType: Type;\r\n var member: Element | null;\r\n\r\n // Resolve variable-likes to their class type first\r\n switch (target.kind) {\r\n\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n if (!(targetType = (target).type).classType) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, targetType.toString()\r\n );\r\n return null;\r\n }\r\n target = targetType.classType;\r\n break;\r\n\r\n case ElementKind.PROPERTY:\r\n var getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n if (!(targetType = getter.returnType).classType) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, targetType.toString()\r\n );\r\n return null;\r\n }\r\n target = targetType.classType;\r\n break;\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS:\r\n do {\r\n if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n // check inherited static members on the base prototype while target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // or inherited instance members on the cbase class while target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n\r\n default: // enums or other namespace-like elements\r\n if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(elementAccess: ElementAccessExpression, contextualFunction: Function): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = elementAccess.expression;\r\n resolvedElement = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\r\n switch (target.kind) {\r\n\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n var type = (target).type;\r\n if (type.classType) {\r\n var indexedGetName = (target = type.classType).prototype.fnIndexedGet;\r\n var indexedGet: Element | null;\r\n if (\r\n indexedGetName != null &&\r\n target.members &&\r\n (indexedGet = target.members.get(indexedGetName)) &&\r\n indexedGet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n return resolvedElement.set(indexedGet).withTarget(type.classType, targetExpression);\r\n }\r\n }\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(expression: Expression, contextualFunction: Function): ResolvedElement | null {\r\n var classType: Class | null;\r\n\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n\r\n switch (expression.kind) {\r\n\r\n case NodeKind.ASSERTION:\r\n var type = this.resolveType((expression).toType); // reports\r\n if (type && (classType = type.classType)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n return null;\r\n\r\n case NodeKind.BINARY:\r\n // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n\r\n case NodeKind.THIS: // -> Class\r\n if (classType = contextualFunction.instanceMethodOf) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n return null;\r\n\r\n case NodeKind.SUPER: // -> Class\r\n if ((classType = contextualFunction.instanceMethodOf) && (classType = classType.base)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n return null;\r\n\r\n case NodeKind.IDENTIFIER:\r\n return this.resolveIdentifier(expression, contextualFunction);\r\n\r\n case NodeKind.PROPERTYACCESS:\r\n return this.resolvePropertyAccess(expression, contextualFunction);\r\n\r\n case NodeKind.ELEMENTACCESS:\r\n return this.resolveElementAccess(expression, contextualFunction);\r\n\r\n case NodeKind.CALL:\r\n var resolved = this.resolveExpression((expression).expression, contextualFunction);\r\n if (resolved) {\r\n var element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = (element).resolveInclTypeArguments(\r\n (expression).typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance && instance.returnType.classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(instance.returnType.classType);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n}\r\n\r\n/** Common result structure returned when calling any of the resolve functions on a {@link Program}. */\r\nexport class ResolvedElement {\r\n\r\n /** The target element, if a property or element access */\r\n target: Element | null;\r\n /** The target element's expression, if a property or element access. */\r\n targetExpression: Expression | null;\r\n /** The element being accessed. */\r\n element: Element;\r\n\r\n /** Clears the target and sets the resolved element. */\r\n set(element: Element): this {\r\n this.target = null;\r\n this.targetExpression = null;\r\n this.element = element;\r\n return this;\r\n }\r\n\r\n /** Sets the resolved target in addition to the previously set element. */\r\n withTarget(target: Element, targetExpression: Expression): this {\r\n this.target = target;\r\n this.targetExpression = targetExpression;\r\n return this;\r\n }\r\n}\r\n\r\n// Cached result structure instance\r\nvar resolvedElement: ResolvedElement | null;\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE\r\n}\r\n\r\n/** Indicates traits of an {@link Element}. */\r\nexport enum ElementFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is compiled. */\r\n COMPILED = 1 << 0,\r\n /** Is an import. */\r\n IMPORTED = 1 << 1,\r\n /** Is an export. */\r\n EXPORTED = 1 << 2,\r\n /** Is built-in. */\r\n BUILTIN = 1 << 3,\r\n /** Is declared. */\r\n DECLARED = 1 << 4,\r\n /** Is generic. */\r\n GENERIC = 1 << 5,\r\n /** Is constant. */\r\n CONSTANT = 1 << 6,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 7,\r\n /** Is instance member. */\r\n INSTANCE = 1 << 8,\r\n /** Is getter. */\r\n GETTER = 1 << 9,\r\n /** Is setter. */\r\n SETTER = 1 << 10,\r\n /** Is global. */\r\n GLOBAL = 1 << 11,\r\n /** Is read-only. */\r\n READONLY = 1 << 12,\r\n /** Is a public member. */\r\n PUBLIC = 1 << 13,\r\n /** Is a protected member. */\r\n PROTECTED = 1 << 14,\r\n /** Is a private member. */\r\n PRIVATE = 1 << 15,\r\n /** Is an abstract member. */\r\n ABSTRACT = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an unmanaged class with limited capabilites. */\r\n UNMANAGED = 1 << 18,\r\n /** Is scoped. */\r\n SCOPED = 1 << 19,\r\n /** Is the start function. */\r\n START = 1 << 20\r\n}\r\n\r\n/** Base class of all program elements. */\r\nexport abstract class Element {\r\n\r\n /** Specific element kind. */\r\n kind: ElementKind;\r\n /** Containing {@link Program}. */\r\n program: Program;\r\n /** Simple name. */\r\n simpleName: string;\r\n /** Internal name referring to this element. */\r\n internalName: string;\r\n /** Element flags. */\r\n flags: ElementFlags = ElementFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent namespace, if applicable. */\r\n namespace: Element | null = null;\r\n\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n protected constructor(program: Program, simpleName: string, internalName: string) {\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n\r\n /** Tests if this element has a specific flag or flags. */\r\n is(flag: ElementFlags): bool { return (this.flags & flag) == flag; }\r\n\r\n /** Sets a specific flag or flags. */\r\n set(flag: ElementFlags): void { this.flags |= flag; }\r\n}\r\n\r\n/** A namespace. */\r\nexport class Namespace extends Element {\r\n\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n kind = ElementKind.NAMESPACE;\r\n\r\n /** Declaration reference. */\r\n declaration: NamespaceDeclaration; // more specific\r\n\r\n /** Constructs a new namespace. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: NamespaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** An enum. */\r\nexport class Enum extends Element {\r\n\r\n kind = ElementKind.ENUM;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumDeclaration;\r\n\r\n /** Constructs a new enum. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n case ModifierKind.CONST: this.set(ElementFlags.CONSTANT); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** An enum value. */\r\nexport class EnumValue extends Element {\r\n\r\n kind = ElementKind.ENUMVALUE;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumValueDeclaration;\r\n /** Parent enum. */\r\n enum: Enum;\r\n /** Constant value, if applicable. */\r\n constantValue: i32 = 0;\r\n\r\n constructor(\r\n enm: Enum,\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumValueDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.enum = enm;\r\n this.declaration = declaration;\r\n }\r\n}\r\n\r\nexport const enum ConstantValueKind {\r\n NONE,\r\n INTEGER,\r\n FLOAT\r\n}\r\n\r\nexport class VariableLikeElement extends Element {\r\n\r\n // kind varies\r\n\r\n /** Declaration reference. */\r\n declaration: VariableLikeDeclarationStatement;\r\n /** Variable type. Is {@link Type.void} for type-inferred {@link Global}s before compilation. */\r\n type: Type;\r\n /** Constant value kind. */\r\n constantValueKind: ConstantValueKind = ConstantValueKind.NONE;\r\n /** Constant integer value, if applicable. */\r\n constantIntegerValue: I64;\r\n /** Constant float value, if applicable. */\r\n constantFloatValue: f64;\r\n\r\n withConstantIntegerValue(lo: i32, hi: i32): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = i64_new(lo, hi);\r\n this.set(ElementFlags.CONSTANT | ElementFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(ElementFlags.CONSTANT | ElementFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: VariableLikeDeclarationStatement,\r\n type: Type\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.IMPORT:\r\n this.set(ElementFlags.IMPORTED);\r\n break;\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.CONST:\r\n this.set(ElementFlags.CONSTANT);\r\n break;\r\n\r\n case ModifierKind.LET:\r\n this.set(ElementFlags.SCOPED);\r\n break;\r\n\r\n case ModifierKind.DECLARE:\r\n this.set(ElementFlags.DECLARED);\r\n break;\r\n\r\n case ModifierKind.READONLY:\r\n this.set(this.declaration.initializer\r\n ? ElementFlags.CONSTANT | ElementFlags.READONLY\r\n : ElementFlags.READONLY\r\n );\r\n break;\r\n\r\n case ModifierKind.PUBLIC:\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.STATIC:\r\n break; // static fields become globals\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n\r\n constructor(program: Program, simpleName: string, index: i32, type: Type) {\r\n super(program, simpleName, simpleName);\r\n this.index = index;\r\n this.type = type;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. */\r\n classTypeArguments: Type[] | null = null;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.IMPORT:\r\n this.set(ElementFlags.IMPORTED);\r\n break;\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.DECLARE:\r\n this.set(ElementFlags.DECLARED);\r\n break;\r\n\r\n case ModifierKind.GET:\r\n this.set(ElementFlags.GETTER);\r\n break;\r\n\r\n case ModifierKind.SET:\r\n this.set(ElementFlags.SETTER);\r\n break;\r\n\r\n case ModifierKind.STATIC:\r\n case ModifierKind.ABSTRACT:\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.PUBLIC:\r\n break; // already handled\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (this.declaration.isGeneric) {\r\n this.set(ElementFlags.GENERIC);\r\n }\r\n if (this.classPrototype = classPrototype) {\r\n this.set(ElementFlags.INSTANCE);\r\n }\r\n }\r\n\r\n resolve(\r\n functionTypeArguments: Type[] | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var instanceKey = functionTypeArguments ? typesToString(functionTypeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = this.declaration;\r\n\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (var [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var i: i32, k: i32;\r\n\r\n // inherit class type arguments if a partially resolved instance method (classTypeArguments is set)\r\n if (this.classTypeArguments) {\r\n if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n var classDeclaration = (this.classPrototype).declaration;\r\n var classTypeParameters = classDeclaration.typeParameters;\r\n if ((k = this.classTypeArguments.length) != classTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(classTypeParameters[i].name.text, this.classTypeArguments[i]);\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments\r\n var functionTypeParameters = declaration.typeParameters;\r\n if (functionTypeArguments && (k = functionTypeArguments.length)) {\r\n if (!functionTypeParameters || k != functionTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(functionTypeParameters[i].name.text, functionTypeArguments[i]);\r\n }\r\n }\r\n\r\n // resolve parameters\r\n // TODO: 'this' type\r\n k = declaration.parameters.length;\r\n var parameters = new Array(k);\r\n var parameterTypes = new Array(k);\r\n var typeNode: TypeNode | null;\r\n for (i = 0; i < k; ++i) {\r\n var parameterDeclaration = declaration.parameters[i];\r\n typeNode = assert(parameterDeclaration.type);\r\n var parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (parameterType) {\r\n parameters[i] = new Parameter(parameterDeclaration.name.text, parameterType, parameterDeclaration.initializer);\r\n parameterTypes[i] = parameterType;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n var classInstance: Class | null = null;\r\n if (this.classPrototype) {\r\n classInstance = this.classPrototype.resolve(this.classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n }\r\n\r\n // resolve return type\r\n // TODO: 'this' type\r\n var returnType: Type;\r\n if (this.is(ElementFlags.SETTER) || this.is(ElementFlags.CONSTRUCTOR)) {\r\n returnType = Type.void; // not annotated\r\n } else {\r\n typeNode = assert(declaration.returnType);\r\n var type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (type) {\r\n returnType = type;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n instance = new Function(this, internalName, functionTypeArguments, parameters, returnType, classInstance);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n return instance;\r\n }\r\n\r\n resolveInclTypeArguments(\r\n typeArgumentNodes: TypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(ElementFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(\r\n assert(this.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n resolvePartial(classTypeArguments: Type[] | null): FunctionPrototype | null {\r\n if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n if (classTypeArguments && classTypeArguments.length) {\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n this.simpleName,\r\n this.internalName,\r\n this.declaration,\r\n this.classPrototype\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n return this; // no need to clone\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Concrete type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Concrete function parameters. Excluding `this` if an instance method. */\r\n parameters: Parameter[] | null;\r\n /** Concrete return type. */\r\n returnType: Type;\r\n /** If an instance method, the concrete class it is a member of. */\r\n instanceMethodOf: Class | null;\r\n /** Map of locals by name. */\r\n locals: Map = new Map();\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] | null = null;\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n typeArguments: Type[] | null,\r\n parameters: Parameter[] | null,\r\n returnType: Type,\r\n instanceMethodOf: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.typeArguments = typeArguments;\r\n this.parameters = parameters || [];\r\n this.returnType = returnType;\r\n this.instanceMethodOf = instanceMethodOf;\r\n this.flags = prototype.flags;\r\n if (!(prototype.is(ElementFlags.BUILTIN) || prototype.is(ElementFlags.DECLARED))) {\r\n var localIndex = 0;\r\n if (instanceMethodOf) {\r\n assert(this.is(ElementFlags.INSTANCE)); // internal error\r\n this.locals.set(\"this\", new Local(prototype.program, \"this\", localIndex++, instanceMethodOf.type));\r\n if (instanceMethodOf.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) {\r\n this.contextualTypeArguments = new Map();\r\n }\r\n for (var [inheritedName, inheritedType] of instanceMethodOf.contextualTypeArguments) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n } else {\r\n assert(!this.is(ElementFlags.INSTANCE)); // internal error\r\n }\r\n for (var i = 0, k = this.parameters.length; i < k; ++i) {\r\n var parameter = this.parameters[i];\r\n var parameterName = assert(parameter.name, \"parameter must be named\"); // not a builtin or declared\r\n this.locals.set(\r\n parameterName,\r\n new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameter.type\r\n )\r\n );\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = (this.parameters ? this.parameters.length : 0) + this.additionalLocals.length;\r\n if (this.is(ElementFlags.INSTANCE)) localIndex++; // plus 'this'\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type\r\n );\r\n if (name) {\r\n if (this.locals.has(name)) throw new Error(\"duplicate local name\");\r\n this.locals.set(name, local);\r\n }\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: temps = this.tempI32s; break;\r\n case NativeType.I64: temps = this.tempI64s; break;\r\n case NativeType.F32: temps = this.tempF32s; break;\r\n case NativeType.F64: temps = this.tempF64s; break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps && temps.length) {\r\n var ret = temps.pop();\r\n ret.type = type;\r\n return ret;\r\n }\r\n return this.addLocal(type);\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: temps = this.tempI32s || (this.tempI32s = []); break;\r\n case NativeType.I64: temps = this.tempI64s || (this.tempI64s = []); break;\r\n case NativeType.F32: temps = this.tempF32s || (this.tempF32s = []); break;\r\n case NativeType.F64: temps = this.tempF64s || (this.tempF64s = []); break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: temps = this.tempI32s || (this.tempI32s = []); break;\r\n case NativeType.I64: temps = this.tempI64s || (this.tempI64s = []); break;\r\n case NativeType.F32: temps = this.tempF32s || (this.tempF32s = []); break;\r\n case NativeType.F64: temps = this.tempF64s || (this.tempF64s = []); break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps.length > 0) {\r\n return temps[temps.length - 1];\r\n }\r\n var local: Local = this.addLocal(type);\r\n temps.push(local);\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) {\r\n this.breakStack = [ id ];\r\n } else {\r\n this.breakStack.push(id);\r\n }\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n var debugLocations = this.debugLocations;\r\n if (debugLocations) {\r\n for (var i = 0, k = debugLocations.length; i < k; ++i) {\r\n var debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n this.debugLocations = null;\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Function): bool {\r\n return this == target; // TODO\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n\r\n /** Returns the function type TypeScript representation of this function.*/\r\n toTypeString(): string { throw new Error(\"not implemented\"); }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.READONLY:\r\n this.set(ElementFlags.READONLY);\r\n break;\r\n\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.PUBLIC:\r\n case ModifierKind.STATIC:\r\n break; // already handled\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Whether the field is read-only or not. */\r\n get isReadonly(): bool {\r\n return (this.flags & ElementFlags.READONLY) != 0;\r\n }\r\n set isReadonly(is: bool) {\r\n if (is) {\r\n this.flags |= ElementFlags.READONLY;\r\n } else {\r\n this.flags &= ~ElementFlags.READONLY;\r\n }\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(prototype: FieldPrototype, internalName: string, type: Type) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n\r\n /** Overloaded indexed get method, if any. */\r\n fnIndexedGet: string | null = null;\r\n /** Overloaded indexed set method, if any. */\r\n fnIndexedSet: string | null = null;\r\n /** Overloaded concatenation method, if any. */\r\n fnConcat: string | null = null;\r\n /** Overloaded equality comparison method, if any. */\r\n fnEquals: string | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (this.declaration.typeParameters.length) {\r\n this.set(ElementFlags.GENERIC);\r\n }\r\n }\r\n\r\n /** Whether an unamanaged class or not. */\r\n get isUnmanaged(): bool {\r\n return (this.flags & ElementFlags.UNMANAGED) != 0;\r\n }\r\n set isUnmanaged(is: bool) {\r\n if (is) {\r\n this.flags |= ElementFlags.UNMANAGED;\r\n } else {\r\n this.flags &= ~ElementFlags.UNMANAGED;\r\n }\r\n }\r\n\r\n resolve(typeArguments: Type[] | null, contextualTypeArguments: Map | null = null): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (var [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var declaration = this.declaration;\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n var baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classType)) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n return null;\r\n }\r\n if (baseClass.prototype.isUnmanaged != this.isUnmanaged) {\r\n this.program.error(\r\n DiagnosticCode.Structs_cannot_extend_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments if provided\r\n var i: i32, k: i32;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(declaration.typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else if (declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (var inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n if (this.constructorPrototype) {\r\n var partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) {\r\n instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n // TODO: ^ doesn't know the return type, hence returns null\r\n }\r\n\r\n if (this.instanceMembers) {\r\n for (var member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n case ElementKind.FIELD_PROTOTYPE: // fields are layed out in advance\r\n if (!instance.members) instance.members = new Map();\r\n var fieldDeclaration = (member).declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n var fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (fieldType) {\r\n var fieldInstance = new Field(member, (member).internalName, fieldType);\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: if (memoryOffset & 1) ++memoryOffset; break;\r\n case 4: if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break;\r\n case 8: if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break;\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n }\r\n break;\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE: // instance methods remain partially resolved prototypes until compiled\r\n if (!instance.members) instance.members = new Map();\r\n var methodPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\r\n instance.members.set(member.simpleName, methodPrototype);\r\n }\r\n break;\r\n\r\n case ElementKind.PROPERTY: // instance properties are cloned with partially resolved getters and setters\r\n if (!instance.members) instance.members = new Map();\r\n assert((member).getterPrototype);\r\n var instanceProperty = new Property(this.program, member.simpleName, member.internalName, this);\r\n instanceProperty.getterPrototype = (\r\n ((member).getterPrototype).resolvePartial(\r\n typeArguments\r\n )\r\n );\r\n if ((member).setterPrototype) {\r\n instanceProperty.setterPrototype = (\r\n ((member).setterPrototype).resolvePartial(\r\n typeArguments\r\n )\r\n );\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n\r\n default:\r\n throw new Error(\"instance member expected\");\r\n }\r\n }\r\n }\r\n instance.currentMemoryOffset = memoryOffset; // sizeof() is its byte size in memory\r\n return instance;\r\n }\r\n\r\n resolveInclTypeArguments(\r\n typeArgumentNodes: TypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n alternativeReportNode: Node | null\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(ElementFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(\r\n this.declaration.typeParameters,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n } else {\r\n assert(typeArgumentNodes == null || !typeArgumentNodes.length);\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n if (base.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (var [baseName, baseType] of base.contextualTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n var typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do {\r\n if (current == target) {\r\n return true;\r\n }\r\n } while (current = current.base);\r\n return false;\r\n }\r\n\r\n toString(): string {\r\n return this.prototype.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName, declaration);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch possibly throws. */\r\n POSSIBLY_THROWS = 1 << 1,\r\n /** This branch possible breaks. */\r\n POSSIBLY_BREAKS = 1 << 2,\r\n /** This branch possible continues. */\r\n POSSIBLY_CONTINUES = 1 << 3\r\n}\r\n\r\n/** A control flow evaluator. */\r\nexport class Flow {\r\n\r\n /** Parent flow. */\r\n parent: Flow | null;\r\n /** Flow flags indicating specific conditions. */\r\n flags: FlowFlags;\r\n /** Function this flow belongs to. */\r\n currentFunction: Function;\r\n /** The label we break to when encountering a continue statement. */\r\n continueLabel: string | null;\r\n /** The label we break to when encountering a break statement. */\r\n breakLabel: string | null;\r\n /** Scoped local variables. */\r\n scopedLocals: Map | null = null;\r\n\r\n /** Creates the parent flow of the specified function. */\r\n static create(currentFunction: Function): Flow {\r\n var parentFlow = new Flow();\r\n parentFlow.parent = null;\r\n parentFlow.flags = FlowFlags.NONE;\r\n parentFlow.currentFunction = currentFunction;\r\n parentFlow.continueLabel = null;\r\n parentFlow.breakLabel = null;\r\n return parentFlow;\r\n }\r\n\r\n private constructor() { }\r\n\r\n /** Tests if this flow has the specified flag or flags. */\r\n is(flag: FlowFlags): bool { return (this.flags & flag) == flag; }\r\n\r\n /** Sets the specified flag or flags. */\r\n set(flag: FlowFlags): void { this.flags |= flag; }\r\n\r\n /** Enters a new branch or scope and returns the new flow. */\r\n enterBranchOrScope(): Flow {\r\n var branchFlow = new Flow();\r\n branchFlow.parent = this;\r\n branchFlow.flags = this.flags;\r\n branchFlow.currentFunction = this.currentFunction;\r\n branchFlow.continueLabel = this.continueLabel;\r\n branchFlow.breakLabel = this.breakLabel;\r\n return branchFlow;\r\n }\r\n\r\n /** Leaves the current branch or scope and returns the parent flow. */\r\n leaveBranchOrScope(): Flow {\r\n var parent = assert(this.parent);\r\n\r\n // Free block-scoped locals\r\n if (this.scopedLocals) {\r\n for (var scopedLocal of this.scopedLocals.values()) {\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n this.scopedLocals = null;\r\n }\r\n\r\n // Propagate flags to parent\r\n if (this.is(FlowFlags.POSSIBLY_THROWS)) {\r\n parent.set(FlowFlags.POSSIBLY_THROWS);\r\n }\r\n if (this.is(FlowFlags.POSSIBLY_BREAKS) && parent.breakLabel == this.breakLabel) {\r\n parent.set(FlowFlags.POSSIBLY_BREAKS);\r\n }\r\n if (this.is(FlowFlags.POSSIBLY_CONTINUES) && parent.continueLabel == this.continueLabel) {\r\n parent.set(FlowFlags.POSSIBLY_CONTINUES);\r\n }\r\n\r\n return parent;\r\n }\r\n\r\n /** Adds a new scoped local of the specified name. */\r\n addScopedLocal(name: string, type: Type, reportNode: Node): void {\r\n var scopedLocal = this.currentFunction.getTempLocal(type);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else if (this.scopedLocals.has(name)) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n reportNode.range\r\n );\r\n return;\r\n }\r\n this.scopedLocals.set(name, scopedLocal);\r\n }\r\n\r\n /** Gets the local of the specified name in the current scope. */\r\n getScopedLocal(name: string): Local | null {\r\n var local: Local | null;\r\n var current: Flow | null = this;\r\n do {\r\n if (current.scopedLocals && (local = current.scopedLocals.get(name))) {\r\n return local;\r\n }\r\n } while (current = current.parent);\r\n return this.currentFunction.locals.get(name);\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): bool {\r\n assert(this.parent == null, \"must be the topmost parent flow\");\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n return this.is(FlowFlags.RETURNS);\r\n }\r\n}\r\n","/*\r\n\r\n This is a modified version of TypeScript's scanner that doesn't perform as much bookkeeping, simply\r\n skips over trivia and provides a more general mark/reset mechanism for the parser to utilize on\r\n ambiguous tokens.\r\n\r\n next() advances the token\r\n peek() peeks for the next token\r\n skip(token) skips over a token if possible\r\n mark() marks at current token\r\n reset() resets to marked state\r\n range() gets the range of the current token\r\n\r\n readFloat() on FLOATLITERAL\r\n readIdentifier() on IDENTIFIER\r\n readInteger() on INTEGERLITERAL\r\n readString() on STRINGLITERAL\r\n\r\n*/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util/charcode\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport namespace Token {\r\n\r\n export function fromKeyword(text: string): Token {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n case \"break\": return Token.BREAK;\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n case \"get\": return Token.GET;\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n case \"keyof\": return Token.KEYOF;\r\n case \"let\": return Token.LET;\r\n case \"module\": return Token.MODULE;\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n case \"of\": return Token.OF;\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n case \"yield\": return Token.YIELD;\r\n default: return Token.INVALID;\r\n }\r\n }\r\n\r\n export function isAlsoIdentifier(token: Token): bool {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n export function operatorToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: assert(false); return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var pos = this.start;\r\n var line = 1;\r\n while (pos-- > 0) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) {\r\n line++;\r\n }\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var pos = this.start;\r\n var column = 0;\r\n while (pos-- > 0) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n column++;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n markedPos: i32 = 0;\r\n markedToken: Token = -1;\r\n markedTokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(preferIdentifier: bool = false): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(preferIdentifier);\r\n }\r\n\r\n private unsafeNext(preferIdentifier: bool = false, maxTokenLength: i32 = i32.MAX_VALUE): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n var c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n\r\n case CharCode.CARRIAGERETURN:\r\n if (\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n break;\r\n\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE:\r\n ++this.pos;\r\n break;\r\n\r\n case CharCode.EXCLAMATION:\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n\r\n case CharCode.PERCENT:\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n\r\n case CharCode.AMPERSAND:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n\r\n case CharCode.OPENPAREN:\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n\r\n case CharCode.CLOSEPAREN:\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n\r\n case CharCode.ASTERISK:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n\r\n case CharCode.PLUS:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n\r\n case CharCode.COMMA:\r\n ++this.pos;\r\n return Token.COMMA;\r\n\r\n case CharCode.MINUS:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n\r\n case CharCode.DOT:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n\r\n case CharCode.SLASH:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n // TODO: triple-slash?\r\n // if (\r\n // this.pos + 1 < this.end &&\r\n // text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n // ) {\r\n // }\r\n while (++this.pos < this.end) {\r\n if (isLineBreak(text.charCodeAt(this.pos))) break;\r\n }\r\n continue;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n var closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n }\r\n continue;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9:\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n\r\n case CharCode.COLON:\r\n ++this.pos;\r\n return Token.COLON;\r\n\r\n case CharCode.SEMICOLON:\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n\r\n case CharCode.LESSTHAN:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n\r\n case CharCode.EQUALS:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n\r\n case CharCode.GREATERTHAN:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n\r\n case CharCode.QUESTION:\r\n ++this.pos;\r\n return Token.QUESTION;\r\n\r\n case CharCode.OPENBRACKET:\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n\r\n case CharCode.CLOSEBRACKET:\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n\r\n case CharCode.CARET:\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n\r\n case CharCode.OPENBRACE:\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n\r\n case CharCode.BAR:\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n\r\n case CharCode.CLOSEBRACE:\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n\r\n case CharCode.TILDE:\r\n ++this.pos;\r\n return Token.TILDE;\r\n\r\n case CharCode.AT:\r\n ++this.pos;\r\n return Token.AT;\r\n\r\n default:\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n var posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n var keywordText = text.substring(posBefore, this.pos);\r\n var keywordToken = Token.fromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n !(preferIdentifier && Token.isAlsoIdentifier(keywordToken))\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n preferIdentifier: bool = false,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(preferIdentifier, maxCompoundLength);\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skip(token: Token): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n this.token = this.unsafeNext(token == Token.IDENTIFIER, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n // skipUntil(token1: Token, token2: Token = -1): bool {\r\n // var next: Token;\r\n // do {\r\n // if ((next = this.peek()) == Token.ENDOFFILE)\r\n // return false;\r\n // if (next == token1 || next == token2)\r\n // return true;\r\n // this.next();\r\n // } while (true);\r\n // }\r\n\r\n mark(): void {\r\n this.markedPos = this.pos;\r\n this.markedToken = this.token;\r\n this.markedTokenPos = this.tokenPos;\r\n }\r\n\r\n reset(): void {\r\n this.pos = this.markedPos;\r\n this.token = this.markedToken;\r\n this.tokenPos = this.markedTokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n var c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n\r\n case CharCode._0:\r\n return \"\\0\";\r\n\r\n case CharCode.b:\r\n return \"\\b\";\r\n\r\n case CharCode.t:\r\n return \"\\t\";\r\n\r\n case CharCode.n:\r\n return \"\\n\";\r\n\r\n case CharCode.v:\r\n return \"\\v\";\r\n\r\n case CharCode.f:\r\n return \"\\f\";\r\n\r\n case CharCode.r:\r\n return \"\\r\";\r\n\r\n case CharCode.SINGLEQUOTE:\r\n return \"'\";\r\n\r\n case CharCode.DOUBLEQUOTE:\r\n return \"\\\"\";\r\n\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n\r\n case CharCode.CARRIAGERETURN:\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR:\r\n return \"\";\r\n default:\r\n return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n var c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n var c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n\r\n case CharCode.g:\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n\r\n case CharCode.i:\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n\r\n case CharCode.m:\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n\r\n default:\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o:\r\n return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n var c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if (c < CharCode._0 || c > CharCode._9) break;\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n\r\n case CharCode.X:\r\n case CharCode.x:\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n\r\n case CharCode.B:\r\n case CharCode.b:\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n\r\n case CharCode.O:\r\n case CharCode.o:\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n var start = this.pos;\r\n ++this.pos;\r\n var value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n var c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n","import {\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER\r\n} from \"./program\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalize as normalizePath,\r\n resolve as resolvePath\r\n} from \"./util/path\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n FUNCTIONARROW,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // other\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n MODIFIER,\r\n PARAMETER,\r\n SWITCHCASE\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n\r\n // types\r\n\r\n static createType(\r\n identifier: IdentifierExpression,\r\n typeArguments: TypeNode[],\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = identifier;\r\n type.typeArguments = typeArguments;\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentOpt(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: TypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: TypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration,\r\n isArrow: bool = false\r\n ): FunctionExpression {\r\n var expr = isArrow\r\n ? new FunctionArrowExpression()\r\n : new FunctionExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: TypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameter[],\r\n extendsType: TypeNode | null,\r\n implementsTypes: TypeNode[],\r\n members: DeclarationStatement[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDecorator(\r\n expression: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): Decorator {\r\n var stmt = new Decorator();\r\n stmt.range = range;\r\n stmt.name = expression; expression.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n if (expression.kind == NodeKind.IDENTIFIER) {\r\n switch ((expression).text) {\r\n case \"global\": stmt.decoratorKind = DecoratorKind.GLOBAL; break;\r\n case \"operator\": stmt.decoratorKind = DecoratorKind.OPERATOR; break;\r\n case \"unmanaged\": stmt.decoratorKind = DecoratorKind.UNMANAGED; break;\r\n case \"offset\": stmt.decoratorKind = DecoratorKind.OFFSET; break;\r\n default: stmt.decoratorKind = DecoratorKind.CUSTOM; break;\r\n }\r\n } else {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[],\r\n path: StringLiteralExpression | null,\r\n modifiers: Modifier[] | null,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n members: DeclarationStatement[],\r\n modifiers: Modifier[] | null,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: TypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameter {\r\n var elem = new TypeParameter();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: TypeNode | null,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): Parameter {\r\n var elem = new Parameter();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameter[] | null,\r\n parameters: Parameter[],\r\n returnType: TypeNode | null,\r\n body: Statement | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.parameters = parameters; setParent(parameters, stmt);\r\n stmt.returnType = returnType; if (returnType) returnType.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameter[] | null,\r\n parameters: Parameter[],\r\n returnType: TypeNode | null,\r\n body: Statement | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.parameters = parameters; setParent(parameters, stmt);\r\n stmt.returnType = returnType; if (returnType) returnType.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createModifier(kind: ModifierKind, range: Range): Modifier {\r\n var elem = new Modifier();\r\n elem.range = range;\r\n elem.modifierKind = kind;\r\n return elem;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n alias: TypeNode,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.alias = alias; alias.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: TypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.modifiers = modifiers; // inherited from parent VariableStatement\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends Node {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: TypeNode[];\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameter extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport const enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport const enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: TypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: TypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an arrow function expression. */\r\nexport class FunctionArrowExpression extends FunctionExpression {\r\n kind = NodeKind.FUNCTIONARROW;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\n/** Indicates the specific kind of a modifier. */\r\nexport enum ModifierKind {\r\n ASYNC,\r\n CONST,\r\n LET,\r\n DECLARE,\r\n EXPORT,\r\n IMPORT,\r\n STATIC,\r\n ABSTRACT,\r\n PUBLIC,\r\n PRIVATE,\r\n PROTECTED,\r\n READONLY,\r\n GET,\r\n SET,\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n this.internalPath = mangleInternalPath(this.normalizedPath);\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of decorators. */\r\n decorators: Decorator[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return (\r\n hasModifier(ModifierKind.EXPORT, this.modifiers) &&\r\n (parent).isTopLevelExport\r\n );\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return (\r\n hasModifier(ModifierKind.STATIC, this.modifiers) &&\r\n (parent).isTopLevelExport\r\n );\r\n }\r\n return (\r\n parent.kind == NodeKind.SOURCE &&\r\n hasModifier(ModifierKind.EXPORT, this.modifiers)\r\n );\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: TypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameter[];\r\n /** Base class type being extended. */\r\n extendsType: TypeNode | null;\r\n /** Interface types being implemented. */\r\n implementsTypes: TypeNode[];\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Built-in decorator kinds. */\r\nexport const enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n UNMANAGED,\r\n OFFSET\r\n}\r\n\r\n/** Depresents a decorator. */\r\nexport class Decorator extends Statement {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n modifiers = null;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of members. */\r\n members: ExportMember[];\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameter[] | null;\r\n /** Accepted parameters. */\r\n parameters: Parameter[];\r\n /** Return type. */\r\n returnType: TypeNode | null;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n return this.typeParameters != null && this.typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n modifiers = null;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class Parameter extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: TypeNode | null;\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a single modifier. */\r\nexport class Modifier extends Node {\r\n kind = NodeKind.MODIFIER;\r\n\r\n /** Specific modifier kind. */\r\n modifierKind: ModifierKind;\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type being aliased. */\r\n alias: TypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n\r\n /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of decorators. */\r\n decorators: Decorator[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Cached unused modifiers for reuse. */\r\nvar reusableModifiers: Modifier[] | null = null;\r\n\r\nexport function setReusableModifiers(modifiers: Modifier[]): void {\r\n reusableModifiers = modifiers;\r\n}\r\n\r\n/** Creates a new modifiers array. */\r\nexport function createModifiers(): Modifier[] {\r\n var ret: Modifier[];\r\n if (reusableModifiers != null) {\r\n ret = reusableModifiers;\r\n reusableModifiers = null;\r\n } else {\r\n ret = [];\r\n }\r\n ret.length = 0;\r\n return ret;\r\n}\r\n\r\n// Utility\r\n\r\n/** Adds a modifier to a set of modifiers. Creates a new set if `null`. */\r\nexport function addModifier(modifier: Modifier, modifiers: Modifier[] | null): Modifier[] {\r\n if (modifiers == null) modifiers = createModifiers();\r\n modifiers.push(modifier);\r\n return modifiers;\r\n}\r\n\r\n/** Gets a specific modifier from the specified set of modifiers. */\r\nexport function getModifier(kind: ModifierKind, modifiers: Modifier[] | null): Modifier | null {\r\n if (modifiers) {\r\n for (var i = 0, k = modifiers.length; i < k; ++i) {\r\n if (modifiers[i].modifierKind == kind) {\r\n return modifiers[i];\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Tests whether a modifier exists in the specified set of modifiers. */\r\nexport function hasModifier(kind: ModifierKind, modifiers: Modifier[] | null): bool {\r\n return getModifier(kind, modifiers) != null;\r\n}\r\n\r\n/** Gets the first decorator by name within at set of decorators, if present. */\r\nexport function getFirstDecorator(name: string, decorators: Decorator[] | null): Decorator | null {\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n var decorator = decorators[i];\r\n var expression = decorator.name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return decorator;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Tests if a specific decorator is present within the specified decorators. */\r\nexport function hasDecorator(name: string, decorators: Decorator[] | null): bool {\r\n return getFirstDecorator(name, decorators) != null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n hasModifier(ModifierKind.STATIC, declaration.modifiers)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\nfunction setParentOpt(nodes: (Node | null)[], parent: Node): void {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n var node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","import {\r\n Class,\r\n Function\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n I8,\r\n I16,\r\n I32,\r\n I64,\r\n ISIZE,\r\n\r\n // unsigned integers\r\n U8,\r\n U16,\r\n U32,\r\n U64,\r\n USIZE,\r\n BOOL, // sic\r\n\r\n // floats\r\n F32,\r\n F64,\r\n\r\n // other\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a sized integer type with a target specific bit size. */\r\n SIZE = 1 << 4,\r\n /** Is a small type that is emulated in a larger type. */\r\n SMALL = 1 << 5,\r\n /** Is a long type larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. Ceiled to 8-bits. */\r\n byteSize: i32;\r\n /** Underlying class type, if a class type. */\r\n classType: Class | null;\r\n /** Underlying function type, if a function type. */\r\n functionType: Function | null;\r\n /** Respective nullable type, if non-nullable. */\r\n nullableType: Type | null = null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: i32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classType = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Computes the sign-extending shift in the target type. */\r\n computeSmallIntegerShift(targetType: Type): u32 {\r\n return targetType.size - this.size;\r\n }\r\n\r\n /** Computes the truncating mask in the target type. */\r\n computeSmallIntegerMask(targetType: Type): u32 {\r\n return -1 >>> (targetType.size - this.size);\r\n }\r\n\r\n /** Tests if this type has the specified capabilities. */\r\n is(flags: TypeFlags): bool {\r\n return (this.flags & flags) == flags;\r\n }\r\n\r\n /** Tests if this type is a class type. */\r\n get isClass(): bool { return this.classType != null; }\r\n /** Tests if this type is a function type. */\r\n get isFunction(): bool { return this.functionType != null; }\r\n /** Tests if this type is a reference type. */\r\n get isReference(): bool { return this.classType != null || this.functionType != null; }\r\n\r\n /** Composes a class type from this type and a class. */\r\n asClass(classType: Class): Type {\r\n assert(this.kind == TypeKind.USIZE && !this.classType);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classType = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(functionType: Function): Type {\r\n assert(this.kind == TypeKind.U32 && !this.functionType);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.functionType = functionType;\r\n return ret;\r\n }\r\n\r\n /** Composes the respective nullable type of this type. */\r\n asNullable(): Type {\r\n assert(this.isReference);\r\n if (!this.nullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.nullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.nullableType.classType = this.classType; // either a class reference\r\n this.nullableType.functionType = this.functionType; // or a function reference\r\n }\r\n return this.nullableType;\r\n }\r\n\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n isAssignableTo(target: Type, signednessIsImportant: bool = false): bool {\r\n var currentClass: Class | null;\r\n var targetClass: Class | null;\r\n var currentFunction: Function | null;\r\n var targetFunction: Function | null;\r\n if (this.isReference) {\r\n if (target.isReference) {\r\n if (currentClass = this.classType) {\r\n if (targetClass = target.classType) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.functionType) {\r\n if (targetFunction = target.functionType) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n } else if (!target.isReference) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (!signednessIsImportant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)) {\r\n return this.size <= target.size;\r\n }\r\n } else if (target.kind == TypeKind.F32) {\r\n return this.size <= 23; // mantissa bits\r\n } else if (target.kind == TypeKind.F64) {\r\n return this.size <= 52; // ^\r\n }\r\n } else if (this.is(TypeFlags.FLOAT)) {\r\n if (target.is(TypeFlags.FLOAT)) {\r\n return this.size <= target.size;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Determines the common compatible type of two types, if any. */\r\n static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null {\r\n if (right.isAssignableTo(left, signednessIsImportant)) {\r\n return left;\r\n } else if (left.isAssignableTo(right, signednessIsImportant)) {\r\n return right;\r\n }\r\n return null;\r\n }\r\n\r\n /** Converts this type to its TypeScript representation. */\r\n toString(kindOnly: bool = false): string {\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE:\r\n if (kindOnly) return \"usize\";\r\n return this.classType\r\n ? this.classType.toString()\r\n : this.functionType\r\n ? this.functionType.toTypeString()\r\n : \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: assert(false); return \"\";\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n\r\n default:\r\n return NativeType.I32;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return NativeType.I64;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n\r\n case TypeKind.F32:\r\n return NativeType.F32;\r\n\r\n case TypeKind.F64:\r\n return NativeType.F64;\r\n\r\n case TypeKind.VOID:\r\n return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(0);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(0);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(0);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(0);\r\n\r\n case TypeKind.F64:\r\n return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(1);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(1);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(1);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(1);\r\n\r\n case TypeKind.F64:\r\n return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(-1);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(-1);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(-1, -1);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(-1);\r\n\r\n case TypeKind.F64:\r\n return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n\r\n default:\r\n return \"i\";\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return \"I\";\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n return this.size == 64 ? \"I\" : \"i\";\r\n\r\n case TypeKind.F32:\r\n return \"f\";\r\n\r\n case TypeKind.F64:\r\n return \"F\";\r\n\r\n case TypeKind.VOID:\r\n return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var k = types.length;\r\n var ret = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n ret[i] = types[i].toNativeType();\r\n }\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var k = types.length;\r\n if (!k) return \"\";\r\n var sb = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n sb[i] = types[i].toString();\r\n }\r\n return sb.join(\", \");\r\n}\r\n","import {\r\n compileCall as compileBuiltinCall,\r\n compileGetConstant as compileBuiltinGetConstant,\r\n compileAllocate as compileBuiltinAllocate\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId\r\n} from \"./module\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ElementFlags,\r\n ConstantValueKind,\r\n Parameter,\r\n\r\n PATH_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n ModifierKind,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n\r\n hasModifier\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, does not set up a memory. */\r\n noMemory: bool = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n importMemory: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: u32 = 0;\r\n /** Memory allocation implementation to use. */\r\n allocateImpl: string = \"allocate_memory\";\r\n /** Memory freeing implementation to use. */\r\n freeImpl: string = \"free_memory\";\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n\r\n /** Start function being compiled. */\r\n startFunction: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[] = new Array();\r\n\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = new Array();\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n\r\n /** Function table being compiled. */\r\n functionTable: Function[] = new Array();\r\n\r\n /** Already processed file names. */\r\n files: Set = new Set();\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.options = options ? options : new Options();\r\n this.memoryOffset = i64_new(\r\n max(this.options.memoryBase, this.options.usizeType.byteSize) // leave space for `null`\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n this.program.initialize(this.options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(this.program.elements.get(\"start\"));\r\n assert(startFunctionPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n var startFunctionInstance = new Function(\r\n startFunctionPrototype,\r\n startFunctionPrototype.internalName,\r\n null, // not generic\r\n null, // no parameters\r\n Type.void\r\n );\r\n startFunctionInstance.set(ElementFlags.START);\r\n this.currentFunction = this.startFunction = startFunctionInstance;\r\n\r\n var sources = this.program.sources;\r\n\r\n // compile entry file(s) while traversing to reachable elements\r\n for (var i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) {\r\n this.compileSource(sources[i]);\r\n }\r\n }\r\n\r\n // compile the start function if not empty\r\n if (this.startFunctionBody.length) {\r\n var typeRef = this.module.getFunctionTypeBySignature(NativeType.None, []);\r\n if (!typeRef) typeRef = this.module.addFunctionType(\"v\", NativeType.None, []);\r\n var ref: FunctionRef;\r\n this.module.setStart(\r\n ref = this.module.addFunction(\r\n this.startFunction.prototype.internalName,\r\n typeRef,\r\n typesToNativeTypes(this.startFunction.additionalLocals),\r\n this.module.createBlock(null, this.startFunctionBody)\r\n )\r\n );\r\n this.startFunction.finalize(this.module, ref);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!this.options.noMemory) {\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, this.options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (this.options.isWasm64) {\r\n this.module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n this.module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n this.module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n this.module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n this.module.setMemory(\r\n i64_low(pages),\r\n Module.MAX_MEMORY_WASM32 /* TODO: not WASM64 compatible yet */,\r\n this.memorySegments,\r\n this.options.target,\r\n \"memory\"\r\n );\r\n }\r\n\r\n // import memory if requested\r\n if (this.options.importMemory) {\r\n this.module.addMemoryImport(\"memory\", \"env\", \"memory\");\r\n }\r\n\r\n // set up function table\r\n if (k = this.functionTable.length) {\r\n var entries = new Array(k);\r\n for (i = 0; i < k; ++i) {\r\n entries[i] = this.functionTable[i].ref;\r\n }\r\n this.module.setFunctionTable(entries);\r\n }\r\n\r\n return this.module;\r\n }\r\n\r\n // sources\r\n\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var sources = this.program.sources;\r\n\r\n var source: Source;\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (var i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n expected = normalizedPathWithoutExtension + \"/index.ts\";\r\n for (i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n expected = LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\";\r\n for (i = 0, k = sources.length; i < k; ++i) {\r\n source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n\r\n compileSource(source: Source): void {\r\n var files = this.files;\r\n if (files.has(source.normalizedPath)) return;\r\n files.add(source.normalizedPath);\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (var i = 0, k = statements.length; i < k; ++i) {\r\n var statement = statements[i];\r\n switch (statement.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\r\n !(statement).typeParameters.length\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n\r\n case NodeKind.IMPORT:\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n\r\n case NodeKind.NAMESPACEDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n\r\n case NodeKind.VARIABLE: // global, always compiled as initializers might have side effects\r\n var variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n\r\n case NodeKind.EXPORT:\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n\r\n // otherwise a top-level statement that is part of the start function's body\r\n default:\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = this.startFunction;\r\n var expr = this.compileStatement(statement);\r\n this.startFunctionBody.push(expr);\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.GLOBAL) {\r\n throw new Error(\"global expected\");\r\n }\r\n if (!this.compileGlobal(element)) { // reports\r\n return null;\r\n }\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(ElementFlags.COMPILED) || global.is(ElementFlags.BUILTIN)) {\r\n return true;\r\n }\r\n\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n if (global.type == Type.void) { // infer type\r\n if (declaration.type) {\r\n var resolvedType = this.program.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.type.range, \"*\", resolvedType.toString()\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n var nativeType = global.type.toNativeType();\r\n\r\n if (global.is(ElementFlags.DECLARED)) {\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n this.module.addGlobalImport(\r\n global.internalName,\r\n global.namespace\r\n ? global.namespace.simpleName\r\n : \"env\",\r\n global.simpleName,\r\n nativeType\r\n );\r\n global.set(ElementFlags.COMPILED);\r\n return true;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n var initializeInStart = false;\r\n\r\n if (global.is(ElementFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n } else {\r\n if (declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(declaration.initializer, global.type);\r\n }\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n } else {\r\n initExpr = global.type.toNativeZero(this.module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n if (initializeInStart) {\r\n this.module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(this.module));\r\n var setExpr = this.module.createSetGlobal(internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n } else {\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n var exprType = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n\r\n case NativeType.I32:\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(_BinaryenConstGetValueI32(initExpr), 0);\r\n break;\r\n\r\n case NativeType.I64:\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n _BinaryenConstGetValueI64Low(initExpr),\r\n _BinaryenConstGetValueI64High(initExpr)\r\n );\r\n break;\r\n\r\n case NativeType.F32:\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF32(initExpr);\r\n break;\r\n\r\n case NativeType.F64:\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF64(initExpr);\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n global.set(ElementFlags.INLINED);\r\n if (declaration.isTopLevel) { // might be re-exported\r\n this.module.addGlobal(internalName, nativeType, !global.is(ElementFlags.CONSTANT), initExpr);\r\n }\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addGlobalExport(global.internalName, declaration.programLevelInternalName);\r\n }\r\n } else {\r\n this.module.addGlobal(internalName, nativeType, !global.is(ElementFlags.CONSTANT), initExpr);\r\n }\r\n }\r\n global.set(ElementFlags.COMPILED);\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.ENUM) throw new Error(\"enum expected\");\r\n return this.compileEnum(element) ? element : null;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(ElementFlags.COMPILED)) return true;\r\n\r\n // members might reference each other, triggering another compile\r\n element.set(ElementFlags.COMPILED);\r\n\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n if (element.members) {\r\n for (var member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n var initInStart = false;\r\n var val = member;\r\n var valueDeclaration = val.declaration;\r\n val.set(ElementFlags.COMPILED);\r\n if (val.is(ElementFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n this.module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n this.module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n var initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(valueDeclaration.value, Type.i32);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n if (element.is(ElementFlags.CONSTANT)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = this.module.createI32(0);\r\n } else if (previousValue.is(ElementFlags.INLINED)) {\r\n initExpr = this.module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = this.module.createBinary(BinaryOp.AddI32,\r\n this.module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n this.module.createI32(1)\r\n );\r\n if (element.is(ElementFlags.CONSTANT)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n this.module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n this.module.createI32(0)\r\n );\r\n var setExpr = this.module.createSetGlobal(val.internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n } else {\r\n this.module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (_BinaryenExpressionGetType(initExpr) == NativeType.I32) {\r\n val.constantValue = _BinaryenConstGetValueI32(initExpr);\r\n val.set(ElementFlags.INLINED);\r\n } else {\r\n throw new Error(\"i32 expected\");\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.declaration.range.source.isEntry && element.declaration.isTopLevelExport) {\r\n if (member.is(ElementFlags.INLINED)) {\r\n this.module.addGlobalExport(member.internalName, member.internalName);\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n throw new Error(\"function expected\");\r\n }\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = prototype.resolveInclTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n return this.compileFunction(instance) ? instance : null;\r\n }\r\n\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(ElementFlags.COMPILED)) return true;\r\n\r\n assert(!instance.is(ElementFlags.BUILTIN) || instance.simpleName == \"abort\");\r\n\r\n var declaration = instance.prototype.declaration;\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n if (declaration.body) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n return false;\r\n }\r\n } else if (!declaration.body) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n return false;\r\n }\r\n\r\n // might trigger compilation of other functions referring to this one\r\n instance.set(ElementFlags.COMPILED);\r\n\r\n // compile statements\r\n var stmt: ExpressionRef = 0;\r\n if (!instance.is(ElementFlags.DECLARED)) {\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n var body = assert(declaration.body, \"implementation expected\");\r\n stmt = this.compileStatement(body);\r\n // make sure the top-level branch or all child branches return\r\n var allBranchesReturn = this.currentFunction.flow.finalize();\r\n if (instance.returnType != Type.void && !allBranchesReturn) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n assert(declaration.returnType, \"return type expected\").range\r\n );\r\n }\r\n this.currentFunction = previousFunction;\r\n }\r\n\r\n // create the function type\r\n var numParameters = instance.parameters ? instance.parameters.length : 0;\r\n var numParametersInclThis = instance.instanceMethodOf ? numParameters + 1 : numParameters;\r\n var paramIndex = 0;\r\n\r\n var nativeResultType = instance.returnType.toNativeType();\r\n var nativeParamTypes = new Array(numParametersInclThis);\r\n var signatureNameParts = new Array(numParametersInclThis + 1);\r\n\r\n if (instance.instanceMethodOf) {\r\n nativeParamTypes[paramIndex] = this.options.isWasm64 ? NativeType.I64 : NativeType.I32;\r\n signatureNameParts[paramIndex++] = instance.instanceMethodOf.type.toSignatureString();\r\n }\r\n if (instance.parameters) {\r\n for (var i = 0; i < numParameters; ++i) {\r\n nativeParamTypes[paramIndex] = instance.parameters[i].type.toNativeType();\r\n signatureNameParts[paramIndex++] = instance.parameters[i].type.toSignatureString();\r\n }\r\n }\r\n signatureNameParts[paramIndex] = instance.returnType.toSignatureString();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeResultType, nativeParamTypes);\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(\r\n signatureNameParts.join(\"\"),\r\n nativeResultType,\r\n nativeParamTypes\r\n );\r\n }\r\n\r\n // create the function\r\n var ref: FunctionRef;\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n ref = this.module.addFunctionImport(\r\n instance.internalName,\r\n instance.prototype.namespace\r\n ? instance.prototype.namespace.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n } else {\r\n ref = this.module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n assert(stmt)\r\n );\r\n }\r\n\r\n // check module export\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addFunctionExport(instance.internalName, declaration.name.text);\r\n }\r\n\r\n instance.finalize(this.module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n switch (member.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).typeParameters.length\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.INTERFACEDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).typeParameters.length\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.NAMESPACEDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n var variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n\r\n default:\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (var element of ns.members.values()) {\r\n switch (element.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(ElementFlags.EXPORTED)\r\n ) && !(element).is(ElementFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n\r\n case ElementKind.ENUM:\r\n this.compileEnum(element);\r\n break;\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (\r\n (\r\n noTreeShaking || (element).is(ElementFlags.EXPORTED)\r\n ) && !(element).is(ElementFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n\r\n case ElementKind.GLOBAL:\r\n this.compileGlobal(element);\r\n break;\r\n\r\n case ElementKind.NAMESPACE:\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var members = statement.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n var internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n var element = this.program.exports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n\r\n switch (element.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n if (!(element).is(ElementFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n\r\n case ElementKind.ENUM:\r\n this.compileEnum(element);\r\n break;\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (\r\n !(element).is(ElementFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n var functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null,\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n var functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n this.module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case ElementKind.GLOBAL:\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n var globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(ElementFlags.INLINED)) {\r\n this.module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case ElementKind.NAMESPACE:\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var element = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n throw new Error(\"class expected\");\r\n }\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = prototype.resolveInclTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(ElementFlags.COMPILED)) return true;\r\n instance.set(ElementFlags.COMPILED);\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Adds a function table entry and returns the assigned index. */\r\n addFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(ElementFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var index = this.functionTable.length;\r\n this.functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var expr: ExpressionRef;\r\n switch (statement.kind) {\r\n\r\n case NodeKind.BLOCK:\r\n expr = this.compileBlockStatement(statement);\r\n break;\r\n\r\n case NodeKind.BREAK:\r\n expr = this.compileBreakStatement(statement);\r\n break;\r\n\r\n case NodeKind.CONTINUE:\r\n expr = this.compileContinueStatement(statement);\r\n break;\r\n\r\n case NodeKind.DO:\r\n expr = this.compileDoStatement(statement);\r\n break;\r\n\r\n case NodeKind.EMPTY:\r\n expr = this.compileEmptyStatement(statement);\r\n break;\r\n\r\n case NodeKind.EXPRESSION:\r\n expr = this.compileExpressionStatement(statement);\r\n break;\r\n\r\n case NodeKind.FOR:\r\n expr = this.compileForStatement(statement);\r\n break;\r\n\r\n case NodeKind.IF:\r\n expr = this.compileIfStatement(statement);\r\n break;\r\n\r\n case NodeKind.RETURN:\r\n expr = this.compileReturnStatement(statement);\r\n break;\r\n\r\n case NodeKind.SWITCH:\r\n expr = this.compileSwitchStatement(statement);\r\n break;\r\n\r\n case NodeKind.THROW:\r\n expr = this.compileThrowStatement(statement);\r\n break;\r\n\r\n case NodeKind.TRY:\r\n expr = this.compileTryStatement(statement);\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n var variableInit = this.compileVariableStatement(statement);\r\n expr = variableInit ? variableInit : this.module.createNop();\r\n break;\r\n\r\n case NodeKind.WHILE:\r\n expr = this.compileWhileStatement(statement);\r\n break;\r\n\r\n case NodeKind.TYPEDECLARATION:\r\n if (this.currentFunction == this.startFunction) {\r\n return this.module.createNop();\r\n }\r\n // fall-through: must be top-level; function bodies are not guaranteed to be evaluated\r\n\r\n default:\r\n throw new Error(\"statement expected\");\r\n }\r\n\r\n this.addDebugLocation(expr, statement.range);\r\n return expr;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var k = statements.length;\r\n var stmts = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n stmts[i] = this.compileStatement(statements[i]);\r\n }\r\n return stmts; // array of 0-es in noEmit-mode\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // NOTE that we could optimize this to a NOP if empty or unwrap a single\r\n // statement, but that's not what the source told us to do and left to the\r\n // optimizer.\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n\r\n var stmt = this.module.createBlock(null, this.compileStatements(statements), NativeType.None);\r\n var stmtReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n if (stmtReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n }\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var breakLabel = this.currentFunction.flow.breakLabel;\r\n if (breakLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_BREAKS);\r\n return this.module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var continueLabel = this.currentFunction.flow.continueLabel;\r\n if (continueLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_CONTINUES);\r\n return this.module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n\r\n // A do statement does not initiate a new branch because it is executed at\r\n // least once, but has its own break and continue labels.\r\n var label = this.currentFunction.enterBreakContext();\r\n var previousBreakLabel = this.currentFunction.flow.breakLabel;\r\n var previousContinueLabel = this.currentFunction.flow.continueLabel;\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n\r\n // Reset to the previous break and continue labels, if any.\r\n this.currentFunction.flow.breakLabel = previousBreakLabel;\r\n this.currentFunction.flow.continueLabel = previousContinueLabel;\r\n\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n this.currentFunction.leaveBreakContext();\r\n\r\n return this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel,\r\n this.module.createBlock(null, [\r\n body,\r\n this.module.createBreak(continueLabel, condition)\r\n ], NativeType.None))\r\n ], NativeType.None);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var context = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + context;\r\n\r\n // Compile in correct order\r\n var initializer = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : this.module.createNop();\r\n var condition = statement.condition\r\n ? this.compileExpression(statement.condition, Type.i32)\r\n : this.module.createI32(1);\r\n var incrementor = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void)\r\n : this.module.createNop();\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = !statement.condition && this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n // TODO: check other always-true conditions as well, not just omitted\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n\r\n var expr = this.module.createBlock(breakLabel, [\r\n initializer,\r\n this.module.createLoop(continueLabel, this.module.createBlock(null, [\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n incrementor,\r\n this.module.createBreak(continueLabel)\r\n ], NativeType.None))\r\n ], NativeType.None))\r\n ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n expr = this.module.createBlock(null, [\r\n expr,\r\n this.module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Each arm initiates a branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var ifTrue = this.compileStatement(statement.ifTrue);\r\n var ifTrueReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n\r\n var ifFalse: ExpressionRef = 0;\r\n var ifFalseReturns = false;\r\n if (statement.ifFalse) {\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n ifFalse = this.compileStatement(statement.ifFalse);\r\n ifFalseReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n }\r\n if (ifTrueReturns && ifFalseReturns) { // not necessary to append a hint\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n }\r\n return this.module.createIf(condition, ifTrue, ifFalse);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var expression: ExpressionRef = 0;\r\n if (statement.value) {\r\n expression = this.compileExpression(statement.value, this.currentFunction.returnType);\r\n }\r\n\r\n // Remember that this flow returns\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n\r\n return this.module.createReturn(expression);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n\r\n // Everything within a switch uses the same break context\r\n var context = this.currentFunction.enterBreakContext();\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = this.currentFunction.getTempLocal(Type.u32);\r\n var k = statement.cases.length;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + k);\r\n breaks[0] = this.module.createSetLocal( // initializer\r\n tempLocal.index,\r\n this.compileExpression(statement.condition, Type.u32)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (var i = 0; i < k; ++i) {\r\n var case_ = statement.cases[i];\r\n if (case_.label) {\r\n breaks[breakIndex++] = this.module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n this.module.createBinary(BinaryOp.EqI32,\r\n this.module.createGetLocal(tempLocal.index, NativeType.I32),\r\n this.compileExpression(case_.label, Type.i32)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = this.module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = this.module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n for (i = 0; i < k; ++i) {\r\n case_ = statement.cases[i];\r\n var l = case_.statements.length;\r\n var body = new Array(1 + l);\r\n body[0] = currentBlock;\r\n\r\n // Each switch case initiates a new branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n\r\n var fallsThrough = i != k - 1;\r\n var nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (var j = 0; j < l; ++j) {\r\n body[j + 1] = this.compileStatement(case_.statements[j]);\r\n }\r\n if (!(fallsThrough || this.currentFunction.flow.is(FlowFlags.RETURNS))) {\r\n alwaysReturns = false; // ignore fall-throughs\r\n }\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n\r\n currentBlock = this.module.createBlock(nextLabel, body, NativeType.None);\r\n }\r\n this.currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0 && alwaysReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n // Binaryen understands that so we don't need a hint\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n\r\n // Remember that this branch possibly throws\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n throw new Error(\"not implemented\");\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var declarations = statement.declarations;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n this.currentFunction == this.startFunction &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (var i = 0, k = declarations.length; i < k; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n for (i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var name = declaration.name.text;\r\n var type: Type | null = null;\r\n var init: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = this.program.resolveType( // reports\r\n declaration.type,\r\n this.currentFunction.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n init = this.compileExpression(declaration.initializer, type); // reports\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n init = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n if (hasModifier(ModifierKind.CONST, declaration.modifiers)) {\r\n if (init) {\r\n init = this.precomputeExpressionRef(init);\r\n if (_BinaryenExpressionGetId(init) == ExpressionId.Const) {\r\n var local = new Local(this.program, name, -1, type);\r\n switch (_BinaryenExpressionGetType(init)) {\r\n case NativeType.I32:\r\n local = local.withConstantIntegerValue(_BinaryenConstGetValueI32(init), 0);\r\n break;\r\n case NativeType.I64:\r\n local = local.withConstantIntegerValue(\r\n _BinaryenConstGetValueI64Low(init),\r\n _BinaryenConstGetValueI64High(init)\r\n );\r\n break;\r\n case NativeType.F32:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n case NativeType.F64:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n var scopedLocals = this.currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) scopedLocals = this.currentFunction.flow.scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return 0;\r\n }\r\n scopedLocals.set(name, local);\r\n return 0;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (hasModifier(ModifierKind.LET, declaration.modifiers)) { // here: not top-level\r\n this.currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports\r\n } else {\r\n this.currentFunction.addLocal(type, name); // reports\r\n }\r\n if (init) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, init));\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n\r\n // The condition does not yet initialize a branch\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Statements initiate a new branch with its own break context\r\n var label = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = false && this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate possible always-true conditions\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n\r\n var expr = this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel,\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n this.module.createBreak(continueLabel)\r\n ], NativeType.None))\r\n )\r\n ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n expr = this.module.createBlock(null, [\r\n expr,\r\n this.module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(ElementFlags.INLINED));\r\n\r\n switch (\r\n !retainType &&\r\n element.type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n element.type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = element.type).kind\r\n ) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n var shift = element.type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n );\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n var mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n );\r\n\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n\r\n case TypeKind.F32:\r\n return this.module.createF32((element).constantFloatValue);\r\n\r\n case TypeKind.F64:\r\n return this.module.createF64((element).constantFloatValue);\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n\r\n case NodeKind.ASSERTION:\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.BINARY:\r\n expr = this.compileBinaryExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n\r\n case NodeKind.CALL:\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.COMMA:\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.ELEMENTACCESS:\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.FUNCTION:\r\n case NodeKind.FUNCTIONARROW:\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.TRUE:\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n\r\n case NodeKind.LITERAL:\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.NEW:\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.PARENTHESIZED:\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.PROPERTYACCESS:\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n\r\n case NodeKind.TERNARY:\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.UNARYPOSTFIX:\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.UNARYPREFIX:\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n\r\n default:\r\n throw new Error(\"expression expected\");\r\n }\r\n\r\n if (conversionKind != ConversionKind.NONE && this.currentType != contextualType) {\r\n expr = this.convertExpression(expr, this.currentType, contextualType, conversionKind, expression);\r\n this.currentType = contextualType;\r\n }\r\n\r\n this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(expression: Expression, contextualType: Type, wrapSmallIntegers: bool = true) {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapSmallIntegers\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(this.compileExpression(expression, contextualType, conversionKind));\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var nativeType = this.currentType.toNativeType();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeType, []);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(this.currentType.toSignatureString(), nativeType, []);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = this.module.addFunction(\"__precompute\", typeRef, [], expr);\r\n this.module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = _BinaryenFunctionGetBody(funcRef);\r\n this.module.removeFunction(\"__precompute\");\r\n if (typeRefAdded) {\r\n // TODO: also remove the function type somehow if no longer used or make the C-API accept\r\n // a `null` typeRef, using an implicit type.\r\n }\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n if (conversionKind == ConversionKind.NONE) {\r\n assert(false, \"concrete type expected\");\r\n return expr;\r\n }\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) {\r\n return this.module.createDrop(expr);\r\n }\r\n\r\n if (conversionKind == ConversionKind.IMPLICIT && !fromType.isAssignableTo(toType)) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = this.module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = this.module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = this.module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = this.module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = this.module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n\r\n // i32 to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr);\r\n\r\n // i32 or smaller to even smaller or same size int with change of sign\r\n } else if (\r\n toType.is(TypeFlags.SMALL) &&\r\n (\r\n fromType.size > toType.size ||\r\n (\r\n fromType.size == toType.size &&\r\n fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED)\r\n )\r\n )\r\n ) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n\r\n // otherwise (smaller) i32/u32 to (same size) i32/u32\r\n }\r\n\r\n this.currentType = toType;\r\n return expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.program.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT);\r\n }\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n\r\n var left: ExpressionRef;\r\n var leftType: Type;\r\n var right: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var condition: ExpressionRef;\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n var possiblyOverflows = false;\r\n var tempLocal: Local | null = null;\r\n\r\n switch (expression.operator) {\r\n\r\n case Token.LESSTHAN:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.LtI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.LtI64, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.LtU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.LtU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.LtF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.LtF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.GREATERTHAN:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.GtI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.GtI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.GtU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.GtU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.GtF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.GtF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.LESSTHAN_EQUALS:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.LeI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.LeI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.LeU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.LeU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.LeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.LeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.GREATERTHAN_EQUALS:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.GeI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.GeI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.GeU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.GeU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.GeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.GeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n // TODO?\r\n case Token.EQUALS_EQUALS:\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.EqI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.EqI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.EqF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.EqF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n // TODO?\r\n case Token.EXCLAMATION_EQUALS:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.NeI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.NeI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.NeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.NeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.EQUALS:\r\n return this.compileAssignment(expression.left, expression.right, contextualType);\r\n\r\n case Token.PLUS_EQUALS:\r\n compound = true;\r\n case Token.PLUS:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.AddI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AddI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.AddF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.AddF64, left, right);\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.MINUS_EQUALS:\r\n compound = true;\r\n case Token.MINUS:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.SubI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.SubF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.SubF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.ASTERISK_EQUALS:\r\n compound = true;\r\n case Token.ASTERISK:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n // fall-through\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.MulI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.MulI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.MulF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.MulF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.SLASH_EQUALS:\r\n compound = true;\r\n case Token.SLASH:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // TODO: when can division remain unwrapped? does it overflow?\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n possiblyOverflows = true;\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.DivI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.DivI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.DivU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.DivU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.DivF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.DivF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.PERCENT_EQUALS:\r\n compound = true;\r\n case Token.PERCENT:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // TODO: when can remainder remain unwrapped? does it overflow?\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.RemI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.RemI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n expr = this.module.createBinary(BinaryOp.RemU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.RemU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n // TODO: internal fmod, possibly simply imported from JS\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n compound = true;\r\n case Token.LESSTHAN_LESSTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n default:\r\n expr = this.module.createBinary(BinaryOp.ShlI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShlI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // must wrap small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n default:\r\n // assumes signed shr on signed small integers does not overflow\r\n expr = this.module.createBinary(BinaryOp.ShrI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.ShrI64, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n // assumes unsigned shr on unsigned small integers does not overflow\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.ShrU32, left, right);\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShrU64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // modifies low bits of small integers if unsigned\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n possiblyOverflows = true;\r\n // fall-through\r\n default:\r\n // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = this.module.createBinary(BinaryOp.ShrU32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShrU64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.AMPERSAND_EQUALS:\r\n compound = true;\r\n case Token.AMPERSAND:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.AndI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AndI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.BAR_EQUALS:\r\n compound = true;\r\n case Token.BAR:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.OrI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.OrI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.CARET_EQUALS:\r\n compound = true;\r\n case Token.CARET:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.XorI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.XorI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: // left && right\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(left, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER);\r\n condition = makeIsTrueish(left, this.currentType, this.module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(\r\n condition, // left\r\n right, // ? right\r\n expr // : cloned left\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = this.module.createIf(\r\n condition,\r\n right,\r\n this.module.createGetLocal(\r\n assert(tempLocal, \"tempLocal must be set\").index,\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n\r\n case Token.BAR_BAR: // left || right\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(left, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if right did\r\n condition = makeIsTrueish(left, this.currentType, this.module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(\r\n condition, // left\r\n expr, // ? cloned left\r\n right // : right\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = this.module.createIf(\r\n condition,\r\n this.module.createGetLocal(\r\n assert(tempLocal, \"tempLocal must be set\").index,\r\n this.currentType.toNativeType()\r\n ),\r\n right\r\n );\r\n }\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"not implemented\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER), \"small integer type expected\");\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var element = resolved.element;\r\n var elementType: Type;\r\n switch (element.kind) {\r\n\r\n case ElementKind.GLOBAL:\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n // fall-through\r\n\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n elementType = (element).type;\r\n break;\r\n\r\n case ElementKind.PROPERTY:\r\n var setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return this.module.createUnreachable();\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n elementType = (setterInstance.parameters)[0].type;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n assert(\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS &&\r\n element.simpleName == (resolved.target).prototype.fnIndexedGet\r\n );\r\n var resolvedIndexedSet = (element).resolve(null);\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.returnType;\r\n break;\r\n }\r\n }\r\n // fall-through\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // now compile the value and do the assignment\r\n this.currentType = elementType;\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n this.compileExpression(valueExpression, elementType),\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var tempLocal: Local;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n case ElementKind.LOCAL:\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(ElementFlags.CONSTANT)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return tee\r\n ? this.module.createTeeLocal((element).index, valueWithCorrectType)\r\n : this.module.createSetLocal((element).index, valueWithCorrectType);\r\n\r\n case ElementKind.GLOBAL:\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(ElementFlags.CONSTANT)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n if (!tee) {\r\n return this.module.createSetGlobal((element).internalName, valueWithCorrectType);\r\n }\r\n var globalNativeType = (element).type.toNativeType();\r\n return this.module.createBlock(null, [ // emulated teeGlobal\r\n this.module.createSetGlobal((element).internalName, valueWithCorrectType),\r\n this.module.createGetGlobal((element).internalName, globalNativeType)\r\n ], globalNativeType);\r\n\r\n case ElementKind.FIELD:\r\n if ((element).prototype.isReadonly) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n assert(resolved.targetExpression != null, \"target expression expected\");\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType, \"class type expected\");\r\n this.currentType = tee ? (element).type : Type.void;\r\n var elementNativeType = (element).type.toNativeType();\r\n if (!tee) {\r\n return this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n valueWithCorrectType,\r\n elementNativeType,\r\n (element).memoryOffset\r\n );\r\n }\r\n tempLocal = this.currentFunction.getAndFreeTempLocal((element).type);\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal(tempLocal.index, valueWithCorrectType),\r\n this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n this.module.createGetLocal(tempLocal.index, elementNativeType),\r\n elementNativeType,\r\n (element).memoryOffset\r\n ),\r\n this.module.createGetLocal(tempLocal.index, elementNativeType)\r\n ], elementNativeType);\r\n\r\n case ElementKind.PROPERTY:\r\n var setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (setterInstance) {\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n if (!tee) {\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n this.currentType = Type.void;\r\n return this.makeCall(setterInstance, [ targetExpr, valueWithCorrectType ]);\r\n } else {\r\n this.currentType = Type.void;\r\n return this.makeCall(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n var getterPrototype = (element).getterPrototype;\r\n assert(getterPrototype != null);\r\n var getterInstance = (getterPrototype).resolve(); // reports\r\n if (getterInstance) {\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(getterInstance.returnType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [\r\n this.module.createTeeLocal(tempLocal.index, targetExpr), valueWithCorrectType\r\n ]),\r\n this.makeCall(getterInstance, [\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ])\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n } else {\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCall(getterInstance)\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n }\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n assert(resolved.target && resolved.target.kind == ElementKind.CLASS);\r\n var resolvedIndexedGet = (element).resolve();\r\n if (!resolvedIndexedGet) return this.module.createUnreachable();\r\n var indexedSetName = (resolved.target).prototype.fnIndexedSet;\r\n var indexedSet: Element | null;\r\n if (\r\n indexedSetName != null &&\r\n (resolved.target).members &&\r\n (indexedSet = (>(resolved.target).members).get(indexedSetName)) &&\r\n indexedSet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) { // @operator(\"[]=\")\r\n var resolvedIndexedSet = (indexedSet).resolve();\r\n if (!resolvedIndexedSet) return this.module.createUnreachable();\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n var elementExpr = this.compileExpression(\r\n (expression).elementExpression,\r\n Type.i32\r\n );\r\n if (!tee) {\r\n this.currentType = resolvedIndexedSet.returnType;\r\n return this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n this.currentType = resolvedIndexedGet.returnType;\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n this.module.createTeeLocal(tempLocal.index, valueWithCorrectType)\r\n ]),\r\n // TODO: could be different from an actual __get (needs 2 temp locals)\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ], this.currentType.toNativeType());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (resolved.target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // fall-through\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression.expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n if (element.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, element.internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var functionPrototype = element;\r\n var functionInstance: Function | null = null;\r\n\r\n // TODO: generalize?\r\n if (functionPrototype.is(ElementFlags.BUILTIN)) {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (expression.typeArguments) {\r\n var k = expression.typeArguments.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var resolvedType = this.program.resolveType( // reports\r\n expression.typeArguments[i],\r\n this.currentFunction.contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return this.module.createUnreachable();\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n var expr = compileBuiltinCall(\r\n this,\r\n functionPrototype,\r\n resolvedTypeArguments,\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n\r\n // TODO: infer type arguments from parameter types if omitted\r\n functionInstance = functionPrototype.resolveInclTypeArguments( // reports\r\n expression.typeArguments,\r\n this.currentFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (!functionInstance) return this.module.createUnreachable();\r\n\r\n // TODO: generalize? (see above)\r\n /* if (functionInstance.is(ElementFlags.BUILTIN)) {\r\n var expr = compileBuiltinCall(\r\n this,\r\n functionPrototype,\r\n functionInstance.typeArguments,\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(DiagnosticCode.Operation_not_supported, expression.range);\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n } */\r\n\r\n var numArguments = expression.arguments.length;\r\n var numArgumentsInclThis = functionInstance.instanceMethodOf\r\n ? numArguments + 1\r\n : numArguments;\r\n var argumentIndex = 0;\r\n\r\n var args = new Array(numArgumentsInclThis);\r\n if (functionInstance.instanceMethodOf) {\r\n assert(resolved.targetExpression != null);\r\n args[argumentIndex++] = resolved.targetExpression;\r\n }\r\n for (i = 0; i < numArguments; ++i) {\r\n args[argumentIndex++] = expression.arguments[i];\r\n }\r\n return this.compileCall(functionInstance, args, expression);\r\n }\r\n\r\n /**\r\n * Compiles a call to a function. If an instance method, `this` is the first element in\r\n * `argumentExpressions` or can be specified explicitly as the last argument.\r\n */\r\n compileCall(\r\n functionInstance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n\r\n // validate and compile arguments\r\n var parameters = functionInstance.parameters;\r\n\r\n var numParameters = parameters ? parameters.length : 0;\r\n var numParametersInclThis = functionInstance.instanceMethodOf != null\r\n ? numParameters + 1\r\n : numParameters;\r\n var numArgumentsInclThis = argumentExpressions.length;\r\n var numArguments = functionInstance.instanceMethodOf != null\r\n ? numArgumentsInclThis - 1\r\n : numArgumentsInclThis;\r\n if (thisArg) numArgumentsInclThis++;\r\n\r\n if (numArgumentsInclThis > numParametersInclThis) { // too many arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, numParameters.toString(10), numArguments.toString(10)\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var operands = new Array(numParametersInclThis);\r\n var operandIndex = 0;\r\n var argumentIndex = 0;\r\n if (functionInstance.instanceMethodOf) {\r\n if (thisArg) {\r\n operands[operandIndex++] = thisArg;\r\n } else {\r\n operands[operandIndex++] = this.compileExpression(\r\n argumentExpressions[argumentIndex++],\r\n functionInstance.instanceMethodOf.type\r\n );\r\n }\r\n }\r\n if (parameters) {\r\n for (; operandIndex < numParametersInclThis; ++operandIndex) {\r\n\r\n // argument has been provided\r\n if (numArgumentsInclThis > operandIndex) {\r\n operands[operandIndex] = this.compileExpression(\r\n argumentExpressions[argumentIndex++],\r\n parameters[operandIndex + numParameters - numParametersInclThis].type\r\n );\r\n\r\n // argument has been omitted\r\n } else {\r\n var initializer = parameters[operandIndex + numParameters - numParametersInclThis].initializer;\r\n if (initializer) { // fall back to provided initializer\r\n operands[operandIndex] = this.compileExpression(\r\n initializer,\r\n parameters[operandIndex + numParameters - numParametersInclThis].type\r\n );\r\n // FIXME: here, the initializer is compiled in the caller's scope.\r\n // a solution could be to use a stub for each possible overload, calling the\r\n // full function with optional arguments being part of the stub's body.\r\n\r\n } else { // too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range,\r\n (operandIndex + numParameters - numParametersInclThis).toString(10),\r\n numArguments.toString(10)\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = functionInstance.returnType;\r\n return this.makeCall(functionInstance, operands);\r\n }\r\n\r\n /** Makes a call operation as is. */\r\n makeCall(functionInstance: Function, operands: ExpressionRef[] | null = null): ExpressionRef {\r\n if (!(functionInstance.is(ElementFlags.COMPILED) || this.compileFunction(functionInstance))) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // imported function\r\n if (functionInstance.is(ElementFlags.DECLARED)) {\r\n return this.module.createCallImport(\r\n functionInstance.internalName,\r\n operands,\r\n functionInstance.returnType.toNativeType()\r\n );\r\n }\r\n\r\n // internal function\r\n return this.module.createCall(\r\n functionInstance.internalName,\r\n operands,\r\n functionInstance.returnType.toNativeType()\r\n );\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var k = expressions.length;\r\n var exprs = new Array(k--);\r\n for (var i = 0; i < k; ++i) {\r\n exprs[i] = this.compileExpression(expressions[i], Type.void); // drop all\r\n }\r\n exprs[i] = this.compileExpression(expressions[i], contextualType); // except last\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n assert(\r\n resolved.element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS\r\n );\r\n var instance = (resolved.element).resolve(\r\n null,\r\n (resolved.target).contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.compileCall(instance, [\r\n expression.expression,\r\n expression.elementExpression\r\n ], expression);\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var simpleName = (declaration.name.text.length\r\n ? declaration.name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n this.currentFunction.internalName + \"~\" + simpleName,\r\n declaration\r\n );\r\n var instance = this.compileFunctionUsingTypeArguments(prototype, [], null, declaration);\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = Type.u32.asFunction(instance);\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.addFunctionTableEntry(instance);\r\n if (index < 0) return this.module.createUnreachable();\r\n return this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n // check special keywords first\r\n switch (expression.kind) {\r\n\r\n case NodeKind.NULL:\r\n if (this.options.isWasm64) {\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == TypeKind.USIZE);\r\n this.currentType = Type.usize64;\r\n }\r\n return this.module.createI64(0);\r\n }\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == TypeKind.USIZE);\r\n this.currentType = Type.usize32;\r\n }\r\n return this.module.createI32(0);\r\n\r\n case NodeKind.TRUE:\r\n this.currentType = Type.bool;\r\n return this.module.createI32(1);\r\n\r\n case NodeKind.FALSE:\r\n this.currentType = Type.bool;\r\n return this.module.createI32(0);\r\n\r\n case NodeKind.THIS:\r\n if (this.currentFunction.instanceMethodOf) {\r\n this.currentType = this.currentFunction.instanceMethodOf.type;\r\n return this.module.createGetLocal(0, this.currentType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.isWasm64 ? Type.usize64 : Type.usize32;\r\n return this.module.createUnreachable();\r\n\r\n case NodeKind.SUPER:\r\n if (this.currentFunction.instanceMethodOf && this.currentFunction.instanceMethodOf.base) {\r\n this.currentType = this.currentFunction.instanceMethodOf.base.type;\r\n return this.module.createGetLocal(0, this.currentType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.isWasm64 ? Type.usize64 : Type.usize32;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // otherwise resolve\r\n var resolved = this.program.resolveIdentifier( // reports\r\n expression,\r\n this.currentFunction,\r\n this.currentEnum\r\n );\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n\r\n case ElementKind.LOCAL:\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n assert((element).index >= 0);\r\n this.currentType = (element).type;\r\n return this.module.createGetLocal((element).index, this.currentType.toNativeType());\r\n\r\n case ElementKind.GLOBAL:\r\n if (element.is(ElementFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, element, expression);\r\n }\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = (element).type;\r\n return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType());\r\n\r\n case ElementKind.ENUMVALUE: // here: if referenced from within the same enum\r\n if (!element.is(ElementFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.module.createI32((element).constantValue);\r\n }\r\n return this.module.createGetGlobal((element).internalName, NativeType.I32);\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n switch (expression.literalKind) {\r\n\r\n case LiteralKind.ARRAY:\r\n assert(!implicitNegate);\r\n var classType = contextualType.classType;\r\n if (\r\n classType &&\r\n classType == this.program.elements.get(\"Array\") &&\r\n classType.typeArguments && classType.typeArguments.length == 1\r\n ) {\r\n return this.compileStaticArray(\r\n classType.typeArguments[0],\r\n (expression).elementExpressions\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n\r\n case LiteralKind.FLOAT: {\r\n var floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return this.module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return this.module.createF64(floatValue);\r\n }\r\n\r\n case LiteralKind.INTEGER:\r\n var intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8:\r\n if (i64_is_i8(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.I16:\r\n if (i64_is_i16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.I32:\r\n if (i64_is_i32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U8:\r\n if (i64_is_u8(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U16:\r\n if (i64_is_u16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U32:\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n if (i64_is_bool(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.USIZE:\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.F32:\r\n if (i64_is_f32(intValue)) {\r\n return this.module.createF32(i64_to_f32(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.F64:\r\n if (i64_is_f64(intValue)) {\r\n return this.module.createF64(i64_to_f64(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.VOID:\r\n break;\r\n\r\n default:\r\n assert(false);\r\n break;\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return this.module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n\r\n case LiteralKind.STRING:\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n\r\n // case LiteralKind.OBJECT:\r\n // case LiteralKind.REGEXP:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var stringSegment: MemorySegment | null = this.stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n var stringLength = stringValue.length;\r\n var stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (var i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, this.options.usizeType.byteSize);\r\n this.stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.types.get(\"string\");\r\n this.currentType = stringType ? stringType : this.options.usizeType;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileStaticArray(elementType: Type, expressions: (Expression | null)[]): ExpressionRef {\r\n // compile as static if all element expressions are precomputable, otherwise\r\n // initialize in place.\r\n var isStatic = true;\r\n var size = expressions.length;\r\n\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n switch (nativeType) {\r\n\r\n case NativeType.I32:\r\n values = changetype(new Int32Array(size));\r\n break;\r\n\r\n case NativeType.I64:\r\n values = changetype(new Array(size));\r\n break;\r\n\r\n case NativeType.F32:\r\n values = changetype(new Float32Array(size));\r\n break;\r\n\r\n case NativeType.F64:\r\n values = changetype(new Float64Array(size));\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n\r\n var exprs = new Array(size);\r\n var expr: BinaryenExpressionRef;\r\n for (var i = 0; i < size; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType)\r\n : elementType.toNativeZero(this.module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (_BinaryenExpressionGetId(expr) == ExpressionId.Const) {\r\n assert(_BinaryenExpressionGetType(expr) == nativeType);\r\n switch (nativeType) {\r\n\r\n case NativeType.I32:\r\n changetype(values)[i] = _BinaryenConstGetValueI32(expr);\r\n break;\r\n\r\n case NativeType.I64:\r\n changetype(values)[i] = i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n break;\r\n\r\n case NativeType.F32:\r\n changetype(values)[i] = _BinaryenConstGetValueF32(expr);\r\n break;\r\n\r\n case NativeType.F64:\r\n changetype(values)[i] = _BinaryenConstGetValueF64(expr);\r\n break;\r\n\r\n default:\r\n assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n if (isStatic) {\r\n // TODO: convert to Uint8Array and create the segment\r\n } else {\r\n // TODO: initialize in place\r\n }\r\n // TODO: alternatively, static elements could go into data segments while\r\n // dynamic ones are initialized on top? any benefits? (doesn't seem so)\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression( // reports\r\n expression.expression,\r\n this.currentFunction\r\n );\r\n if (resolved) {\r\n if (resolved.element.kind == ElementKind.CLASS_PROTOTYPE) {\r\n var prototype = resolved.element;\r\n var instance = prototype.resolveInclTypeArguments( // reports\r\n expression.typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance) {\r\n var thisExpr = compileBuiltinAllocate(this, instance, expression);\r\n var initializers = new Array();\r\n\r\n // use a temp local for 'this'\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n initializers.push(this.module.createSetLocal(tempLocal.index, thisExpr));\r\n\r\n // apply field initializers\r\n if (instance.members) {\r\n for (var member of instance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n var field = member;\r\n var fieldDeclaration = field.prototype.declaration;\r\n if (field.is(ElementFlags.CONSTANT)) {\r\n assert(false); // there are no built-in fields currently\r\n } else if (fieldDeclaration && fieldDeclaration.initializer) {\r\n initializers.push(this.module.createStore(field.type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(fieldDeclaration.initializer, field.type),\r\n field.type.toNativeType(),\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // apply constructor\r\n var constructorInstance = instance.constructorInstance;\r\n if (constructorInstance) {\r\n initializers.push(this.compileCall(constructorInstance, expression.arguments, expression,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType)\r\n ));\r\n }\r\n\r\n // return 'this'\r\n initializers.push(this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType));\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n thisExpr = this.module.createBlock(null, initializers, this.options.nativeSizeType);\r\n\r\n this.currentType = instance.type;\r\n return thisExpr;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n }\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileParenthesizedExpression(expression: ParenthesizedExpression, contextualType: Type): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(expression.expression, contextualType, ConversionKind.NONE);\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var resolved = this.program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n case ElementKind.GLOBAL: // static property\r\n if (element.is(ElementFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, element, propertyAccess);\r\n }\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = (element).type;\r\n return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType());\r\n\r\n case ElementKind.ENUMVALUE: // enum value\r\n if (!this.compileEnum((element).enum)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.module.createI32((element).constantValue);\r\n }\r\n return this.module.createGetGlobal((element).internalName, NativeType.I32);\r\n\r\n case ElementKind.FIELD: // instance field\r\n assert(resolved.target != null);\r\n assert(resolved.targetExpression != null);\r\n assert((element).memoryOffset >= 0);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = (element).type;\r\n return this.module.createLoad(\r\n (element).type.size >> 3,\r\n (element).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n targetExpr,\r\n (element).type.toNativeType(),\r\n (element).memoryOffset\r\n );\r\n\r\n case ElementKind.PROPERTY: // instance property (here: getter)\r\n var getter = (element).getterPrototype;\r\n assert(getter != null);\r\n var getterInstance = (getter).resolve(null); // reports\r\n if (!getterInstance) return this.module.createUnreachable();\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n this.currentType = getterInstance.returnType;\r\n if (getterInstance.is(ElementFlags.INSTANCE)) {\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = getterInstance.returnType;\r\n return this.makeCall(getterInstance, [ targetExpr ]);\r\n } else {\r\n return this.makeCall(getterInstance);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var condition = makeIsTrueish(\r\n this.compileExpression(expression.condition, Type.u32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n var ifThen = this.compileExpression(expression.ifThen, contextualType);\r\n var ifElse = this.compileExpression(expression.ifElse, contextualType);\r\n return this.module.createIf(condition, ifThen, ifElse);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n var possiblyOverflows = false;\r\n\r\n switch (expression.operator) {\r\n\r\n case Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n default:\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n op = this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = this.options.isWasm64\r\n ? NativeType.I64\r\n : NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.module);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = this.module.createI64(1);\r\n break;\r\n\r\n case TypeKind.F32:\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = this.module.createF32(1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = this.module.createF64(1);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n default:\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n op = this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = this.options.isWasm64\r\n ? NativeType.I64\r\n : NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.module);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = this.module.createI64(1);\r\n break;\r\n\r\n case TypeKind.F32:\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = this.module.createF32(1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = this.module.createF64(1);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"unary postfix operator expected\");\r\n }\r\n\r\n var setValue: ExpressionRef;\r\n var tempLocal: Local | null = null;\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n setValue = this.module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n );\r\n\r\n // otherwise use a temp local for the intermediate value\r\n } else {\r\n tempLocal = this.currentFunction.getTempLocal(this.currentType);\r\n setValue = this.module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n );\r\n }\r\n\r\n if (possiblyOverflows) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n setValue = makeSmallIntegerWrap(setValue, this.currentType, this.module);\r\n }\r\n\r\n setValue = this.compileAssignmentWithValue(expression.operand, setValue, false);\r\n // ^ sets currentType = void\r\n if (contextualType == Type.void) {\r\n assert(!tempLocal);\r\n return setValue;\r\n }\r\n\r\n this.currentType = assert(tempLocal).type;\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal((tempLocal).index, getValue),\r\n setValue,\r\n this.module.createGetLocal((tempLocal).index, nativeType)\r\n ], nativeType);\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n var possiblyOverflows = false;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n\r\n case Token.PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did\r\n break;\r\n\r\n case Token.MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n this.addDebugLocation(expr, expression.range); // compileExpression normally does this\r\n } else {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.SubI32, this.module.createI32(0), expr);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(this.module),\r\n expr\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, this.module.createI64(0), expr);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n }\r\n break;\r\n\r\n case Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AddI64, expr, this.module.createI64(1));\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.AddF32, expr, this.module.createF32(1));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.AddF64, expr, this.module.createF64(1));\r\n break;\r\n }\r\n break;\r\n\r\n case Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // or if operand already did\r\n // fall-through\r\n default:\r\n expr = this.module.createBinary(BinaryOp.SubI32, expr, this.module.createI32(1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, expr, this.module.createI64(1));\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.SubF32, expr, this.module.createF32(1));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.SubF64, expr, this.module.createF64(1));\r\n break;\r\n }\r\n break;\r\n\r\n case Token.EXCLAMATION:\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n true // must wrap small integers\r\n );\r\n expr = makeIsFalseish(expr, this.currentType, this.module);\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.TILDE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n contextualType == Type.void\r\n ? ConversionKind.NONE\r\n : ConversionKind.IMPLICIT,\r\n false // retains low bits of small integers\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.XorI32, expr, this.module.createI32(-1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.XorI64, expr, this.module.createI64(-1, -1));\r\n break;\r\n }\r\n break;\r\n\r\n case Token.TYPEOF:\r\n // it might make sense to implement typeof in a way that a generic function can detect\r\n // whether its type argument is a class type or string. that could then be used, for\r\n // example, to generate hash codes for sets and maps, depending on the kind of type\r\n // parameter we have. ideally the comparison would not involve actual string comparison and\r\n // limit available operations to hard-coded string literals.\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"not implemented\");\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"unary operator expected\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n if (this.options.sourceMap != null) {\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) {\r\n source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n }\r\n range.debugInfoRef = expr;\r\n if (!this.currentFunction.debugLocations) this.currentFunction.debugLocations = [];\r\n this.currentFunction.debugLocations.push(range);\r\n }\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Wraps a 32-bit integer expression so it evaluates to a valid value of the specified type. */\r\nexport function makeSmallIntegerWrap(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n\r\n case TypeKind.I8:\r\n expr = module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n break;\r\n\r\n case TypeKind.I16:\r\n expr = module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n break;\r\n\r\n case TypeKind.U16:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\n\r\n/** Creates a comparison whether an expression is not 'true' in a broader sense. */\r\nexport function makeIsFalseish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n\r\n default: // any integer up to 32 bits\r\n expr = module.createUnary(UnaryOp.EqzI32, expr);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = module.createUnary(UnaryOp.EqzI64, expr);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: strings\r\n case TypeKind.ISIZE:\r\n expr = module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\n\r\n/** Creates a comparison whether an expression is 'true' in a broader sense. */\r\nexport function makeIsTrueish(\r\n expr: ExpressionRef,\r\n type: Type,\r\n module: Module\r\n): ExpressionRef {\r\n switch (type.kind) {\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: strings\r\n case TypeKind.ISIZE:\r\n if (type.size == 64) {\r\n expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\n","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","import {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalize(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n var ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolve(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalize(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK:\r\n return true;\r\n default:\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is an octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","// code below is generated from diagnosticsMessages.json by scripts/build-diagnostics\n/* tslint:disable:max-line-length */\n\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Structs_cannot_extend_classes_and_vice_versa = 207,\n Structs_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n A_class_may_only_extend_another_class = 1311,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054\n}\n\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Structs cannot extend classes and vice-versa.\";\n case 208: return \"Structs cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1311: return \"A class may only extend another class.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n default: return \"\";\n }\n}\n","/*\r\n\r\n This is a custom parser specifically written for the AssemblyScript subset. It accepts some of the\r\n most common TypeScript-only patterns that it knows an appropriate error message for but, though it\r\n uses TypeScript's codes for diagnostics, doesn't ultimately aim at full compatibility.\r\n\r\n*/\r\n\r\nimport {\r\n Program,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalize as normalizePath\r\n} from \"./util/path\";\r\n\r\nimport {\r\n\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n TypeNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n Decorator,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionExpression,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n Modifier,\r\n ModifierKind,\r\n NamespaceDeclaration,\r\n Parameter,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameter,\r\n VariableStatement,\r\n VariableDeclaration,\r\n WhileStatement,\r\n\r\n addModifier,\r\n getModifier,\r\n hasModifier,\r\n setReusableModifiers\r\n\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Log of source file names to be requested. */\r\n backlog: string[] = new Array();\r\n /** Log of source file names already processed. */\r\n seenlog: Set = new Set();\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n for (var i = 0, k = this.program.sources.length; i < k; ++i) {\r\n if (this.program.sources[i].normalizedPath == normalizedPath) return;\r\n }\r\n this.seenlog.add(normalizedPath);\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n this.program.sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, this.program.diagnostics);\r\n source.tokenizer = tn;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n var statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n source.statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n isNamespaceMember: bool = false\r\n ): Statement | null {\r\n\r\n // check decorators\r\n var decorators: Decorator[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n var decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // check modifiers\r\n var modifiers: Modifier[] | null = null;\r\n if (tn.skip(Token.EXPORT)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.EXPORT, tn.range()), modifiers);\r\n }\r\n if (tn.skip(Token.DECLARE)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.DECLARE, tn.range()), modifiers);\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) {\r\n this.error(\r\n DiagnosticCode.Line_break_not_permitted_here,\r\n tn.range(tn.pos)\r\n ); // recoverable, compatibility\r\n }\r\n }\r\n\r\n // remember where we took off\r\n tn.mark();\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n var modifier: Modifier | null;\r\n\r\n // handle declarations\r\n switch (tn.next()) {\r\n\r\n case Token.CONST:\r\n modifiers = addModifier(Node.createModifier(ModifierKind.CONST, tn.range()), modifiers);\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n break;\r\n }\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.LET:\r\n modifiers = addModifier(Node.createModifier(ModifierKind.LET, tn.range()), modifiers);\r\n // fall-through\r\n\r\n case Token.VAR:\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.ENUM:\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.FUNCTION:\r\n statement = this.parseFunction(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.ABSTRACT:\r\n if (!tn.skip(Token.CLASS)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"class\"\r\n );\r\n break;\r\n }\r\n modifiers = addModifier(\r\n Node.createModifier(ModifierKind.ABSTRACT, tn.range()), modifiers\r\n );\r\n // fall through\r\n\r\n case Token.CLASS:\r\n statement = this.parseClass(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.NAMESPACE:\r\n statement = this.parseNamespace(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.IMPORT:\r\n if (modifier = getModifier(ModifierKind.EXPORT, modifiers)) {\r\n statement = this.parseExportImport(tn, modifier.range);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n if (modifiers) setReusableModifiers(modifiers);\r\n break;\r\n\r\n case Token.TYPE:\r\n statement = this.parseTypeDeclaration(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n default:\r\n\r\n // handle plain exports\r\n if (hasModifier(ModifierKind.EXPORT, modifiers)) {\r\n tn.reset();\r\n statement = this.parseExport(tn, modifiers); // TODO: why exactly does this have modifiers again? 'declare'?\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (modifiers) {\r\n if (modifier = getModifier(ModifierKind.DECLARE, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"declare\"\r\n ); // recoverable\r\n }\r\n setReusableModifiers(modifiers);\r\n }\r\n tn.reset();\r\n if (!isNamespaceMember) {\r\n statement = this.parseStatement(tn, true);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n return this.backlog.length ? this.backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): TypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n // void\r\n if (token == Token.VOID) {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n var type: TypeNode;\r\n\r\n // ( ... )\r\n if (acceptParenthesized && token == Token.OPENPAREN) {\r\n var innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n\r\n // this\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // true\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // string literal\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Name\r\n } else if (token == Token.IDENTIFIER) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var parameters = new Array();\r\n var nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n var parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n var bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n var bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): Decorator | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var name = tn.readIdentifier();\r\n var expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n var args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n var members = new Array();\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseVariableDeclaration(tn, isDeclare, modifiers, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n isDeclare: bool = false,\r\n parentModifiers: Modifier[] | null,\r\n parentDecorators: Decorator[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var type: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isDeclare) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (hasModifier(ModifierKind.CONST, parentModifiers)) {\r\n if (!hasModifier(ModifierKind.DECLARE, parentModifiers)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n );\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentModifiers,\r\n parentDecorators,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseEnumValue(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameter[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n do {\r\n var typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameter | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n if (!(extendsType = this.parseType(tn))) return null;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseParameters(\r\n tn: Tokenizer\r\n ): Parameter[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: Parameter | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n\r\n if (tn.peek() != Token.CLOSEPAREN) {\r\n do {\r\n var param = this.parseParameter(tn);\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n\r\n default:\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n\r\n case ParameterKind.OPTIONAL:\r\n seenOptional = true;\r\n break;\r\n\r\n case ParameterKind.REST:\r\n seenRest = param;\r\n break;\r\n }\r\n parameters.push(param);\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n suppressErrors: bool = false\r\n ): Parameter | null {\r\n\r\n // before: '...'? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isRest = true;\r\n startRange = tn.range();\r\n }\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n if (!isRest) startRange = tn.range();\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var type: TypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n }\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n return Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var typeParameters: TypeParameter[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n var isSetter = hasModifier(ModifierKind.SET, modifiers);\r\n if (isSetter) {\r\n\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var isGetter = hasModifier(ModifierKind.GET, modifiers);\r\n if (isGetter && parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, isSetter);\r\n if (!returnType) return null;\r\n\r\n } else if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (isDeclare) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!isDeclare) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n identifier,\r\n typeParameters,\r\n parameters,\r\n returnType,\r\n body,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var identifier: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n isArrow = false;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n identifier = Node.createIdentifierExpression(\"\", tn.range(tn.pos, tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n identifier = Node.createIdentifierExpression(\"\", tn.range(tn.tokenPos, tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, identifier, parameters, isArrow, startPos);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n identifier: IdentifierExpression,\r\n parameters: Parameter[],\r\n isArrow: bool,\r\n startPos: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = identifier.range.start;\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n identifier,\r\n null,\r\n parameters,\r\n returnType,\r\n body,\r\n null,\r\n null,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration, isArrow);\r\n }\r\n\r\n parseClass(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): ClassDeclaration | null {\r\n\r\n // at 'class':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var startPos = decorators && decorators.length\r\n ? decorators[0].range.start\r\n : modifiers && modifiers.length\r\n ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameter[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n extendsType = this.parseType(tn);\r\n if (!extendsType) return null;\r\n }\r\n\r\n var implementsTypes = new Array();\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n do {\r\n var type = this.parseType(tn);\r\n if (!type) return null;\r\n implementsTypes.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseClassMember(tn, isDeclare);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parentIsDeclare: bool\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n var decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var modifiers: Modifier[] | null = null;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PUBLIC, tn.range()), modifiers);\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PRIVATE, tn.range()), modifiers);\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PROTECTED, tn.range()), modifiers);\r\n }\r\n\r\n if (tn.skip(Token.STATIC)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.STATIC, tn.range()), modifiers);\r\n } else if (tn.skip(Token.ABSTRACT)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.ABSTRACT, tn.range()), modifiers);\r\n }\r\n\r\n if (tn.skip(Token.READONLY)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.READONLY, tn.range()), modifiers);\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n tn.mark();\r\n\r\n var isGetter = false;\r\n var isSetter = false;\r\n\r\n if (isGetter = tn.skip(Token.GET)) {\r\n if (tn.peek(true, true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.GET, tn.range()), modifiers);\r\n } else {\r\n tn.reset();\r\n isGetter = false;\r\n }\r\n\r\n } else if (isSetter = tn.skip(Token.SET)) { // can't be both\r\n if (tn.peek(true, true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.SET, tn.range()), modifiers);\r\n } else {\r\n tn.reset();\r\n isSetter = false;\r\n }\r\n }\r\n\r\n var isConstructor = tn.skip(Token.CONSTRUCTOR);\r\n if (isConstructor || tn.skip(Token.IDENTIFIER)) {\r\n\r\n var identifier = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var typeParameters: TypeParameter[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n if (isGetter && parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n identifier.range\r\n );\r\n }\r\n\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n identifier.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n }\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (identifier.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, identifier.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else if (!isSetter && identifier.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (parentIsDeclare) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!parentIsDeclare) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n var retMethod = Node.createMethodDeclaration(\r\n identifier,\r\n typeParameters,\r\n parameters,\r\n returnType,\r\n body,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n identifier.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n identifier.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n var modifier: Modifier | null;\r\n\r\n if (modifier = getModifier(ModifierKind.ABSTRACT, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (modifier = getModifier(ModifierKind.GET, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (modifier = getModifier(ModifierKind.SET, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"set\"\r\n ); // recoverable\r\n }\r\n\r\n var type: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n var retField = Node.createFieldDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var member = this.parseTopLevelStatement(tn, true);\r\n if (!member) return null;\r\n members.push(member);\r\n }\r\n var ret = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n var ret = Node.createExportStatement(members, path, modifiers, tn.range(startPos, tn.pos));\r\n if (ret.normalizedPath && !this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n var member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n var path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n var ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n if (!this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startRange: Range\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var ret = Node.createExportImportStatement(identifier, asIdentifier, Range.join(startRange, tn.range()));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n tn.mark();\r\n var token = tn.next();\r\n switch (token) {\r\n\r\n case Token.BREAK:\r\n return this.parseBreak(tn);\r\n\r\n case Token.CONST:\r\n return this.parseVariable(tn, [\r\n Node.createModifier(ModifierKind.CONST, tn.range())\r\n ], null);\r\n\r\n case Token.CONTINUE:\r\n return this.parseContinue(tn);\r\n\r\n case Token.DO:\r\n return this.parseDoStatement(tn);\r\n\r\n case Token.FOR:\r\n return this.parseForStatement(tn);\r\n\r\n case Token.IF:\r\n return this.parseIfStatement(tn);\r\n\r\n case Token.LET:\r\n return this.parseVariable(tn, [\r\n Node.createModifier(ModifierKind.LET, tn.range())\r\n ], null);\r\n\r\n case Token.VAR:\r\n return this.parseVariable(tn, null, null);\r\n\r\n case Token.OPENBRACE:\r\n return this.parseBlockStatement(tn, topLevel);\r\n\r\n case Token.RETURN:\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return this.parseReturn(tn);\r\n\r\n case Token.SEMICOLON:\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n\r\n case Token.SWITCH:\r\n return this.parseSwitchStatement(tn);\r\n\r\n case Token.THROW:\r\n return this.parseThrowStatement(tn);\r\n\r\n case Token.TRY:\r\n return this.parseTryStatement(tn);\r\n\r\n case Token.TYPE:\r\n return this.parseTypeDeclaration(tn, null);\r\n\r\n case Token.WHILE:\r\n return this.parseWhileStatement(tn);\r\n\r\n default:\r\n tn.reset();\r\n return this.parseExpressionStatement(tn);\r\n }\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var statement = this.parseStatement(tn, topLevel);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(true);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(true);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n\r\n var initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.LET) || tn.skip(Token.CONST) || tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, null, null);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n var condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n var incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n var elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n var ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n var label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n var catchVariable: IdentifierExpression | null = null;\r\n var catchStatements: Statement[] | null = null;\r\n var finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n var ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null = null,\r\n decorators: Decorator[] | null = null\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier '=' Type ';'?\r\n\r\n var startPos = decorators && decorators.length ? decorators[0].range.start\r\n : modifiers && modifiers.length ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n var type = this.parseType(tn);\r\n if (!type) return null;\r\n var ret = Node.createTypeDeclaration(name, type, modifiers, decorators, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n var ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(true);\r\n var startPos = tn.tokenPos;\r\n var expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var p = determinePrecedenceStart(token);\r\n if (p != Precedence.INVALID) {\r\n var operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, p);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n switch (token) {\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN:\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createIdentifierExpression(\"\", tn.range(startPos, startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n tn.mark();\r\n var again = true;\r\n do {\r\n switch (tn.next(true)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT:\r\n tn.reset();\r\n return this.parseFunctionExpression(tn);\r\n\r\n // can be both\r\n case Token.IDENTIFIER:\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN:\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n\r\n // function expression\r\n case Token.QUESTION: // optional parameter\r\n case Token.COLON: // type annotation\r\n tn.reset();\r\n return this.parseFunctionExpression(tn);\r\n\r\n // can be both\r\n case Token.COMMA:\r\n break; // continue\r\n\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default:\r\n again = false;\r\n break;\r\n }\r\n break;\r\n\r\n // parenthesized expression\r\n default:\r\n again = false;\r\n break;\r\n }\r\n } while (again);\r\n tn.reset();\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET:\r\n var elementExpressions = new Array();\r\n\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n do {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (tn.peek() == Token.CLOSEBRACKET) break;\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN:\r\n var toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n case Token.IDENTIFIER:\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n\r\n case Token.THIS:\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n\r\n case Token.CONSTRUCTOR:\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n\r\n case Token.SUPER:\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n\r\n case Token.STRINGLITERAL:\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n\r\n case Token.INTEGERLITERAL:\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n\r\n case Token.FLOATLITERAL:\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH:\r\n var regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n case Token.FUNCTION:\r\n return this.parseFunctionExpression(tn);\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): TypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n var type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset();\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset();\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n do {\r\n var expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 0\r\n ): Expression | null {\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression\r\n var typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn); // skips '(' on success\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n if (typeArguments || tn.skip(Token.OPENPAREN)) {\r\n var args = this.parseArguments(tn);\r\n if (!args) return null;\r\n expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n\r\n switch (token) {\r\n\r\n // AssertionExpression\r\n case Token.AS:\r\n var toType = this.parseType(tn);\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET:\r\n next = this.parseExpression(tn);\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n\r\n // TernaryExpression\r\n case Token.QUESTION:\r\n var ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n var ifElse = this.parseExpression(tn);\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n\r\n // CommaExpression\r\n case Token.COMMA:\r\n var commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n\r\n default:\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n var propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING,\r\n INVALID = -1\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): i32 {\r\n switch (kind) {\r\n\r\n case Token.DOT_DOT_DOT:\r\n return Precedence.SPREAD;\r\n\r\n case Token.YIELD:\r\n return Precedence.YIELD;\r\n\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE:\r\n return Precedence.UNARY_PREFIX;\r\n\r\n case Token.NEW:\r\n return Precedence.MEMBERACCESS;\r\n\r\n default:\r\n return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): i32 {\r\n switch (kind) {\r\n\r\n case Token.COMMA:\r\n return Precedence.COMMA;\r\n\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n return Precedence.ASSIGNMENT;\r\n\r\n case Token.QUESTION:\r\n return Precedence.CONDITIONAL;\r\n\r\n case Token.BAR_BAR:\r\n return Precedence.LOGICAL_OR;\r\n\r\n case Token.AMPERSAND_AMPERSAND:\r\n return Precedence.LOGICAL_AND;\r\n\r\n case Token.BAR:\r\n return Precedence.BITWISE_OR;\r\n\r\n case Token.CARET:\r\n return Precedence.BITWISE_XOR;\r\n\r\n case Token.AMPERSAND:\r\n return Precedence.BITWISE_AND;\r\n\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n return Precedence.EQUALITY;\r\n\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS:\r\n return Precedence.RELATIONAL;\r\n\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n return Precedence.SHIFT;\r\n\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n return Precedence.ADDITIVE;\r\n\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT:\r\n return Precedence.MULTIPLICATIVE;\r\n\r\n case Token.ASTERISK_ASTERISK:\r\n return Precedence.EXPONENTIATED;\r\n\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n return Precedence.UNARY_POSTFIX;\r\n\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET:\r\n return Precedence.MEMBERACCESS;\r\n\r\n default:\r\n return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n","import {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n readString\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module) {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = readString(_BinaryenFunctionGetName(func)) || \"$\" + this.functionId.toString(10);\r\n var body = _BinaryenFunctionGetBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (var i: Index = 0, k: Index = _BinaryenFunctionGetNumParams(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetParam(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetResult(func)));\r\n this.push(\" \");\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = _BinaryenExpressionGetId(expr);\r\n var type = _BinaryenExpressionGetType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n\r\n case ExpressionId.Block: // TODO: magic\r\n if ((string = readString(_BinaryenBlockGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = _BinaryenBlockGetNumChildren(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(_BinaryenBlockGetChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n\r\n case ExpressionId.If:\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n if (nested = _BinaryenIfGetIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(_BinaryenIfGetIfFalse(expr));\r\n }\r\n return;\r\n\r\n case ExpressionId.Loop:\r\n if ((string = readString(_BinaryenLoopGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(_BinaryenLoopGetBody(expr));\r\n this.push(\"while (0);\\n\");\r\n\r\n case ExpressionId.Break:\r\n if (nested = _BinaryenBreakGetCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = readString(_BinaryenBreakGetName(expr))) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n\r\n case ExpressionId.Switch:\r\n\r\n case ExpressionId.Call:\r\n\r\n case ExpressionId.CallImport:\r\n\r\n case ExpressionId.CallIndirect:\r\n\r\n case ExpressionId.GetLocal:\r\n this.push(\"$\");\r\n this.push(_BinaryenGetLocalGetIndex(expr).toString(10));\r\n return;\r\n\r\n case ExpressionId.SetLocal:\r\n this.push(\"$\");\r\n this.push(_BinaryenSetLocalGetIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(_BinaryenSetLocalGetValue(expr));\r\n return;\r\n\r\n case ExpressionId.GetGlobal:\r\n\r\n case ExpressionId.SetGlobal:\r\n\r\n case ExpressionId.Load:\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenLoadGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenLoadGetPtr(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case ExpressionId.Store:\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenStoreGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenStoreGetPtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenStoreGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case ExpressionId.Const:\r\n switch (type) {\r\n\r\n case NativeType.I32:\r\n this.push(_BinaryenConstGetValueI32(expr).toString(10));\r\n return;\r\n\r\n case NativeType.I64:\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n\r\n case NativeType.F32:\r\n this.push(_BinaryenConstGetValueF32(expr).toString(10));\r\n return;\r\n\r\n case NativeType.F64:\r\n this.push(_BinaryenConstGetValueF64(expr).toString(10));\r\n return;\r\n }\r\n break;\r\n\r\n case ExpressionId.Unary:\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n\r\n case UnaryOp.ClzI32:\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.CtzI32:\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.PopcntI32:\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64:\r\n this.push(\"-\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.AbsF32:\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.CeilF32:\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.FloorF32:\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.TruncF32:\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.NearestF32:\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.SqrtF32:\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64:\r\n this.push(\"!\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ClzI64:\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.CtzI64:\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.PopcntI64:\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.AbsF64:\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.CeilF64:\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.FloorF64:\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.TruncF64:\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.NearestF64:\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.SqrtF64:\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.ExtendI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ExtendU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.WrapI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF32ToI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF32ToI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF32ToU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF32ToU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF64ToI32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF64ToI64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF64ToU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.TruncF64ToU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ReinterpretF32:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.ReinterpretF64:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.ConvertI32ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertI32ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertU32ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertU32ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertI64ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertI64ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertU64ToF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ConvertU64ToF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.PromoteF32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.DemoteF64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n\r\n case UnaryOp.ReinterpretI32:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case UnaryOp.ReinterpretI64:\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n break;\r\n\r\n case ExpressionId.Binary: // TODO: precedence\r\n switch (_BinaryenBinaryGetOp(expr)) {\r\n\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.DivU32:\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.RemU32:\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.RotlI32:\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.RotrI32:\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LtU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LeU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GtU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64:\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GeU32:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.DivU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.RemU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.RotlI64:\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.RotrI64:\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.LtU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.LeU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GtU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.GeU64:\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n\r\n case BinaryOp.CopysignF32:\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.MinF32:\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.MaxF32:\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.CopysignF64:\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.MinF64:\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case BinaryOp.MaxF64:\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n return;\r\n\r\n case ExpressionId.Select:\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(_BinaryenSelectGetIfTrue(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetIfFalse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetCondition(expr));\r\n this.push(\")\");\r\n return;\r\n\r\n case ExpressionId.Drop:\r\n this.decompileExpression(_BinaryenDropGetValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n\r\n case ExpressionId.Return:\r\n if (nested = _BinaryenReturnGetValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n\r\n case ExpressionId.Host:\r\n switch (_BinaryenHostGetOp(expr)) {\r\n case HostOp.CurrentMemory:\r\n this.push(\"current_memory()\");\r\n return;\r\n case HostOp.GrowMemory:\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(_BinaryenHostGetOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n break;\r\n\r\n case ExpressionId.Nop:\r\n this.push(\";\\n\");\r\n return;\r\n\r\n case ExpressionId.Unreachable:\r\n this.push(\"unreachable()\");\r\n return;\r\n\r\n case ExpressionId.AtomicCmpxchg:\r\n\r\n case ExpressionId.AtomicRMW:\r\n\r\n case ExpressionId.AtomicWait:\r\n\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","//////////////////////// Low-level C-Like Compiler API /////////////////////////\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\n/** Parses a source file. If `parser` has been omitted a new one is created. */\r\nexport function parseFile(text: string, path: string, isEntry: bool = false,\r\n parser: Parser | null = null\r\n): Parser {\r\n if (!parser) {\r\n parser = new Parser();\r\n isEntry = true;\r\n }\r\n parser.parseFile(text, path, isEntry);\r\n return parser;\r\n}\r\n\r\n/** Obtains the next required file's path. Returns `null` once complete. */\r\nexport function nextFile(parser: Parser): string | null {\r\n return parser.nextFile();\r\n}\r\n\r\n/** Obtains the next diagnostic message. Returns `null` once complete. */\r\nexport function nextDiagnostic(parser: Parser): DiagnosticMessage | null {\r\n var program = parser.program;\r\n return program.diagnosticsOffset < program.diagnostics.length\r\n ? program.diagnostics[program.diagnosticsOffset++]\r\n : null;\r\n}\r\n\r\n/** Formats a diagnostic message to a string. */\r\nexport { formatDiagnosticMessage as formatDiagnostic };\r\n\r\n/** Tests whether a diagnostic is informatory. */\r\nexport function isInfo(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.INFO;\r\n}\r\n\r\n/** Tests whether a diagnostic is a warning. */\r\nexport function isWarning(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.WARNING;\r\n}\r\n\r\n/** Tests whether a diagnostic is an error. */\r\nexport function isError(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.ERROR;\r\n}\r\n\r\n/** Creates a new set of compiler options. */\r\nexport function createOptions(): Options {\r\n return new Options();\r\n}\r\n\r\n/** Sets the `target` option. */\r\nexport function setTarget(options: Options, target: Target): void {\r\n options.target = target;\r\n}\r\n\r\n/** Sets the `noTreeShaking` option. */\r\nexport function setNoTreeShaking(options: Options, noTreeShaking: bool): void {\r\n options.noTreeShaking = noTreeShaking;\r\n}\r\n\r\n/** Sets the `noAssert` option. */\r\nexport function setNoAssert(options: Options, noAssert: bool): void {\r\n options.noAssert = noAssert;\r\n}\r\n\r\n/** Sets the `noMemory` option. */\r\nexport function setNoMemory(options: Options, noMemory: bool): void {\r\n options.noMemory = noMemory;\r\n}\r\n\r\n/** Sets the `importMemory` option. */\r\nexport function setImportMemory(options: Options, importMemory: bool): void {\r\n options.importMemory = importMemory;\r\n}\r\n\r\n/** Sets the `sourceMap` option. */\r\nexport function setSourceMap(options: Options, sourceMap: bool): void {\r\n options.sourceMap = sourceMap;\r\n}\r\n\r\n/** Sets the `memoryBase` option. */\r\nexport function setMemoryBase(options: Options, memoryBase: u32): void {\r\n options.memoryBase = memoryBase;\r\n}\r\n\r\n/** Compiles the sources computed by the parser to a module. */\r\nexport function compile(parser: Parser, options: Options | null = null): Module {\r\n var program = parser.finish();\r\n var compiler = new Compiler(program, options);\r\n return compiler.compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n}\r\n\r\n/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX } from \"./program\";\r\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","import {\r\n Compiler,\r\n ConversionKind,\r\n\r\n makeSmallIntegerWrap\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n Expression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId\r\n} from \"./module\";\r\n\r\nimport {\r\n Global,\r\n FunctionPrototype,\r\n Local,\r\n ElementFlags,\r\n Class,\r\n ElementKind\r\n} from \"./program\";\r\n\r\n/** Compiles a get of a built-in global. */\r\nexport function compileGetConstant(\r\n compiler: Compiler,\r\n global: Global,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (global.internalName) {\r\n\r\n case \"NaN\": // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(NaN);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(NaN);\r\n }\r\n\r\n case \"Infinity\": // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(Infinity);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(Infinity);\r\n }\r\n\r\n case \"HEAP_BASE\": // never inlined for linking purposes\r\n compiler.currentType = compiler.options.usizeType;\r\n return compiler.module.createGetGlobal(\"HEAP_BASE\", compiler.currentType.toNativeType());\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return compiler.module.createUnreachable();\r\n}\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n var tempLocal0: Local,\r\n tempLocal1: Local;\r\n\r\n var type: Type,\r\n offset: i32;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // math\r\n\r\n case \"isNaN\": // isNaN(value: T) -> bool\r\n compiler.currentType = Type.bool;\r\n if (operands.length != 1) {\r\n if (typeArguments && typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createBinary(BinaryOp.NeF32,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createBinary(BinaryOp.NeF64,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createGetLocal(tempLocal0.index, NativeType.F64)\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n\r\n default: // every other type is never NaN\r\n ret = module.createI32(0);\r\n break;\r\n\r\n }\r\n compiler.currentType = Type.bool;\r\n return ret;\r\n\r\n case \"isFinite\": // isFinite(value: T) -> bool\r\n compiler.currentType = Type.bool;\r\n if (operands.length != 1) {\r\n if (typeArguments && typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createSelect(\r\n module.createBinary(BinaryOp.NeF32,\r\n module.createUnary(UnaryOp.AbsF32,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n module.createF32(Infinity)\r\n ),\r\n module.createI32(0),\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createGetLocal(tempLocal0.index, NativeType.F32),\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createSelect(\r\n module.createBinary(BinaryOp.NeF64,\r\n module.createUnary(UnaryOp.AbsF64,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n module.createF64(Infinity)\r\n ),\r\n module.createI32(0),\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createGetLocal(tempLocal0.index, NativeType.F64),\r\n module.createGetLocal(tempLocal0.index, NativeType.F64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n\r\n default: // every other type is always finite\r\n ret = module.createI32(1);\r\n break;\r\n }\r\n compiler.currentType = Type.bool;\r\n return ret;\r\n\r\n case \"clz\": // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"ctz\": // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"popcnt\": // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"rotl\": // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n ret = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType,\r\n module\r\n );\r\n // fall-through\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n\r\n default:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"rotr\": // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n ret = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType,\r\n module\r\n );\r\n break;\r\n\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n\r\n default:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"abs\": // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n // doesn't need sign-extension here because ifFalse below is either positive\r\n // or MIN_VALUE (-MIN_VALUE == MIN_VALUE) if selected\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal0.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL:\r\n ret = arg0;\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n ret = module.createUnreachable();\r\n break;\r\n\r\n default: // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"max\": // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n\r\n default: // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"min\": // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n\r\n default: // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"ceil\": // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default: // any integer\r\n ret = arg0;\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"floor\": // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default: // any integer\r\n ret = arg0;\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"copysign\": // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n // TODO: does an integer version make sense?\r\n\r\n case TypeKind.F32:\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n\r\n default:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"nearest\": // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default: // any integer\r\n ret = arg0;\r\n break;\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"reinterpret\": // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (typeArguments[0].kind) {\r\n\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n arg0 = compiler.compileExpression(operands[0], Type.f32);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n arg0 = compiler.compileExpression(operands[0], Type.f64);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (typeArguments[0].isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n case TypeKind.ISIZE:\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n arg0 = compiler.compileExpression(operands[0], Type.u32);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n arg0 = compiler.compileExpression(operands[0], Type.u64);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n\r\n default: // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n\r\n case \"sqrt\": // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n // TODO: integer versions (that return f64 or convert)?\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n\r\n default:\r\n // case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"trunc\": // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n default: // any integer\r\n ret = arg0;\r\n break;\r\n\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n\r\n case TypeKind.F32:\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n // memory access\r\n\r\n case \"load\": // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n\r\n case \"store\": // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // wraps a larger integer type to a smaller one, i.e. i32.store8\r\n : ConversionKind.IMPLICIT\r\n );\r\n if (\r\n compiler.currentType.is(TypeFlags.INTEGER) &&\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n typeArguments[0].size > compiler.currentType.size\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n\r\n case \"sizeof\": // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n ret = compiler.options.isWasm64\r\n ? module.createI64(typeArguments[0].byteSize, 0)\r\n : module.createI32(typeArguments[0].byteSize);\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n return ret;\r\n\r\n // control flow\r\n\r\n case \"select\": // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], type = compiler.currentType);\r\n arg2 = compiler.compileExpression(operands[2], Type.bool);\r\n compiler.currentType = type;\r\n\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n return ret;\r\n\r\n case \"unreachable\": // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n\r\n // host operations\r\n\r\n case \"current_memory\": // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n\r\n case \"grow_memory\": // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], compiler.options.usizeType);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n\r\n case \"set_memory\": // set_memory(dest: usize, value: u32, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], Type.u32);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n\r\n // other\r\n\r\n case \"changetype\": // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n } else if (typeArguments[0].kind != TypeKind.USIZE) { // any usize\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.kind != TypeKind.USIZE) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n\r\n case \"assert\": // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32);\r\n }\r\n\r\n type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n var abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n\r\n case TypeKind.F32:\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64)\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.F64)\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n return ret;\r\n\r\n // conversions\r\n\r\n case \"i8\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i8, ConversionKind.EXPLICIT);\r\n\r\n case \"i16\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i16, ConversionKind.EXPLICIT);\r\n\r\n case \"i32\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i32, ConversionKind.EXPLICIT);\r\n\r\n case \"i64\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i64, ConversionKind.EXPLICIT);\r\n\r\n case \"isize\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT\r\n );\r\n\r\n case \"u8\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u8, ConversionKind.EXPLICIT);\r\n\r\n case \"u16\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u16, ConversionKind.EXPLICIT);\r\n\r\n case \"u32\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u32, ConversionKind.EXPLICIT);\r\n\r\n case \"u64\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u64, ConversionKind.EXPLICIT);\r\n\r\n case \"usize\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT\r\n );\r\n\r\n case \"bool\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.bool, ConversionKind.EXPLICIT);\r\n\r\n case \"f32\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.f32, ConversionKind.EXPLICIT);\r\n\r\n case \"f64\":\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.f64, ConversionKind.EXPLICIT);\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I64 ||\r\n _BinaryenConstGetValueI64High(expr) != 0 ||\r\n (value = _BinaryenConstGetValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I32 ||\r\n (value = _BinaryenConstGetValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n cls: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = cls.program;\r\n var prototype = program.elements.get(compiler.options.allocateImpl);\r\n if (prototype) {\r\n if (prototype.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = (prototype).resolve(); // reports\r\n if (instance) {\r\n if (\r\n !instance.is(ElementFlags.GENERIC) &&\r\n instance.returnType == compiler.options.usizeType &&\r\n instance.parameters &&\r\n instance.parameters.length == 1 &&\r\n instance.parameters[0].type == compiler.options.usizeType\r\n ) {\r\n if (compiler.compileFunction(instance)) { // reports\r\n return compiler.makeCall(instance, [\r\n compiler.options.isWasm64\r\n ? compiler.module.createI64(cls.currentMemoryOffset)\r\n : compiler.module.createI32(cls.currentMemoryOffset)\r\n ]);\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Implementation_0_must_match_the_signature_1,\r\n reportNode.range, compiler.options.allocateImpl, \"(size: usize): usize\"\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, compiler.options.allocateImpl\r\n );\r\n }\r\n return compiler.module.createUnreachable();\r\n}\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n var abort: ExpressionRef = module.createUnreachable();\r\n var abortPrototype = compiler.program.elements.get(\"abort\");\r\n var stringType = compiler.program.types.get(\"string\");\r\n if (\r\n abortPrototype &&\r\n abortPrototype.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n stringType\r\n ) {\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (\r\n abortInstance &&\r\n compiler.compileFunction(abortInstance) // reports\r\n ) {\r\n assert(abortInstance.parameters && abortInstance.parameters.length == 4); // to be sure\r\n abort = module.createBlock(null, [\r\n compiler.makeCall(abortInstance, [\r\n message != null\r\n ? compiler.compileExpression(message, stringType)\r\n : compiler.options.usizeType.toNativeZero(module),\r\n compiler.compileStaticString(reportNode.range.source.normalizedPath),\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ]),\r\n abort\r\n ]);\r\n }\r\n }\r\n return abort;\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__17__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function toText() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrint(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\r\nModule.prototype.toAsmjs = function toAsmjs() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrintAsmjs(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n","var globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n","import \"../../../std/portable\";\r\nimport \"./binaryen\";\r\nimport \"./i64\";\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/game-of-life/assembly/game-of-life.ts b/examples/game-of-life/assembly/game-of-life.ts index fc7045ab..78548692 100644 --- a/examples/game-of-life/assembly/game-of-life.ts +++ b/examples/game-of-life/assembly/game-of-life.ts @@ -27,10 +27,12 @@ export function step(): void { load(yp1 * w + xm1) + load(yp1 * w + x) + load(yp1 * w + xp1) ); if (load(y * w + x)) { - if (n < 2 || n > 3) + if (n < 2 || n > 3) { store(s + y * w + x, 0); - } else if (n == 3) + } + } else if (n == 3) { store(s + y * w + x, 1); + } } } } diff --git a/examples/game-of-life/game-of-life.optimized.wat b/examples/game-of-life/game-of-life.optimized.wat index 1b89e467..dc0b5abd 100644 --- a/examples/game-of-life/game-of-life.optimized.wat +++ b/examples/game-of-life/game-of-life.optimized.wat @@ -320,31 +320,31 @@ (i32.const 0) ) ) - ;;@ assembly/game-of-life.ts:32:13 + ;;@ assembly/game-of-life.ts:33:13 (if - ;;@ assembly/game-of-life.ts:32:17 + ;;@ assembly/game-of-life.ts:33:17 (i32.eq (get_local $2) - ;;@ assembly/game-of-life.ts:32:22 + ;;@ assembly/game-of-life.ts:33:22 (i32.const 3) ) - ;;@ assembly/game-of-life.ts:33:8 + ;;@ assembly/game-of-life.ts:34:8 (i32.store8 - ;;@ assembly/game-of-life.ts:33:18 + ;;@ assembly/game-of-life.ts:34:18 (i32.add (i32.add (get_global $assembly/game-of-life/s) - ;;@ assembly/game-of-life.ts:33:22 + ;;@ assembly/game-of-life.ts:34:22 (i32.mul (get_local $0) - ;;@ assembly/game-of-life.ts:33:26 + ;;@ assembly/game-of-life.ts:34:26 (get_global $assembly/game-of-life/w) ) ) - ;;@ assembly/game-of-life.ts:33:30 + ;;@ assembly/game-of-life.ts:34:30 (get_local $1) ) - ;;@ assembly/game-of-life.ts:33:33 + ;;@ assembly/game-of-life.ts:34:33 (i32.const 1) ) ) diff --git a/examples/game-of-life/game-of-life.untouched.wat b/examples/game-of-life/game-of-life.untouched.wat index 3b2d2b6d..6237e55e 100644 --- a/examples/game-of-life/game-of-life.untouched.wat +++ b/examples/game-of-life/game-of-life.untouched.wat @@ -316,15 +316,12 @@ ;;@ assembly/game-of-life.ts:30:12 (i32.and (if (result i32) - (i32.ne - (tee_local $9 - (i32.lt_s - (get_local $8) - ;;@ assembly/game-of-life.ts:30:16 - (i32.const 2) - ) + (tee_local $9 + (i32.lt_s + (get_local $8) + ;;@ assembly/game-of-life.ts:30:16 + (i32.const 2) ) - (i32.const 0) ) (get_local $9) ;;@ assembly/game-of-life.ts:30:21 @@ -356,31 +353,31 @@ (i32.const 0) ) ) - ;;@ assembly/game-of-life.ts:32:13 + ;;@ assembly/game-of-life.ts:33:13 (if - ;;@ assembly/game-of-life.ts:32:17 + ;;@ assembly/game-of-life.ts:33:17 (i32.eq (get_local $8) - ;;@ assembly/game-of-life.ts:32:22 + ;;@ assembly/game-of-life.ts:33:22 (i32.const 3) ) - ;;@ assembly/game-of-life.ts:33:8 + ;;@ assembly/game-of-life.ts:34:8 (i32.store8 - ;;@ assembly/game-of-life.ts:33:18 + ;;@ assembly/game-of-life.ts:34:18 (i32.add (i32.add (get_global $assembly/game-of-life/s) - ;;@ assembly/game-of-life.ts:33:22 + ;;@ assembly/game-of-life.ts:34:22 (i32.mul (get_local $2) - ;;@ assembly/game-of-life.ts:33:26 + ;;@ assembly/game-of-life.ts:34:26 (get_global $assembly/game-of-life/w) ) ) - ;;@ assembly/game-of-life.ts:33:30 + ;;@ assembly/game-of-life.ts:34:30 (get_local $5) ) - ;;@ assembly/game-of-life.ts:33:33 + ;;@ assembly/game-of-life.ts:34:33 (i32.const 1) ) ) diff --git a/examples/pson/assembly/pson.ts b/examples/pson/assembly/pson.ts index 79f4da14..b687ba70 100644 --- a/examples/pson/assembly/pson.ts +++ b/examples/pson/assembly/pson.ts @@ -40,8 +40,9 @@ var offset: usize = 0; export function decode(length: usize): void { offset = 0; - while (offset < length) + while (offset < length) { decodeValue(); + } assert(offset == length); } @@ -85,8 +86,9 @@ function decodeValue(): void { case Token.ARRAY: pson.onArray(size = readVarint32()); - while (size--) + while (size--) { decodeValue(); + } break; case Token.INTEGER: @@ -126,8 +128,9 @@ function decodeValue(): void { break; default: // small integer? - if (token > Token.MAX) + if (token > Token.MAX) { throw new Error("unexpected token"); + } pson.onInteger((token >> 1) ^ -(token & 1)); break; } diff --git a/examples/pson/pson.optimized.wat b/examples/pson/pson.optimized.wat index 87d26d62..5746a957 100644 --- a/examples/pson/pson.optimized.wat +++ b/examples/pson/pson.optimized.wat @@ -32,11 +32,11 @@ (local $1 i32) (local $2 i32) (loop $continue|0 - ;;@ assembly/pson.ts:141:4 + ;;@ assembly/pson.ts:144:4 (set_local $0 (i32.or (get_local $0) - ;;@ assembly/pson.ts:140:21 + ;;@ assembly/pson.ts:143:21 (block (result i32) (set_global $assembly/pson/offset (i32.add @@ -46,20 +46,20 @@ (i32.const 1) ) ) - ;;@ assembly/pson.ts:141:13 + ;;@ assembly/pson.ts:144:13 (i32.shl (i32.and - ;;@ assembly/pson.ts:140:4 + ;;@ assembly/pson.ts:143:4 (tee_local $2 - ;;@ assembly/pson.ts:140:12 + ;;@ assembly/pson.ts:143:12 (i32.load8_u (get_local $0) ) ) - ;;@ assembly/pson.ts:141:23 + ;;@ assembly/pson.ts:144:23 (i32.const 127) ) - ;;@ assembly/pson.ts:141:37 + ;;@ assembly/pson.ts:144:37 (block (result i32) (set_local $1 (i32.add @@ -69,10 +69,10 @@ (i32.const 1) ) ) - ;;@ assembly/pson.ts:141:32 + ;;@ assembly/pson.ts:144:32 (i32.mul (get_local $0) - ;;@ assembly/pson.ts:141:33 + ;;@ assembly/pson.ts:144:33 (i32.const 7) ) ) @@ -82,14 +82,14 @@ ) (br_if $continue|0 (i32.and - ;;@ assembly/pson.ts:142:11 + ;;@ assembly/pson.ts:145:11 (get_local $2) - ;;@ assembly/pson.ts:142:15 + ;;@ assembly/pson.ts:145:15 (i32.const 128) ) ) ) - ;;@ assembly/pson.ts:143:9 + ;;@ assembly/pson.ts:146:9 (get_local $0) ) (func $assembly/pson/readVarint64 (; 16 ;) (type $I) (result i64) @@ -97,11 +97,11 @@ (local $1 i32) (local $2 i64) (loop $continue|0 - ;;@ assembly/pson.ts:151:4 + ;;@ assembly/pson.ts:154:4 (set_local $0 (i64.or (get_local $0) - ;;@ assembly/pson.ts:150:21 + ;;@ assembly/pson.ts:153:21 (block (result i64) (set_global $assembly/pson/offset (i32.add @@ -114,31 +114,31 @@ (set_local $2 (i64.add (tee_local $0 - ;;@ assembly/pson.ts:151:37 + ;;@ assembly/pson.ts:154:37 (get_local $2) ) (i64.const 1) ) ) - ;;@ assembly/pson.ts:151:13 + ;;@ assembly/pson.ts:154:13 (i64.shl (i64.extend_u/i32 (i32.and - ;;@ assembly/pson.ts:150:4 + ;;@ assembly/pson.ts:153:4 (tee_local $1 - ;;@ assembly/pson.ts:150:12 + ;;@ assembly/pson.ts:153:12 (i32.load8_u (get_local $1) ) ) - ;;@ assembly/pson.ts:151:23 + ;;@ assembly/pson.ts:154:23 (i32.const 127) ) ) - ;;@ assembly/pson.ts:151:32 + ;;@ assembly/pson.ts:154:32 (i64.mul (get_local $0) - ;;@ assembly/pson.ts:151:33 + ;;@ assembly/pson.ts:154:33 (i64.const 7) ) ) @@ -147,21 +147,21 @@ ) (br_if $continue|0 (i32.and - ;;@ assembly/pson.ts:152:11 + ;;@ assembly/pson.ts:155:11 (get_local $1) - ;;@ assembly/pson.ts:152:15 + ;;@ assembly/pson.ts:155:15 (i32.const 128) ) ) ) - ;;@ assembly/pson.ts:153:9 + ;;@ assembly/pson.ts:156:9 (get_local $0) ) (func $assembly/pson/decodeValue (; 17 ;) (type $v) (local $0 i32) (local $1 i32) (local $2 i64) - ;;@ assembly/pson.ts:52:2 + ;;@ assembly/pson.ts:53:2 (block $break|0 (block $case16|0 (block $case15|0 @@ -183,7 +183,7 @@ (set_global $assembly/pson/offset (i32.add (tee_local $1 - ;;@ assembly/pson.ts:49:28 + ;;@ assembly/pson.ts:50:28 (get_global $assembly/pson/offset) ) (i32.const 1) @@ -192,9 +192,9 @@ (br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 $case12|0 $tablify|0 (i32.sub (tee_local $1 - ;;@ assembly/pson.ts:49:2 + ;;@ assembly/pson.ts:50:2 (tee_local $0 - ;;@ assembly/pson.ts:49:19 + ;;@ assembly/pson.ts:50:19 (i32.load8_u (get_local $1) ) @@ -208,12 +208,12 @@ (i32.or (i32.eq (get_local $1) - ;;@ assembly/pson.ts:117:9 + ;;@ assembly/pson.ts:119:9 (i32.const 253) ) (i32.eq (get_local $1) - ;;@ assembly/pson.ts:118:9 + ;;@ assembly/pson.ts:120:9 (i32.const 254) ) ) @@ -221,53 +221,53 @@ (br_if $case15|0 (i32.eq (get_local $1) - ;;@ assembly/pson.ts:122:9 + ;;@ assembly/pson.ts:124:9 (i32.const 255) ) ) (br $case16|0) ) - ;;@ assembly/pson.ts:55:11 + ;;@ assembly/pson.ts:56:11 (call $assembly/pson/pson.onNull) - ;;@ assembly/pson.ts:56:6 + ;;@ assembly/pson.ts:57:6 (br $break|0) ) - ;;@ assembly/pson.ts:59:11 + ;;@ assembly/pson.ts:60:11 (call $assembly/pson/pson.onTrue) - ;;@ assembly/pson.ts:60:6 + ;;@ assembly/pson.ts:61:6 (br $break|0) ) - ;;@ assembly/pson.ts:63:11 + ;;@ assembly/pson.ts:64:11 (call $assembly/pson/pson.onFalse) - ;;@ assembly/pson.ts:64:6 + ;;@ assembly/pson.ts:65:6 (br $break|0) ) - ;;@ assembly/pson.ts:67:11 + ;;@ assembly/pson.ts:68:11 (call $assembly/pson/pson.onEObject) - ;;@ assembly/pson.ts:68:6 + ;;@ assembly/pson.ts:69:6 (br $break|0) ) - ;;@ assembly/pson.ts:71:11 + ;;@ assembly/pson.ts:72:11 (call $assembly/pson/pson.onEArray) - ;;@ assembly/pson.ts:72:6 + ;;@ assembly/pson.ts:73:6 (br $break|0) ) - ;;@ assembly/pson.ts:75:11 + ;;@ assembly/pson.ts:76:11 (call $assembly/pson/pson.onEString) - ;;@ assembly/pson.ts:76:6 + ;;@ assembly/pson.ts:77:6 (br $break|0) ) - ;;@ assembly/pson.ts:79:11 + ;;@ assembly/pson.ts:80:11 (call $assembly/pson/pson.onObject - ;;@ assembly/pson.ts:79:20 + ;;@ assembly/pson.ts:80:20 (tee_local $0 - ;;@ assembly/pson.ts:79:27 + ;;@ assembly/pson.ts:80:27 (call $assembly/pson/readVarint32) ) ) (loop $continue|1 (if - ;;@ assembly/pson.ts:80:13 + ;;@ assembly/pson.ts:81:13 (block (result i32) (set_local $0 (i32.sub @@ -280,28 +280,28 @@ (get_local $1) ) (block - ;;@ assembly/pson.ts:81:8 - (call $assembly/pson/decodeValue) ;;@ assembly/pson.ts:82:8 (call $assembly/pson/decodeValue) + ;;@ assembly/pson.ts:83:8 + (call $assembly/pson/decodeValue) (br $continue|1) ) ) ) - ;;@ assembly/pson.ts:84:6 + ;;@ assembly/pson.ts:85:6 (br $break|0) ) - ;;@ assembly/pson.ts:87:11 + ;;@ assembly/pson.ts:88:11 (call $assembly/pson/pson.onArray - ;;@ assembly/pson.ts:87:19 + ;;@ assembly/pson.ts:88:19 (tee_local $0 - ;;@ assembly/pson.ts:87:26 + ;;@ assembly/pson.ts:88:26 (call $assembly/pson/readVarint32) ) ) (loop $continue|2 (if - ;;@ assembly/pson.ts:88:13 + ;;@ assembly/pson.ts:89:13 (block (result i32) (set_local $0 (i32.sub @@ -314,204 +314,204 @@ (get_local $1) ) (block - ;;@ assembly/pson.ts:89:8 + ;;@ assembly/pson.ts:90:8 (call $assembly/pson/decodeValue) (br $continue|2) ) ) ) - ;;@ assembly/pson.ts:90:6 + ;;@ assembly/pson.ts:92:6 (br $break|0) ) - ;;@ assembly/pson.ts:93:11 + ;;@ assembly/pson.ts:95:11 (call $assembly/pson/pson.onInteger - ;;@ assembly/pson.ts:93:21 + ;;@ assembly/pson.ts:95:21 (i32.xor (i32.shr_u - ;;@ assembly/pson.ts:93:22 + ;;@ assembly/pson.ts:95:22 (tee_local $0 - ;;@ assembly/pson.ts:93:30 + ;;@ assembly/pson.ts:95:30 (call $assembly/pson/readVarint32) ) - ;;@ assembly/pson.ts:93:49 + ;;@ assembly/pson.ts:95:49 (i32.const 1) ) - ;;@ assembly/pson.ts:93:54 + ;;@ assembly/pson.ts:95:54 (i32.sub (i32.const 0) - ;;@ assembly/pson.ts:93:55 + ;;@ assembly/pson.ts:95:55 (i32.and - ;;@ assembly/pson.ts:93:56 + ;;@ assembly/pson.ts:95:56 (get_local $0) - ;;@ assembly/pson.ts:93:63 + ;;@ assembly/pson.ts:95:63 (i32.const 1) ) ) ) ) - ;;@ assembly/pson.ts:94:6 + ;;@ assembly/pson.ts:96:6 (br $break|0) ) - ;;@ assembly/pson.ts:98:11 + ;;@ assembly/pson.ts:100:11 (call $assembly/pson/pson.onLong - ;;@ assembly/pson.ts:98:18 + ;;@ assembly/pson.ts:100:18 (i32.wrap/i64 - ;;@ assembly/pson.ts:97:6 + ;;@ assembly/pson.ts:99:6 (tee_local $2 - ;;@ assembly/pson.ts:97:13 + ;;@ assembly/pson.ts:99:13 (i64.xor (i64.shr_u - ;;@ assembly/pson.ts:97:14 + ;;@ assembly/pson.ts:99:14 (tee_local $2 - ;;@ assembly/pson.ts:97:22 + ;;@ assembly/pson.ts:99:22 (call $assembly/pson/readVarint64) ) - ;;@ assembly/pson.ts:97:41 + ;;@ assembly/pson.ts:99:41 (i64.const 1) ) - ;;@ assembly/pson.ts:97:46 + ;;@ assembly/pson.ts:99:46 (i64.sub (i64.const 0) - ;;@ assembly/pson.ts:97:47 + ;;@ assembly/pson.ts:99:47 (i64.and - ;;@ assembly/pson.ts:97:48 + ;;@ assembly/pson.ts:99:48 (get_local $2) - ;;@ assembly/pson.ts:97:55 + ;;@ assembly/pson.ts:99:55 (i64.const 1) ) ) ) ) ) - ;;@ assembly/pson.ts:98:29 + ;;@ assembly/pson.ts:100:29 (i32.wrap/i64 - ;;@ assembly/pson.ts:98:35 + ;;@ assembly/pson.ts:100:35 (i64.shr_u (get_local $2) - ;;@ assembly/pson.ts:98:44 + ;;@ assembly/pson.ts:100:44 (i64.const 32) ) ) ) - ;;@ assembly/pson.ts:99:6 + ;;@ assembly/pson.ts:101:6 (br $break|0) ) - ;;@ assembly/pson.ts:102:11 + ;;@ assembly/pson.ts:104:11 (call $assembly/pson/pson.onFloat - ;;@ assembly/pson.ts:102:19 + ;;@ assembly/pson.ts:104:19 (f32.load - ;;@ assembly/pson.ts:102:29 + ;;@ assembly/pson.ts:104:29 (get_global $assembly/pson/offset) ) ) - ;;@ assembly/pson.ts:103:6 + ;;@ assembly/pson.ts:105:6 (set_global $assembly/pson/offset (i32.add (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:103:16 + ;;@ assembly/pson.ts:105:16 (i32.const 4) ) ) - ;;@ assembly/pson.ts:104:6 + ;;@ assembly/pson.ts:106:6 (br $break|0) ) - ;;@ assembly/pson.ts:107:11 + ;;@ assembly/pson.ts:109:11 (call $assembly/pson/pson.onDouble - ;;@ assembly/pson.ts:107:20 + ;;@ assembly/pson.ts:109:20 (f64.load - ;;@ assembly/pson.ts:107:30 + ;;@ assembly/pson.ts:109:30 (get_global $assembly/pson/offset) ) ) - ;;@ assembly/pson.ts:108:6 + ;;@ assembly/pson.ts:110:6 (set_global $assembly/pson/offset (i32.add (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:108:16 + ;;@ assembly/pson.ts:110:16 (i32.const 8) ) ) - ;;@ assembly/pson.ts:109:6 + ;;@ assembly/pson.ts:111:6 (br $break|0) ) - ;;@ assembly/pson.ts:112:6 + ;;@ assembly/pson.ts:114:6 (set_local $0 - ;;@ assembly/pson.ts:112:13 + ;;@ assembly/pson.ts:114:13 (call $assembly/pson/readVarint32) ) - ;;@ assembly/pson.ts:113:11 + ;;@ assembly/pson.ts:115:11 (call $assembly/pson/pson.onString - ;;@ assembly/pson.ts:113:20 + ;;@ assembly/pson.ts:115:20 (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:113:28 + ;;@ assembly/pson.ts:115:28 (get_local $0) ) - ;;@ assembly/pson.ts:114:6 + ;;@ assembly/pson.ts:116:6 (set_global $assembly/pson/offset (i32.add (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:114:16 + ;;@ assembly/pson.ts:116:16 (get_local $0) ) ) - ;;@ assembly/pson.ts:115:6 + ;;@ assembly/pson.ts:117:6 (br $break|0) ) - ;;@ assembly/pson.ts:120:6 + ;;@ assembly/pson.ts:122:6 (unreachable) ) - ;;@ assembly/pson.ts:123:6 + ;;@ assembly/pson.ts:125:6 (set_local $0 - ;;@ assembly/pson.ts:123:13 + ;;@ assembly/pson.ts:125:13 (call $assembly/pson/readVarint32) ) - ;;@ assembly/pson.ts:124:11 + ;;@ assembly/pson.ts:126:11 (call $assembly/pson/pson.onBinary - ;;@ assembly/pson.ts:124:20 + ;;@ assembly/pson.ts:126:20 (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:124:28 + ;;@ assembly/pson.ts:126:28 (get_local $0) ) - ;;@ assembly/pson.ts:125:6 + ;;@ assembly/pson.ts:127:6 (set_global $assembly/pson/offset (i32.add (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:125:16 + ;;@ assembly/pson.ts:127:16 (get_local $0) ) ) - ;;@ assembly/pson.ts:126:6 + ;;@ assembly/pson.ts:128:6 (br $break|0) ) - ;;@ assembly/pson.ts:129:6 + ;;@ assembly/pson.ts:131:6 (if - ;;@ assembly/pson.ts:129:10 + ;;@ assembly/pson.ts:131:10 (i32.gt_u (get_local $0) - ;;@ assembly/pson.ts:129:18 + ;;@ assembly/pson.ts:131:18 (i32.const 239) ) - ;;@ assembly/pson.ts:130:8 + ;;@ assembly/pson.ts:132:8 (unreachable) ) - ;;@ assembly/pson.ts:131:11 + ;;@ assembly/pson.ts:134:11 (call $assembly/pson/pson.onInteger - ;;@ assembly/pson.ts:131:21 + ;;@ assembly/pson.ts:134:21 (i32.xor (i32.shr_u - ;;@ assembly/pson.ts:131:22 + ;;@ assembly/pson.ts:134:22 (get_local $0) - ;;@ assembly/pson.ts:131:31 + ;;@ assembly/pson.ts:134:31 (i32.const 1) ) - ;;@ assembly/pson.ts:131:36 + ;;@ assembly/pson.ts:134:36 (i32.sub (i32.const 0) - ;;@ assembly/pson.ts:131:37 + ;;@ assembly/pson.ts:134:37 (i32.and - ;;@ assembly/pson.ts:131:38 + ;;@ assembly/pson.ts:134:38 (get_local $0) - ;;@ assembly/pson.ts:131:46 + ;;@ assembly/pson.ts:134:46 (i32.const 1) ) ) @@ -540,19 +540,19 @@ ) ) ) - ;;@ assembly/pson.ts:45:2 + ;;@ assembly/pson.ts:46:2 (if - ;;@ assembly/pson.ts:45:9 + ;;@ assembly/pson.ts:46:9 (i32.ne (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:45:19 + ;;@ assembly/pson.ts:46:19 (get_local $0) ) (block (call $abort (i32.const 0) (i32.const 4) - (i32.const 45) + (i32.const 46) (i32.const 2) ) (unreachable) diff --git a/examples/pson/pson.untouched.wat b/examples/pson/pson.untouched.wat index 9999e031..85216343 100644 --- a/examples/pson/pson.untouched.wat +++ b/examples/pson/pson.untouched.wat @@ -51,26 +51,26 @@ (local $1 i32) (local $2 i32) (local $3 i32) - ;;@ assembly/pson.ts:137:2 + ;;@ assembly/pson.ts:140:2 (set_local $0 - ;;@ assembly/pson.ts:137:19 + ;;@ assembly/pson.ts:140:19 (i32.const 0) ) - ;;@ assembly/pson.ts:138:2 + ;;@ assembly/pson.ts:141:2 (set_local $1 - ;;@ assembly/pson.ts:138:19 + ;;@ assembly/pson.ts:141:19 (i32.const 0) ) - ;;@ assembly/pson.ts:139:2 + ;;@ assembly/pson.ts:142:2 (block $break|0 (loop $continue|0 - ;;@ assembly/pson.ts:139:5 + ;;@ assembly/pson.ts:142:5 (block - ;;@ assembly/pson.ts:140:4 + ;;@ assembly/pson.ts:143:4 (set_local $3 - ;;@ assembly/pson.ts:140:12 + ;;@ assembly/pson.ts:143:12 (i32.load8_u - ;;@ assembly/pson.ts:140:21 + ;;@ assembly/pson.ts:143:21 (block (result i32) (set_local $2 (get_global $assembly/pson/offset) @@ -85,26 +85,26 @@ ) ) ) - ;;@ assembly/pson.ts:141:4 + ;;@ assembly/pson.ts:144:4 (set_local $0 (i32.or (get_local $0) - ;;@ assembly/pson.ts:141:13 + ;;@ assembly/pson.ts:144:13 (i32.shl (i32.and (i32.and - ;;@ assembly/pson.ts:141:19 + ;;@ assembly/pson.ts:144:19 (get_local $3) - ;;@ assembly/pson.ts:141:23 + ;;@ assembly/pson.ts:144:23 (i32.const 127) ) (i32.const 255) ) - ;;@ assembly/pson.ts:141:32 + ;;@ assembly/pson.ts:144:32 (i32.mul - ;;@ assembly/pson.ts:141:33 + ;;@ assembly/pson.ts:144:33 (i32.const 7) - ;;@ assembly/pson.ts:141:37 + ;;@ assembly/pson.ts:144:37 (block (result i32) (set_local $2 (get_local $1) @@ -123,11 +123,11 @@ ) ) (br_if $continue|0 - ;;@ assembly/pson.ts:142:11 + ;;@ assembly/pson.ts:145:11 (i32.and (i32.and (get_local $3) - ;;@ assembly/pson.ts:142:15 + ;;@ assembly/pson.ts:145:15 (i32.const 128) ) (i32.const 255) @@ -135,7 +135,7 @@ ) ) ) - ;;@ assembly/pson.ts:143:9 + ;;@ assembly/pson.ts:146:9 (return (get_local $0) ) @@ -146,26 +146,26 @@ (local $2 i32) (local $3 i32) (local $4 i64) - ;;@ assembly/pson.ts:147:2 + ;;@ assembly/pson.ts:150:2 (set_local $0 - ;;@ assembly/pson.ts:147:19 + ;;@ assembly/pson.ts:150:19 (i64.const 0) ) - ;;@ assembly/pson.ts:148:2 + ;;@ assembly/pson.ts:151:2 (set_local $1 - ;;@ assembly/pson.ts:148:19 + ;;@ assembly/pson.ts:151:19 (i64.const 0) ) - ;;@ assembly/pson.ts:149:2 + ;;@ assembly/pson.ts:152:2 (block $break|0 (loop $continue|0 - ;;@ assembly/pson.ts:149:5 + ;;@ assembly/pson.ts:152:5 (block - ;;@ assembly/pson.ts:150:4 + ;;@ assembly/pson.ts:153:4 (set_local $3 - ;;@ assembly/pson.ts:150:12 + ;;@ assembly/pson.ts:153:12 (i32.load8_u - ;;@ assembly/pson.ts:150:21 + ;;@ assembly/pson.ts:153:21 (block (result i32) (set_local $2 (get_global $assembly/pson/offset) @@ -180,28 +180,28 @@ ) ) ) - ;;@ assembly/pson.ts:151:4 + ;;@ assembly/pson.ts:154:4 (set_local $0 (i64.or (get_local $0) - ;;@ assembly/pson.ts:151:13 + ;;@ assembly/pson.ts:154:13 (i64.shl (i64.extend_u/i32 - ;;@ assembly/pson.ts:151:19 + ;;@ assembly/pson.ts:154:19 (i32.and (i32.and (get_local $3) - ;;@ assembly/pson.ts:151:23 + ;;@ assembly/pson.ts:154:23 (i32.const 127) ) (i32.const 255) ) ) - ;;@ assembly/pson.ts:151:32 + ;;@ assembly/pson.ts:154:32 (i64.mul - ;;@ assembly/pson.ts:151:33 + ;;@ assembly/pson.ts:154:33 (i64.const 7) - ;;@ assembly/pson.ts:151:37 + ;;@ assembly/pson.ts:154:37 (block (result i64) (set_local $4 (get_local $1) @@ -220,11 +220,11 @@ ) ) (br_if $continue|0 - ;;@ assembly/pson.ts:152:11 + ;;@ assembly/pson.ts:155:11 (i32.and (i32.and (get_local $3) - ;;@ assembly/pson.ts:152:15 + ;;@ assembly/pson.ts:155:15 (i32.const 128) ) (i32.const 255) @@ -232,7 +232,7 @@ ) ) ) - ;;@ assembly/pson.ts:153:9 + ;;@ assembly/pson.ts:156:9 (return (get_local $0) ) @@ -242,11 +242,11 @@ (local $1 i32) (local $2 i32) (local $3 i64) - ;;@ assembly/pson.ts:49:2 + ;;@ assembly/pson.ts:50:2 (set_local $1 - ;;@ assembly/pson.ts:49:19 + ;;@ assembly/pson.ts:50:19 (i32.load8_u - ;;@ assembly/pson.ts:49:28 + ;;@ assembly/pson.ts:50:28 (block (result i32) (set_local $0 (get_global $assembly/pson/offset) @@ -261,11 +261,11 @@ ) ) ) - ;;@ assembly/pson.ts:50:2 - (nop) ;;@ assembly/pson.ts:51:2 (nop) ;;@ assembly/pson.ts:52:2 + (nop) + ;;@ assembly/pson.ts:53:2 (block $break|0 (block $case16|0 (block $case15|0 @@ -285,166 +285,166 @@ (block $case1|0 (block $case0|0 (set_local $0 - ;;@ assembly/pson.ts:52:10 + ;;@ assembly/pson.ts:53:10 (get_local $1) ) (br_if $case0|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:54:9 + ;;@ assembly/pson.ts:55:9 (i32.const 240) ) ) (br_if $case1|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:58:9 + ;;@ assembly/pson.ts:59:9 (i32.const 241) ) ) (br_if $case2|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:62:9 + ;;@ assembly/pson.ts:63:9 (i32.const 242) ) ) (br_if $case3|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:66:9 + ;;@ assembly/pson.ts:67:9 (i32.const 243) ) ) (br_if $case4|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:70:9 + ;;@ assembly/pson.ts:71:9 (i32.const 244) ) ) (br_if $case5|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:74:9 + ;;@ assembly/pson.ts:75:9 (i32.const 245) ) ) (br_if $case6|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:78:9 + ;;@ assembly/pson.ts:79:9 (i32.const 246) ) ) (br_if $case7|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:86:9 + ;;@ assembly/pson.ts:87:9 (i32.const 247) ) ) (br_if $case8|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:92:9 + ;;@ assembly/pson.ts:94:9 (i32.const 248) ) ) (br_if $case9|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:96:9 + ;;@ assembly/pson.ts:98:9 (i32.const 249) ) ) (br_if $case10|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:101:9 + ;;@ assembly/pson.ts:103:9 (i32.const 250) ) ) (br_if $case11|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:106:9 + ;;@ assembly/pson.ts:108:9 (i32.const 251) ) ) (br_if $case12|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:111:9 + ;;@ assembly/pson.ts:113:9 (i32.const 252) ) ) (br_if $case13|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:117:9 + ;;@ assembly/pson.ts:119:9 (i32.const 253) ) ) (br_if $case14|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:118:9 + ;;@ assembly/pson.ts:120:9 (i32.const 254) ) ) (br_if $case15|0 (i32.eq (get_local $0) - ;;@ assembly/pson.ts:122:9 + ;;@ assembly/pson.ts:124:9 (i32.const 255) ) ) (br $case16|0) ) - ;;@ assembly/pson.ts:55:11 + ;;@ assembly/pson.ts:56:11 (call $assembly/pson/pson.onNull) - ;;@ assembly/pson.ts:56:6 + ;;@ assembly/pson.ts:57:6 (br $break|0) ) - ;;@ assembly/pson.ts:59:11 + ;;@ assembly/pson.ts:60:11 (call $assembly/pson/pson.onTrue) - ;;@ assembly/pson.ts:60:6 + ;;@ assembly/pson.ts:61:6 (br $break|0) ) - ;;@ assembly/pson.ts:63:11 + ;;@ assembly/pson.ts:64:11 (call $assembly/pson/pson.onFalse) - ;;@ assembly/pson.ts:64:6 + ;;@ assembly/pson.ts:65:6 (br $break|0) ) - ;;@ assembly/pson.ts:67:11 + ;;@ assembly/pson.ts:68:11 (call $assembly/pson/pson.onEObject) - ;;@ assembly/pson.ts:68:6 + ;;@ assembly/pson.ts:69:6 (br $break|0) ) - ;;@ assembly/pson.ts:71:11 + ;;@ assembly/pson.ts:72:11 (call $assembly/pson/pson.onEArray) - ;;@ assembly/pson.ts:72:6 + ;;@ assembly/pson.ts:73:6 (br $break|0) ) - ;;@ assembly/pson.ts:75:11 + ;;@ assembly/pson.ts:76:11 (call $assembly/pson/pson.onEString) - ;;@ assembly/pson.ts:76:6 + ;;@ assembly/pson.ts:77:6 (br $break|0) ) - ;;@ assembly/pson.ts:79:11 + ;;@ assembly/pson.ts:80:11 (call $assembly/pson/pson.onObject - ;;@ assembly/pson.ts:79:20 + ;;@ assembly/pson.ts:80:20 (tee_local $2 - ;;@ assembly/pson.ts:79:27 + ;;@ assembly/pson.ts:80:27 (call $assembly/pson/readVarint32) ) ) - ;;@ assembly/pson.ts:80:6 + ;;@ assembly/pson.ts:81:6 (block $break|1 (loop $continue|1 (if - ;;@ assembly/pson.ts:80:13 + ;;@ assembly/pson.ts:81:13 (block (result i32) (set_local $0 (get_local $2) @@ -459,32 +459,32 @@ ) (block (block - ;;@ assembly/pson.ts:81:8 - (call $assembly/pson/decodeValue) ;;@ assembly/pson.ts:82:8 (call $assembly/pson/decodeValue) + ;;@ assembly/pson.ts:83:8 + (call $assembly/pson/decodeValue) ) (br $continue|1) ) ) ) ) - ;;@ assembly/pson.ts:84:6 + ;;@ assembly/pson.ts:85:6 (br $break|0) ) - ;;@ assembly/pson.ts:87:11 + ;;@ assembly/pson.ts:88:11 (call $assembly/pson/pson.onArray - ;;@ assembly/pson.ts:87:19 + ;;@ assembly/pson.ts:88:19 (tee_local $2 - ;;@ assembly/pson.ts:87:26 + ;;@ assembly/pson.ts:88:26 (call $assembly/pson/readVarint32) ) ) - ;;@ assembly/pson.ts:88:6 + ;;@ assembly/pson.ts:89:6 (block $break|2 (loop $continue|2 (if - ;;@ assembly/pson.ts:88:13 + ;;@ assembly/pson.ts:89:13 (block (result i32) (set_local $0 (get_local $2) @@ -498,213 +498,215 @@ (get_local $0) ) (block - ;;@ assembly/pson.ts:89:8 - (call $assembly/pson/decodeValue) + (block + ;;@ assembly/pson.ts:90:8 + (call $assembly/pson/decodeValue) + ) (br $continue|2) ) ) ) ) - ;;@ assembly/pson.ts:90:6 + ;;@ assembly/pson.ts:92:6 (br $break|0) ) - ;;@ assembly/pson.ts:93:11 + ;;@ assembly/pson.ts:95:11 (call $assembly/pson/pson.onInteger - ;;@ assembly/pson.ts:93:21 + ;;@ assembly/pson.ts:95:21 (i32.xor (i32.shr_u - ;;@ assembly/pson.ts:93:22 + ;;@ assembly/pson.ts:95:22 (tee_local $2 - ;;@ assembly/pson.ts:93:30 + ;;@ assembly/pson.ts:95:30 (call $assembly/pson/readVarint32) ) - ;;@ assembly/pson.ts:93:49 + ;;@ assembly/pson.ts:95:49 (i32.const 1) ) - ;;@ assembly/pson.ts:93:54 + ;;@ assembly/pson.ts:95:54 (i32.sub (i32.const 0) - ;;@ assembly/pson.ts:93:55 + ;;@ assembly/pson.ts:95:55 (i32.and - ;;@ assembly/pson.ts:93:56 + ;;@ assembly/pson.ts:95:56 (get_local $2) - ;;@ assembly/pson.ts:93:63 + ;;@ assembly/pson.ts:95:63 (i32.const 1) ) ) ) ) - ;;@ assembly/pson.ts:94:6 + ;;@ assembly/pson.ts:96:6 (br $break|0) ) - ;;@ assembly/pson.ts:97:6 + ;;@ assembly/pson.ts:99:6 (set_local $3 - ;;@ assembly/pson.ts:97:13 + ;;@ assembly/pson.ts:99:13 (i64.xor (i64.shr_u - ;;@ assembly/pson.ts:97:14 + ;;@ assembly/pson.ts:99:14 (tee_local $3 - ;;@ assembly/pson.ts:97:22 + ;;@ assembly/pson.ts:99:22 (call $assembly/pson/readVarint64) ) - ;;@ assembly/pson.ts:97:41 + ;;@ assembly/pson.ts:99:41 (i64.const 1) ) - ;;@ assembly/pson.ts:97:46 + ;;@ assembly/pson.ts:99:46 (i64.sub (i64.const 0) - ;;@ assembly/pson.ts:97:47 + ;;@ assembly/pson.ts:99:47 (i64.and - ;;@ assembly/pson.ts:97:48 + ;;@ assembly/pson.ts:99:48 (get_local $3) - ;;@ assembly/pson.ts:97:55 + ;;@ assembly/pson.ts:99:55 (i64.const 1) ) ) ) ) - ;;@ assembly/pson.ts:98:11 + ;;@ assembly/pson.ts:100:11 (call $assembly/pson/pson.onLong - ;;@ assembly/pson.ts:98:18 + ;;@ assembly/pson.ts:100:18 (i32.wrap/i64 (get_local $3) ) - ;;@ assembly/pson.ts:98:29 + ;;@ assembly/pson.ts:100:29 (i32.wrap/i64 - ;;@ assembly/pson.ts:98:35 + ;;@ assembly/pson.ts:100:35 (i64.shr_u (get_local $3) - ;;@ assembly/pson.ts:98:44 + ;;@ assembly/pson.ts:100:44 (i64.const 32) ) ) ) - ;;@ assembly/pson.ts:99:6 + ;;@ assembly/pson.ts:101:6 (br $break|0) ) - ;;@ assembly/pson.ts:102:11 + ;;@ assembly/pson.ts:104:11 (call $assembly/pson/pson.onFloat - ;;@ assembly/pson.ts:102:19 + ;;@ assembly/pson.ts:104:19 (f32.load - ;;@ assembly/pson.ts:102:29 + ;;@ assembly/pson.ts:104:29 (get_global $assembly/pson/offset) ) ) - ;;@ assembly/pson.ts:103:6 + ;;@ assembly/pson.ts:105:6 (set_global $assembly/pson/offset (i32.add (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:103:16 + ;;@ assembly/pson.ts:105:16 (i32.const 4) ) ) - ;;@ assembly/pson.ts:104:6 + ;;@ assembly/pson.ts:106:6 (br $break|0) ) - ;;@ assembly/pson.ts:107:11 + ;;@ assembly/pson.ts:109:11 (call $assembly/pson/pson.onDouble - ;;@ assembly/pson.ts:107:20 + ;;@ assembly/pson.ts:109:20 (f64.load - ;;@ assembly/pson.ts:107:30 + ;;@ assembly/pson.ts:109:30 (get_global $assembly/pson/offset) ) ) - ;;@ assembly/pson.ts:108:6 + ;;@ assembly/pson.ts:110:6 (set_global $assembly/pson/offset (i32.add (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:108:16 + ;;@ assembly/pson.ts:110:16 (i32.const 8) ) ) - ;;@ assembly/pson.ts:109:6 + ;;@ assembly/pson.ts:111:6 (br $break|0) ) - ;;@ assembly/pson.ts:112:6 + ;;@ assembly/pson.ts:114:6 (set_local $2 - ;;@ assembly/pson.ts:112:13 + ;;@ assembly/pson.ts:114:13 (call $assembly/pson/readVarint32) ) - ;;@ assembly/pson.ts:113:11 + ;;@ assembly/pson.ts:115:11 (call $assembly/pson/pson.onString - ;;@ assembly/pson.ts:113:20 + ;;@ assembly/pson.ts:115:20 (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:113:28 + ;;@ assembly/pson.ts:115:28 (get_local $2) ) - ;;@ assembly/pson.ts:114:6 + ;;@ assembly/pson.ts:116:6 (set_global $assembly/pson/offset (i32.add (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:114:16 + ;;@ assembly/pson.ts:116:16 (get_local $2) ) ) - ;;@ assembly/pson.ts:115:6 + ;;@ assembly/pson.ts:117:6 (br $break|0) ) ) - ;;@ assembly/pson.ts:120:6 + ;;@ assembly/pson.ts:122:6 (unreachable) ) - ;;@ assembly/pson.ts:123:6 + ;;@ assembly/pson.ts:125:6 (set_local $2 - ;;@ assembly/pson.ts:123:13 + ;;@ assembly/pson.ts:125:13 (call $assembly/pson/readVarint32) ) - ;;@ assembly/pson.ts:124:11 + ;;@ assembly/pson.ts:126:11 (call $assembly/pson/pson.onBinary - ;;@ assembly/pson.ts:124:20 + ;;@ assembly/pson.ts:126:20 (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:124:28 + ;;@ assembly/pson.ts:126:28 (get_local $2) ) - ;;@ assembly/pson.ts:125:6 + ;;@ assembly/pson.ts:127:6 (set_global $assembly/pson/offset (i32.add (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:125:16 + ;;@ assembly/pson.ts:127:16 (get_local $2) ) ) - ;;@ assembly/pson.ts:126:6 + ;;@ assembly/pson.ts:128:6 (br $break|0) ) - ;;@ assembly/pson.ts:129:6 + ;;@ assembly/pson.ts:131:6 (if - ;;@ assembly/pson.ts:129:10 + ;;@ assembly/pson.ts:131:10 (i32.gt_u (get_local $1) - ;;@ assembly/pson.ts:129:18 + ;;@ assembly/pson.ts:131:18 (i32.const 239) ) - ;;@ assembly/pson.ts:130:8 + ;;@ assembly/pson.ts:132:8 (unreachable) ) - ;;@ assembly/pson.ts:131:11 + ;;@ assembly/pson.ts:134:11 (call $assembly/pson/pson.onInteger - ;;@ assembly/pson.ts:131:21 + ;;@ assembly/pson.ts:134:21 (i32.xor (i32.shr_u - ;;@ assembly/pson.ts:131:22 + ;;@ assembly/pson.ts:134:22 (get_local $1) - ;;@ assembly/pson.ts:131:31 + ;;@ assembly/pson.ts:134:31 (i32.const 1) ) - ;;@ assembly/pson.ts:131:36 + ;;@ assembly/pson.ts:134:36 (i32.sub (i32.const 0) - ;;@ assembly/pson.ts:131:37 + ;;@ assembly/pson.ts:134:37 (i32.and - ;;@ assembly/pson.ts:131:38 + ;;@ assembly/pson.ts:134:38 (get_local $1) - ;;@ assembly/pson.ts:131:46 + ;;@ assembly/pson.ts:134:46 (i32.const 1) ) ) ) ) - ;;@ assembly/pson.ts:132:6 + ;;@ assembly/pson.ts:135:6 (br $break|0) ) ) @@ -725,20 +727,22 @@ (get_local $0) ) (block - ;;@ assembly/pson.ts:44:4 - (call $assembly/pson/decodeValue) + (block + ;;@ assembly/pson.ts:44:4 + (call $assembly/pson/decodeValue) + ) (br $continue|0) ) ) ) ) - ;;@ assembly/pson.ts:45:2 + ;;@ assembly/pson.ts:46:2 (if (i32.eqz - ;;@ assembly/pson.ts:45:9 + ;;@ assembly/pson.ts:46:9 (i32.eq (get_global $assembly/pson/offset) - ;;@ assembly/pson.ts:45:19 + ;;@ assembly/pson.ts:46:19 (get_local $0) ) ) @@ -746,7 +750,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 45) + (i32.const 46) (i32.const 2) ) (unreachable) diff --git a/examples/ugc/assembly/ugc.ts b/examples/ugc/assembly/ugc.ts index a98bb752..9f93358d 100644 --- a/examples/ugc/assembly/ugc.ts +++ b/examples/ugc/assembly/ugc.ts @@ -214,18 +214,22 @@ class Control { * garbage for the next cycle. */ collect(): void { - if (this.state == IDLE) + if (this.state == IDLE) { this.step(); - while (this.state != IDLE) + } + while (this.state != IDLE) { this.step(); + } } /** Informs the GC of a referred object during the mark phase. */ visit(obj: ObjectHeader): void { - if (this.state == SWEEP) + if (this.state == SWEEP) { return; - if (obj.color == this.white) + } + if (obj.color == this.white) { this.makeGray(obj); + } } makeGray(obj: ObjectHeader): void { diff --git a/package-lock.json b/package-lock.json index e03d6ec2..4d7f9ee4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,35 +11,27 @@ "dev": true }, "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.0.tgz", + "integrity": "sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g==", "dev": true }, "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } + "acorn": "5.5.0" } }, "ajv": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.1.1.tgz", - "integrity": "sha1-l41Zf7wrfQ5aXD3esUmmgvKr+g4=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.0.tgz", + "integrity": "sha1-r6wpW7qgFSRJ5SJ0LkVHwa6TKNI=", "dev": true, "requires": { - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -50,16 +42,11 @@ "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "dev": true }, "ansi-regex": { "version": "2.1.1", @@ -76,15 +63,21 @@ } }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "2.3.11", + "micromatch": "3.1.9", "normalize-path": "2.1.1" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -94,14 +87,17 @@ "sprintf-js": "1.0.3" } }, + "argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true + }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", @@ -115,10 +111,31 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "arrify": { @@ -126,10 +143,16 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { "bn.js": "4.11.8", @@ -146,20 +169,29 @@ "util": "0.10.3" } }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", + "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", + "dev": true + }, "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true }, "async-each": { "version": "1.0.1", @@ -167,12 +199,30 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "atob": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", "dev": true }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -254,18 +304,120 @@ "trim-right": "1.0.1" } }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, "babel-helper-evaluate-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.3.0.tgz", "integrity": "sha512-dRFlMTqUJRGzx5a2smKxmptDdNCXKSkPcXWzKLwAV72hvIZumrd/0z9RcewHkr7PmAEq+ETtpD1GK6wZ6ZUXzw==", "dev": true }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-flip-expressions": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.3.0.tgz", "integrity": "sha512-kNGohWmtAG3b7tN1xocRQ5rsKkH/hpvZsMiGOJ1VwGJKhnwzR5KlB3rvKBaBPl5/IGHcopB2JN+r1SUEX1iMAw==", "dev": true }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", @@ -284,12 +436,60 @@ "integrity": "sha512-nrho5Dg4vl0VUgURVpGpEGiwbst5JX7efIyDHFxmkCx/ocQFnrPt8ze9Kxl6TKjR29bJ7D/XKY1NMlSxOQJRbQ==", "dev": true }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-remove-or-void": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.3.0.tgz", "integrity": "sha512-D68W1M3ibCcbg0ysh3ww4/O0g10X1CXK720oOuR8kpfY7w0yP4tVcpK7zDmI1JecynycTQYAZ1rhLJo9aVtIKQ==", "dev": true }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.3.0.tgz", @@ -326,6 +526,15 @@ "webpack-sources": "1.1.0" } }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, "babel-plugin-minify-builtins": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.3.0.tgz", @@ -421,6 +630,395 @@ "babel-helper-is-void-0": "0.3.0" } }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" + } + }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.3.0.tgz", @@ -445,6 +1043,16 @@ "integrity": "sha512-JtpyTRyF+wF/r7GSxpRbNCrVve5M/aCC8xoGcnFItaPUDqjxKmFYvBzMc9u+g0lgo8NWjuZLc16MYaIwkHKD/A==", "dev": true }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, "babel-plugin-transform-property-literals": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.0.tgz", @@ -454,6 +1062,15 @@ "esutils": "2.0.2" } }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, "babel-plugin-transform-regexp-constructors": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.3.0.tgz", @@ -487,12 +1104,54 @@ "integrity": "sha512-EJyfYeph0CSekwQuwWVwJqy2go/bETkR95iaWQ/HTUis7tkCGNYmXngaFzuIXdmoPXfvmXYCvAXR4/93hqHVjw==", "dev": true }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-plugin-transform-undefined-to-void": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.0.tgz", "integrity": "sha512-AVDVEmp0S9mbF1O8zekWbsOOmqnR08PZah5NRZJqSvJnFgiL0ep4Lwo4EymH8OieJR2QgQdR3q71TNW+wiVn4g==", "dev": true }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, "babel-preset-minify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.3.0.tgz", @@ -524,6 +1183,42 @@ "lodash.isplainobject": "4.0.6" } }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", @@ -628,20 +1323,33 @@ "pascalcase": "0.1.1" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } } } }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", @@ -655,9 +1363,20 @@ "dev": true }, "binaryen": { - "version": "44.0.0-nightly.20180224", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-44.0.0-nightly.20180224.tgz", - "integrity": "sha512-6jkOphlItuzKBRafvIJLjFqfYphDHAFVglX7dQ2vbh4eVKoFGqgN6qCz2A3j45y0p/LhdkvQTpJnBLnCNU3n1g==", + "version": "44.0.0-nightly.20180301", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-44.0.0-nightly.20180301.tgz", + "integrity": "sha512-K2EzL3uim6oTy0oqYCOKkZhxotLKCZ4/yC9HOpmrQ0SktCRLP3A04ZKhUiU5G/ty3uLIq38XAdWenXY2C+IlaQ==" + }, + "binaryextensions": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz", + "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "dev": true }, "bn.js": { @@ -666,6 +1385,15 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", @@ -676,14 +1404,43 @@ } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, "brorand": { @@ -774,7 +1531,7 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.1", + "base64-js": "1.2.3", "ieee754": "1.1.8", "isarray": "1.0.0" } @@ -797,6 +1554,27 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.1", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.2.4", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + } + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -812,31 +1590,19 @@ "to-object-path": "0.3.0", "union-value": "1.0.0", "unset-value": "1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chalk": { "version": "2.3.1", @@ -863,22 +1629,43 @@ } } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", + "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", "dev": true, "requires": { - "anymatch": "1.3.2", + "anymatch": "2.0.0", "async-each": "1.0.1", - "glob-parent": "2.0.0", + "braces": "2.3.1", + "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", - "is-glob": "2.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "readdirp": "2.1.0", + "upath": "1.0.4" } }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "chrome-trace-event": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz", + "integrity": "sha1-kPNohdU0WlBiEzLwcXtZWIPV2YI=", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -961,12 +1748,6 @@ "kind-of": "5.1.0" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", @@ -975,23 +1756,169 @@ } } }, - "cliui": { + "cli-cursor": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" + "restore-cursor": "2.0.0" } }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", + "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "process-nextick-args": "1.0.7", + "through2": "2.0.3" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "codecov": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", + "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", + "dev": true, + "requires": { + "argv": "0.0.2", + "request": "2.81.0", + "urlgrey": "0.4.4" + } + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1015,12 +1942,33 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, "commander": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -1032,6 +1980,17 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -1053,6 +2012,20 @@ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1118,6 +2091,15 @@ "which": "1.3.0" } }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -1134,24 +2116,56 @@ "pbkdf2": "3.0.14", "public-encrypt": "4.0.0", "randombytes": "2.0.6", - "randomfill": "1.0.3" + "randomfill": "1.0.4" } }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dargs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", + "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "es5-ext": "0.10.38" + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } } }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1173,15 +2187,37 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "mimic-response": "1.0.0" } }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", @@ -1192,6 +2228,12 @@ "minimalistic-assert": "1.0.0" } }, + "detect-conflict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", + "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "dev": true + }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", @@ -1217,12 +2259,64 @@ "randombytes": "2.0.6" } }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "dev": true + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz", + "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "dev": true + }, + "ejs": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", + "dev": true + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", @@ -1244,25 +2338,43 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", + "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", "dev": true, "requires": { "graceful-fs": "4.1.11", "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "tapable": "1.0.0" } }, "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "0.0.0" + "prr": "1.0.1" + } + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, + "requires": { + "string-template": "0.2.1", + "xtend": "4.0.1" } }, "error-ex": { @@ -1274,90 +2386,18 @@ "is-arrayish": "0.2.1" } }, - "es5-ext": { - "version": "0.10.38", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", - "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, @@ -1368,13 +2408,12 @@ "dev": true }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "4.2.0" } }, "estraverse": { @@ -1389,16 +2428,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } - }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -1430,13 +2459,102 @@ "strip-eof": "1.0.0" } }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, "expand-range": { @@ -1446,30 +2564,143 @@ "dev": true, "requires": { "fill-range": "2.2.3" + }, + "dependencies": { + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "homedir-polyfill": "1.0.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" } }, "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "is-extglob": "1.0.0" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "fast-json-stable-stringify": { @@ -1478,6 +2709,15 @@ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -1485,16 +2725,37 @@ "dev": true }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.2.0", + "pkg-dir": "2.0.0" } }, "find-up": { @@ -1506,6 +2767,31 @@ "locate-path": "2.0.0" } }, + "first-chunk-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "dev": true, + "requires": { + "readable-stream": "2.3.4" + } + }, + "flow-parser": { + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.66.0.tgz", + "integrity": "sha1-vlg/77ARkqpRZEFdMaYkGzVxiYM=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -1521,6 +2807,23 @@ "for-in": "1.0.2" } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -1530,6 +2833,28 @@ "map-cache": "0.2.2" } }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.4" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1553,6 +2878,42 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gh-got": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", + "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "dev": true, + "requires": { + "got": "7.1.0", + "is-plain-obj": "1.1.0" + } + }, + "github-username": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", + "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", + "dev": true, + "requires": { + "gh-got": "6.0.0" + } + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -1566,6 +2927,33 @@ "path-is-absolute": "1.0.1" } }, + "glob-all": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", + "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", + "dev": true, + "requires": { + "glob": "7.1.2", + "yargs": "1.2.6" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", + "dev": true + }, + "yargs": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", + "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", + "dev": true, + "requires": { + "minimist": "0.1.0" + } + } + } + }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", @@ -1574,15 +2962,95 @@ "requires": { "glob-parent": "2.0.0", "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } } }, "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "dev": true, + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", + "dev": true + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.2", + "which": "1.3.0" } }, "globals": { @@ -1591,12 +3059,92 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.0", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, + "grouped-queue": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", + "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + } + } + }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -1606,12 +3154,33 @@ "ansi-regex": "2.1.1" } }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -1621,14 +3190,6 @@ "get-value": "2.0.6", "has-values": "1.0.0", "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "has-values": { @@ -1641,26 +3202,6 @@ "kind-of": "4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -1691,6 +3232,18 @@ "minimalistic-assert": "1.0.0" } }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -1702,6 +3255,12 @@ "minimalistic-crypto-utils": "1.0.1" } }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -1712,24 +3271,71 @@ "os-tmpdir": "1.0.2" } }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, "hosted-git-info": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", "dev": true }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, "ieee754": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -1750,6 +3356,51 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", @@ -1778,14 +3429,6 @@ "dev": true, "requires": { "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "is-arrayish": { @@ -1825,14 +3468,6 @@ "dev": true, "requires": { "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "is-descriptor": { @@ -1844,14 +3479,6 @@ "is-accessor-descriptor": "1.0.0", "is-data-descriptor": "1.0.0", "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "is-dotfile": { @@ -1876,9 +3503,9 @@ "dev": true }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-finite": { @@ -1891,52 +3518,69 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "2.1.1" } }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { "kind-of": "3.2.2" - } - }, - "is-odd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", - "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", - "dev": true, - "requires": { - "is-number": "3.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "kind-of": "3.2.2" + "is-buffer": "1.1.6" } } } }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -1944,14 +3588,6 @@ "dev": true, "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "is-posix-bracket": { @@ -1966,12 +3602,51 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-scoped": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", + "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", + "dev": true, + "requires": { + "scoped-regex": "1.0.0" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1985,12 +3660,36 @@ "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istextorbinary": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", + "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", "dev": true, "requires": { - "isarray": "1.0.0" + "binaryextensions": "2.1.1", + "editions": "1.3.4", + "textextensions": "2.2.0" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" } }, "js-tokens": { @@ -2009,16 +3708,156 @@ "esprima": "4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jscodeshift": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", + "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", + "dev": true, + "requires": { + "async": "1.5.2", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-register": "6.26.0", + "babylon": "6.18.0", + "colors": "1.1.2", + "flow-parser": "0.66.0", + "lodash": "4.17.4", + "micromatch": "2.3.11", + "node-dir": "0.1.8", + "nomnom": "1.8.1", + "recast": "0.12.9", + "temp": "0.8.3", + "write-file-atomic": "1.3.4" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "recast": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", + "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", + "dev": true, + "requires": { + "ast-types": "0.10.1", + "core-js": "2.5.3", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, "json-schema-traverse": { @@ -2027,27 +3866,68 @@ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "0.1.0" + } + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -2057,6 +3937,224 @@ "invert-kv": "1.0.0" } }, + "listr": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz", + "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "figures": "1.7.0", + "indent-string": "2.1.0", + "is-promise": "2.1.0", + "is-stream": "1.1.0", + "listr-silent-renderer": "1.1.1", + "listr-update-renderer": "0.2.0", + "listr-verbose-renderer": "0.4.1", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "ora": "0.2.3", + "p-map": "1.2.0", + "rxjs": "5.5.6", + "stream-to-observable": "0.1.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz", + "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "elegant-spinner": "1.0.1", + "figures": "1.7.0", + "indent-string": "3.2.0", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "date-fns": "1.29.0", + "figures": "1.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -2067,6 +4165,14 @@ "parse-json": "2.2.0", "pify": "2.3.0", "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "loader-runner": { @@ -2114,17 +4220,63 @@ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", "dev": true }, + "log-symbols": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz", + "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==", + "dev": true, + "requires": { + "chalk": "2.3.1" + } + }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "cli-cursor": "1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", @@ -2134,6 +4286,12 @@ "js-tokens": "3.0.2" } }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", @@ -2144,6 +4302,15 @@ "yallist": "2.1.2" } }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, "make-error": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", @@ -2195,35 +4362,95 @@ "mimic-fn": "1.2.0" } }, + "mem-fs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", + "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", + "dev": true, + "requires": { + "through2": "2.0.3", + "vinyl": "1.2.0", + "vinyl-file": "2.0.0" + }, + "dependencies": { + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "mem-fs-editor": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz", + "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "deep-extend": "0.4.2", + "ejs": "2.5.7", + "glob": "7.1.2", + "globby": "6.1.0", + "mkdirp": "0.5.1", + "multimatch": "2.1.0", + "rimraf": "2.6.2", + "through2": "2.0.3", + "vinyl": "2.1.0" + } + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" + "errno": "0.1.7", + "readable-stream": "2.3.4" } }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" } }, "miller-rabin": { @@ -2236,12 +4463,42 @@ "brorand": "1.1.0" } }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "mimic-response": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", + "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "0.1.1" + } + }, "minimalistic-assert": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", @@ -2267,6 +4524,24 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "1.6.1", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -2303,51 +4578,76 @@ } } }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "nanomatch": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", - "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", "fragment-cache": "0.2.1", - "is-odd": "1.0.0", - "kind-of": "5.1.0", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", "object.pick": "1.3.0", - "regex-not": "1.0.0", + "regex-not": "1.0.2", "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "to-regex": "3.0.2" } }, + "neo-async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", + "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==", + "dev": true + }, + "node-dir": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", + "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=", + "dev": true + }, "node-libs-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", @@ -2368,7 +4668,7 @@ "process": "0.11.10", "punycode": "1.4.1", "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", + "readable-stream": "2.3.4", "stream-browserify": "2.0.1", "stream-http": "2.8.0", "string_decoder": "1.0.3", @@ -2379,6 +4679,41 @@ "vm-browserify": "0.0.4" } }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -2388,7 +4723,7 @@ "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { @@ -2415,6 +4750,12 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2477,6 +4818,15 @@ "dev": true } } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -2487,14 +4837,6 @@ "dev": true, "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "object.omit": { @@ -2514,14 +4856,6 @@ "dev": true, "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "once": { @@ -2532,6 +4866,79 @@ "wrappy": "1.0.2" } }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -2555,18 +4962,45 @@ "mem": "1.1.0" } }, + "os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", + "dev": true + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "1.0.0" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, + "p-lazy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", + "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=", + "dev": true + }, "p-limit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", @@ -2585,6 +5019,27 @@ "p-limit": "1.2.0" } }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "1.0.0" + } + }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -2597,13 +5052,24 @@ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, "parse-asn1": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { - "asn1.js": "4.9.2", + "asn1.js": "4.10.1", "browserify-aes": "1.1.1", "create-hash": "1.1.3", "evp_bytestokey": "1.0.3", @@ -2620,6 +5086,23 @@ "is-dotfile": "1.0.3", "is-extglob": "1.0.0", "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } } }, "parse-json": { @@ -2631,6 +5114,12 @@ "error-ex": "1.3.1" } }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -2643,6 +5132,12 @@ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -2673,6 +5168,14 @@ "dev": true, "requires": { "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "pbkdf2": { @@ -2688,24 +5191,72 @@ "sha.js": "2.4.10" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", "dev": true }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.1.tgz", + "integrity": "sha512-T/KD65Ot0PB97xTrG8afQ46x3oiVhnfGjGESSI9NWYcG92+OUPZKkwHqGWXH2t9jK1crnQjubECW0FuOth+hxw==", + "dev": true + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -2719,15 +5270,21 @@ "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, "pseudomap": { @@ -2749,12 +5306,39 @@ "randombytes": "2.0.6" } }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "dev": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -2777,26 +5361,6 @@ "kind-of": "4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -2818,15 +5382,25 @@ } }, "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { "randombytes": "2.0.6", "safe-buffer": "5.1.1" } }, + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "dev": true, + "requires": { + "pify": "3.0.0", + "safe-buffer": "5.1.1" + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -2849,15 +5423,15 @@ } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", + "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", - "process-nextick-args": "1.0.7", + "process-nextick-args": "2.0.0", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" @@ -2871,16 +5445,68 @@ "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", - "readable-stream": "2.3.3", + "readable-stream": "2.3.4", "set-immediate-shim": "1.0.1" } }, + "recast": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.13.2.tgz", + "integrity": "sha512-Xqo0mKljGUWGUhnkdbODk7oJGFrMcpgKQ9cCyZ4y+G9VfoTKdum8nHbf/SxIdKx5aBSZ29VpVy20bTyt7jyC8w==", + "dev": true, + "requires": { + "ast-types": "0.10.2", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + }, + "dependencies": { + "ast-types": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.2.tgz", + "integrity": "sha512-ufWX953VU1eIuWqxS0nRDMYlGyFH+yxln5CsmIHlpzEt3fdYqUnRtsFt0XAsQot8OaVCwFqxT1RiwvtzYjeYeg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.5.0" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", @@ -2891,12 +5517,47 @@ } }, "regex-not": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", - "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } } }, "remove-trailing-separator": { @@ -2926,6 +5587,42 @@ "is-finite": "1.0.2" } }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2947,19 +5644,60 @@ "path-parse": "1.0.5" } }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "align-text": "0.1.4" + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" } }, "ripemd160": { @@ -2972,18 +5710,97 @@ "inherits": "2.0.3" } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "rxjs": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.2.0", + "ajv-keywords": "3.1.0" + } + }, + "scoped-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", + "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=", + "dev": true + }, "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", "dev": true }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -3015,6 +5832,17 @@ "is-extendable": "0.1.1", "is-plain-object": "2.0.4", "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, "setimmediate": { @@ -3048,6 +5876,17 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -3060,6 +5899,18 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, "snapdragon": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", @@ -3085,6 +5936,15 @@ "is-descriptor": "0.1.6" } }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -3155,11 +6015,14 @@ "snapdragon-util": "3.0.1" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } } } }, @@ -3170,6 +6033,26 @@ "dev": true, "requires": { "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" } }, "source-list-map": { @@ -3218,25 +6101,46 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "concat-stream": "1.6.1", + "os-shim": "0.1.3" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, "split-string": { @@ -3246,27 +6150,6 @@ "dev": true, "requires": { "extend-shallow": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } } }, "sprintf-js": { @@ -3275,6 +6158,39 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "ssri": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.2.4.tgz", + "integrity": "sha512-UnEAgMZa15973iH7cUi0AHjJn1ACDIkaMyZILoqwN6yzt+4P81I8tBc5Hl+qwi5auMplZtPQsHrPBR5vJLcQtQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -3360,7 +6276,17 @@ "dev": true, "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3" + "readable-stream": "2.3.4" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" } }, "stream-http": { @@ -3371,11 +6297,29 @@ "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.4", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" } }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "stream-to-observable": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz", + "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=", + "dev": true + }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -3392,12 +6336,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3418,6 +6356,12 @@ "safe-buffer": "5.1.1" } }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -3433,6 +6377,27 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-bom-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", + "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", + "dev": true, + "requires": { + "first-chunk-stream": "2.0.0", + "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -3448,10 +6413,68 @@ "has-flag": "2.0.0" } }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "textextensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz", + "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, "timers-browserify": { @@ -3463,6 +6486,15 @@ "setimmediate": "1.0.5" } }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -3482,85 +6514,29 @@ "dev": true, "requires": { "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -3571,17 +6547,15 @@ "requires": { "is-number": "3.0.0", "repeat-string": "1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" } }, "trim-right": { @@ -3591,221 +6565,22 @@ "dev": true }, "ts-loader": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-3.5.0.tgz", - "integrity": "sha512-JTia3kObhTk36wPFgy0RnkZReiusYx7Le9IhcUWRrCTcFcr6Dy1zGsFd3x8DG4gevlbN65knI8W50FfoykXcng==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-4.0.0.tgz", + "integrity": "sha512-iissbnuJkqbB3YAmnWyEbmdNcGcoiiXopKHKyqdoCrFQVi9pnplXeveQDXJnQOCYNNcb2pjT2zzSYTX6c9QtAA==", "dev": true, "requires": { "chalk": "2.3.1", - "enhanced-resolve": "3.4.1", + "enhanced-resolve": "4.0.0", "loader-utils": "1.1.0", - "micromatch": "3.1.5", + "micromatch": "3.1.9", "semver": "5.4.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", - "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.1", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz", - "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.0", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.7", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - } - } } }, "ts-node": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.0.tgz", - "integrity": "sha512-mlSim/sQS1s5iT3KZEKXRaqsGC7xM2QoxkrhfznZJyou18dl47PTnY7/KMmbGqiVoQrO9Hk53CYpcychF5TNrQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", + "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", "requires": { "arrify": "1.0.1", "chalk": "2.3.1", @@ -3858,55 +6633,82 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "typescript": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", "dev": true }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "commander": "2.13.0", + "source-map": "0.6.1" }, "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz", + "integrity": "sha512-CG/NvzXfemUAm5Y4Guh5eEaJYHtkG7kKNpXEJHp9QpxsFVB5/qKvYWoMaq4sa99ccZ0hM3MK8vQV9XPZB4357A==", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.5", + "serialize-javascript": "1.4.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.1.0", + "worker-farm": "1.5.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -3919,6 +6721,15 @@ "set-value": "0.4.3" }, "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, "set-value": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", @@ -3933,6 +6744,24 @@ } } }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -3970,15 +6799,24 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "upath": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "dev": true + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -4003,6 +6841,27 @@ } } }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "urlgrey": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", + "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "dev": true + }, "use": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", @@ -4074,26 +6933,11 @@ "kind-of": "5.1.0" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "0.1.0" - } } } }, @@ -4120,14 +6964,119 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "v8-compile-cache": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==", + "dev": true + }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "2.1.1", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.0.0", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + }, + "vinyl-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", + "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0", + "strip-bom-stream": "2.0.0", + "vinyl": "1.2.0" + }, + "dependencies": { + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } } }, "vm-browserify": { @@ -4140,44 +7089,353 @@ } }, "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", "dev": true, "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" + "chokidar": "2.0.2", + "graceful-fs": "4.1.11", + "neo-async": "2.5.0" } }, "webpack": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", - "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.0.1.tgz", + "integrity": "sha512-jHQNMmKPElreOYLCxR7SHfPnbhcqRT9O7lYPOMDR6Gt5XueJ7tH7JReXm4uMFstBKf7rj2Y7AD3LiMKR2zexYA==", "dev": true, "requires": { - "acorn": "5.4.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "6.1.1", + "acorn": "5.5.0", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.2.0", "ajv-keywords": "3.1.0", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", + "chrome-trace-event": "0.1.2", + "enhanced-resolve": "4.0.0", + "eslint-scope": "3.7.1", "loader-runner": "2.3.0", "loader-utils": "1.1.0", "memory-fs": "0.4.1", + "micromatch": "3.1.9", "mkdirp": "0.5.1", + "neo-async": "2.5.0", "node-libs-browser": "2.1.0", - "source-map": "0.5.7", + "schema-utils": "0.4.5", + "tapable": "1.0.0", + "uglifyjs-webpack-plugin": "1.2.2", + "watchpack": "1.5.0", + "webpack-sources": "1.1.0" + } + }, + "webpack-addons": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.5.tgz", + "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", + "dev": true, + "requires": { + "jscodeshift": "0.4.1" + } + }, + "webpack-cli": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.9.tgz", + "integrity": "sha512-KIkOFHhrq8W7ovg5u8M7Xbduzr1aQ1Ch1aGGY0TvL5neO81T6/aCZ/NeG7R92UaXIF/BK4KCkla35wtoOoxyDQ==", + "dev": true, + "requires": { + "chalk": "2.3.1", + "codecov": "3.0.0", + "cross-spawn": "5.1.0", + "diff": "3.4.0", + "enhanced-resolve": "3.4.1", + "glob-all": "3.1.0", + "global": "4.3.2", + "global-modules": "1.0.0", + "got": "7.1.0", + "inquirer": "3.3.0", + "interpret": "1.1.0", + "jscodeshift": "0.4.1", + "listr": "0.12.0", + "loader-utils": "1.1.0", + "lodash": "4.17.4", + "log-symbols": "2.1.0", + "mkdirp": "0.5.1", + "p-each-series": "1.0.0", + "p-lazy": "1.0.0", + "prettier": "1.11.1", + "recast": "0.13.2", + "resolve-cwd": "2.0.0", "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" + "uglifyjs-webpack-plugin": "1.2.2", + "v8-compile-cache": "1.1.2", + "webpack-addons": "1.1.5", + "webpack-fork-yeoman-generator": "1.1.1", + "yargs": "9.0.1", + "yeoman-environment": "2.0.5" + }, + "dependencies": { + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + } + } + }, + "webpack-fork-yeoman-generator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/webpack-fork-yeoman-generator/-/webpack-fork-yeoman-generator-1.1.1.tgz", + "integrity": "sha512-TrLT6Bw6gl9rJA7iZw+YJ+4xHhEUzfOQB3tHpyINBFdZDmO0tlDW9MtMSMZ5rsUNjHxcEba5yuGaAW86J84j/w==", + "dev": true, + "requires": { + "async": "2.6.0", + "chalk": "1.1.3", + "cli-table": "0.3.1", + "cross-spawn": "5.1.0", + "dargs": "5.1.0", + "dateformat": "2.2.0", + "debug": "2.6.9", + "detect-conflict": "1.0.1", + "error": "7.0.2", + "find-up": "2.1.0", + "github-username": "4.1.0", + "istextorbinary": "2.2.1", + "lodash": "4.17.4", + "mem-fs-editor": "3.0.2", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "pretty-bytes": "4.0.2", + "read-chunk": "2.1.0", + "read-pkg-up": "2.0.0", + "rimraf": "2.6.2", + "run-async": "2.3.0", + "shelljs": "0.7.8", + "text-table": "0.2.0", + "through2": "2.0.3", + "yeoman-environment": "1.6.6" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "diff": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", + "dev": true + }, + "external-editor": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", + "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", + "dev": true, + "requires": { + "extend": "3.0.1", + "spawn-sync": "1.0.15", + "tmp": "0.0.29" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "globby": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", + "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "6.0.4", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "inquirer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", + "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "external-editor": "1.1.1", + "figures": "1.7.0", + "lodash": "4.17.4", + "mute-stream": "0.0.6", + "pinkie-promise": "2.0.1", + "run-async": "2.3.0", + "rx": "4.1.0", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "mute-stream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "dev": true + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tmp": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", + "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "yeoman-environment": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-1.6.6.tgz", + "integrity": "sha1-zYX6Z9FWBg5EDXgH1+988NLR1nE=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "debug": "2.6.9", + "diff": "2.2.3", + "escape-string-regexp": "1.0.5", + "globby": "4.1.0", + "grouped-queue": "0.3.3", + "inquirer": "1.2.3", + "lodash": "4.17.4", + "log-symbols": "1.0.2", + "mem-fs": "1.1.3", + "text-table": "0.2.0", + "untildify": "2.1.0" + } + } } }, "webpack-sources": { @@ -4213,17 +7471,15 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true + "worker-farm": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.4.tgz", + "integrity": "sha512-ITyClEvcfv0ozqJl1vmWFWhvI+OIrkbInYqkEPE50wFPXj8J9Gd3FYf8+CkZJXJJsQBYe+2DvmoK9Zhx5w8W+w==", + "dev": true, + "requires": { + "errno": "0.1.7", + "xtend": "4.0.1" + } }, "wrap-ansi": { "version": "2.1.0", @@ -4235,6 +7491,15 @@ "strip-ansi": "3.0.1" }, "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -4253,6 +7518,17 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -4260,9 +7536,9 @@ "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { @@ -4272,9 +7548,9 @@ "dev": true }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", "dev": true, "requires": { "camelcase": "4.1.0", @@ -4292,35 +7568,11 @@ "yargs-parser": "7.0.0" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } } } }, @@ -4331,12 +7583,42 @@ "dev": true, "requires": { "camelcase": "4.1.0" + } + }, + "yeoman-environment": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.5.tgz", + "integrity": "sha512-6/W7/B54OPHJXob0n0+pmkwFsirC8cokuQkPSmT/D0lCcSxkKtg/BA6ZnjUBIwjuGqmw3DTrT4en++htaUju5g==", + "dev": true, + "requires": { + "chalk": "2.3.1", + "debug": "3.1.0", + "diff": "3.4.0", + "escape-string-regexp": "1.0.5", + "globby": "6.1.0", + "grouped-queue": "0.3.3", + "inquirer": "3.3.0", + "is-scoped": "1.0.0", + "lodash": "4.17.4", + "log-symbols": "2.1.0", + "mem-fs": "1.1.3", + "text-table": "0.2.0", + "untildify": "3.0.2" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "untildify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", + "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=", "dev": true } } diff --git a/package.json b/package.json index bc6ba151..a16a7f55 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,11 @@ "url": "https://github.com/AssemblyScript/assemblyscript/issues" }, "dependencies": { - "binaryen": "44.0.0-nightly.20180224", + "binaryen": "44.0.0-nightly.20180301", "glob": "^7.1.2", "long": "^4.0.0", "minimist": "^1.2.0", - "ts-node": "^5.0.0" + "ts-node": "^5.0.1" }, "devDependencies": { "@types/node": "^9.4.6", @@ -24,10 +24,11 @@ "chalk": "^2.3.1", "diff": "^3.4.0", "source-map-support": "^0.5.3", - "ts-loader": "^3.5.0", + "ts-loader": "^4.0.0", "tslint": "^5.9.1", "typescript": "^2.7.2", - "webpack": "^3.11.0" + "webpack": "^4.0.1", + "webpack-cli": "^2.0.9" }, "main": "index.js", "types": "index.d.ts", diff --git a/scripts/build.js b/scripts/build.js new file mode 100644 index 00000000..245be4fb --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,5 @@ +const webpack = require("webpack"); + +webpack(require("../webpack.config.js"), (err, stats) => { + if (err) throw err; +}); diff --git a/src/builtins.ts b/src/builtins.ts index cbceae05..55cb48af 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -1563,13 +1563,14 @@ export function compileCall( if (offset < 0) { // reported in evaluateConstantOffset return module.createUnreachable(); } + compiler.currentType = typeArguments[0]; return module.createLoad( typeArguments[0].byteSize, typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER), arg0, typeArguments[0].is(TypeFlags.INTEGER) && contextualType.is(TypeFlags.INTEGER) && - contextualType.size >= typeArguments[0].size + contextualType.size > typeArguments[0].size ? (compiler.currentType = contextualType).toNativeType() : (compiler.currentType = typeArguments[0]).toNativeType(), offset @@ -1896,7 +1897,7 @@ export function compileCall( } arg0 = compiler.compileExpression(operands[0], typeArguments[0]); } else { - arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE); + arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32); } type = compiler.currentType; diff --git a/src/compiler.ts b/src/compiler.ts index 17375c6e..33239ebe 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -529,7 +529,7 @@ export class Compiler extends DiagnosticEmitter { var initializeInStart = false; if (global.is(ElementFlags.INLINED)) { - initExpr = this.compileInlineConstant(global, global.type); + initExpr = this.compileInlineConstant(global, global.type, true); } else { if (declaration.initializer) { if (!initExpr) { @@ -1662,11 +1662,20 @@ export class Compiler extends DiagnosticEmitter { // expressions - /** Compiles an inlined constant value of a variable-like element. */ - compileInlineConstant(element: VariableLikeElement, contextualType: Type): ExpressionRef { + /** + * Compiles the value of an inlined constant element. + * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value + * is precomputed according to context. + */ + compileInlineConstant( + element: VariableLikeElement, + contextualType: Type, + retainType: bool + ): ExpressionRef { assert(element.is(ElementFlags.INLINED)); switch ( + !retainType && element.type.is(TypeFlags.INTEGER) && contextualType.is(TypeFlags.INTEGER) && element.type.size < contextualType.size @@ -1773,7 +1782,11 @@ export class Compiler extends DiagnosticEmitter { case NodeKind.NULL: case NodeKind.THIS: case NodeKind.TRUE: - expr = this.compileIdentifierExpression(expression, contextualType); + expr = this.compileIdentifierExpression( + expression, + contextualType, + conversionKind == ConversionKind.NONE // retain type of inlined constants + ); break; case NodeKind.LITERAL: @@ -1789,7 +1802,11 @@ export class Compiler extends DiagnosticEmitter { break; case NodeKind.PROPERTYACCESS: - expr = this.compilePropertyAccessExpression(expression, contextualType); + expr = this.compilePropertyAccessExpression( + expression, + contextualType, + conversionKind == ConversionKind.NONE // retain type of inlined constants + ); break; case NodeKind.TERNARY: @@ -1817,6 +1834,17 @@ export class Compiler extends DiagnosticEmitter { return expr; } + compileExpressionRetainType(expression: Expression, contextualType: Type, wrapSmallIntegers: bool = true) { + return this.compileExpression( + expression, + contextualType == Type.void + ? Type.i32 + : contextualType, + ConversionKind.NONE, + wrapSmallIntegers + ); + } + precomputeExpression( expression: Expression, contextualType: Type, @@ -1877,9 +1905,6 @@ export class Compiler extends DiagnosticEmitter { ); } - var mod = this.module; - var losesInformation = false; - if (fromType.is(TypeFlags.FLOAT)) { // float to float @@ -1888,39 +1913,37 @@ export class Compiler extends DiagnosticEmitter { // f32 to f64 if (toType.kind == TypeKind.F64) { - expr = mod.createUnary(UnaryOp.PromoteF32, expr); + expr = this.module.createUnary(UnaryOp.PromoteF32, expr); } // otherwise f32 to f32 // f64 to f32 } else if (toType.kind == TypeKind.F32) { - losesInformation = true; - expr = mod.createUnary(UnaryOp.DemoteF64, expr); + expr = this.module.createUnary(UnaryOp.DemoteF64, expr); } // otherwise f64 to f64 // float to int } else if (toType.is(TypeFlags.INTEGER)) { - losesInformation = true; // f32 to int if (fromType.kind == TypeKind.F32) { if (toType.is(TypeFlags.SIGNED)) { if (toType.is(TypeFlags.LONG)) { - expr = mod.createUnary(UnaryOp.TruncF32ToI64, expr); + expr = this.module.createUnary(UnaryOp.TruncF32ToI64, expr); } else { - expr = mod.createUnary(UnaryOp.TruncF32ToI32, expr); + expr = this.module.createUnary(UnaryOp.TruncF32ToI32, expr); if (toType.is(TypeFlags.SMALL)) { expr = makeSmallIntegerWrap(expr, toType, this.module); } } } else { if (toType.is(TypeFlags.LONG)) { - expr = mod.createUnary(UnaryOp.TruncF32ToU64, expr); + expr = this.module.createUnary(UnaryOp.TruncF32ToU64, expr); } else { - expr = mod.createUnary(UnaryOp.TruncF32ToU32, expr); + expr = this.module.createUnary(UnaryOp.TruncF32ToU32, expr); if (toType.is(TypeFlags.SMALL)) { expr = makeSmallIntegerWrap(expr, toType, this.module); } @@ -1931,18 +1954,18 @@ export class Compiler extends DiagnosticEmitter { } else { if (toType.is(TypeFlags.SIGNED)) { if (toType.is(TypeFlags.LONG)) { - expr = mod.createUnary(UnaryOp.TruncF64ToI64, expr); + expr = this.module.createUnary(UnaryOp.TruncF64ToI64, expr); } else { - expr = mod.createUnary(UnaryOp.TruncF64ToI32, expr); + expr = this.module.createUnary(UnaryOp.TruncF64ToI32, expr); if (toType.is(TypeFlags.SMALL)) { expr = makeSmallIntegerWrap(expr, toType, this.module); } } } else { if (toType.is(TypeFlags.LONG)) { - expr = mod.createUnary(UnaryOp.TruncF64ToU64, expr); + expr = this.module.createUnary(UnaryOp.TruncF64ToU64, expr); } else { - expr = mod.createUnary(UnaryOp.TruncF64ToU32, expr); + expr = this.module.createUnary(UnaryOp.TruncF64ToU32, expr); if (toType.is(TypeFlags.SMALL)) { expr = makeSmallIntegerWrap(expr, toType, this.module); } @@ -1962,16 +1985,14 @@ export class Compiler extends DiagnosticEmitter { // int to f32 if (toType.kind == TypeKind.F32) { if (fromType.is(TypeFlags.LONG)) { - losesInformation = true; - expr = mod.createUnary( + expr = this.module.createUnary( fromType.is(TypeFlags.SIGNED) ? UnaryOp.ConvertI64ToF32 : UnaryOp.ConvertU64ToF32, expr ); } else { - losesInformation = !fromType.is(TypeFlags.SMALL); - expr = mod.createUnary( + expr = this.module.createUnary( fromType.is(TypeFlags.SIGNED) ? UnaryOp.ConvertI32ToF32 : UnaryOp.ConvertU32ToF32, @@ -1982,15 +2003,14 @@ export class Compiler extends DiagnosticEmitter { // int to f64 } else { if (fromType.is(TypeFlags.LONG)) { - losesInformation = true; - expr = mod.createUnary( + expr = this.module.createUnary( fromType.is(TypeFlags.SIGNED) ? UnaryOp.ConvertI64ToF64 : UnaryOp.ConvertU64ToF64, expr ); } else { - expr = mod.createUnary( + expr = this.module.createUnary( fromType.is(TypeFlags.SIGNED) ? UnaryOp.ConvertI32ToF64 : UnaryOp.ConvertU32ToF64, @@ -2005,8 +2025,7 @@ export class Compiler extends DiagnosticEmitter { // i64 to i32 if (!toType.is(TypeFlags.LONG)) { - losesInformation = true; - expr = mod.createUnary(UnaryOp.WrapI64, expr); // discards upper bits + expr = this.module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits if (toType.is(TypeFlags.SMALL)) { expr = makeSmallIntegerWrap(expr, toType, this.module); } @@ -2014,7 +2033,7 @@ export class Compiler extends DiagnosticEmitter { // i32 to i64 } else if (toType.is(TypeFlags.LONG)) { - expr = mod.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr); + expr = this.module.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr); // i32 or smaller to even smaller or same size int with change of sign } else if ( @@ -2027,26 +2046,16 @@ export class Compiler extends DiagnosticEmitter { ) ) ) { - losesInformation = true; expr = makeSmallIntegerWrap(expr, toType, this.module); } // otherwise (smaller) i32/u32 to (same size) i32/u32 } + this.currentType = toType; return expr; } - /** Computes the common compatible type of two types. Returns `null` if incompatible. */ - computeCommonType(leftType: Type, rightType: Type): Type | null { - if (leftType.isAssignableTo(rightType)) { - return rightType; - } else if (rightType.isAssignableTo(leftType)) { - return leftType; - } - return null; - } - compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef { var toType = this.program.resolveType( // reports expression.toType, @@ -2061,43 +2070,15 @@ export class Compiler extends DiagnosticEmitter { contextualType: Type, wrapSmallIntegers: bool = true ): ExpressionRef { + var left: ExpressionRef; + var leftType: Type; var right: ExpressionRef; - - // TODO: Currently, the common type of any binary expression is the first operand's type. This - // differs from C and other languages where comparing an int to a long, in this order, upcasts - // left to a long before comparison, instead of failing when trying to downcast right to an int. - // NOTE that if we change the current behaviour, some examples, tests and wiki pages will have - // to be updated, while compound binary operations must retain the previous behavior. - - // var left = this.compileExpression( - // expression.left, - // contextualType == Type.void - // ? Type.i32 - // : contextualType, - // ConversionKind.NONE - // ); - // var leftType = this.currentType; - // var right = this.compileExpression( - // expression.right, - // leftType, - // ConversionKind.NONE - // ); - // var rightType = this.currentType; - // var commonType = this.computeCommonType(leftType, rightType); - // if (!commonType) { - // this.error( - // DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, - // expression.range, - // Token.operatorToString(expression.operator), leftType.toString(), rightType.toString() - // ); - // this.currentType = contextualType; - // return this.module.createUnreachable(); - // } + var rightType: Type; + var commonType: Type | null; var condition: ExpressionRef; var expr: ExpressionRef; - var compound = false; var possiblyOverflows = false; var tempLocal: Local | null = null; @@ -2105,16 +2086,23 @@ export class Compiler extends DiagnosticEmitter { switch (expression.operator) { case Token.LESSTHAN: - left = this.compileExpression( - expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE - ); - right = this.compileExpression(expression.right, this.currentType); + left = this.compileExpressionRetainType(expression.left, contextualType); + leftType = this.currentType; + right = this.compileExpressionRetainType(expression.right, leftType); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, true)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "<", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } - switch (this.currentType.kind) { + switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: @@ -2177,16 +2165,23 @@ export class Compiler extends DiagnosticEmitter { break; case Token.GREATERTHAN: - left = this.compileExpression( - expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE - ); - right = this.compileExpression(expression.right, this.currentType); + left = this.compileExpressionRetainType(expression.left, contextualType); + leftType = this.currentType; + right = this.compileExpressionRetainType(expression.right, leftType); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, true)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, ">", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } - switch (this.currentType.kind) { + switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: @@ -2249,16 +2244,23 @@ export class Compiler extends DiagnosticEmitter { break; case Token.LESSTHAN_EQUALS: - left = this.compileExpression( - expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE - ); - right = this.compileExpression(expression.right, this.currentType); + left = this.compileExpressionRetainType(expression.left, contextualType); + leftType = this.currentType; + right = this.compileExpressionRetainType(expression.right, leftType); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, true)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "<=", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } - switch (this.currentType.kind) { + switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: @@ -2321,16 +2323,23 @@ export class Compiler extends DiagnosticEmitter { break; case Token.GREATERTHAN_EQUALS: - left = this.compileExpression( - expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE - ); - right = this.compileExpression(expression.right, this.currentType); + left = this.compileExpressionRetainType(expression.left, contextualType); + leftType = this.currentType; + right = this.compileExpressionRetainType(expression.right, leftType); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, true)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, ">=", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } - switch (this.currentType.kind) { + switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: @@ -2400,16 +2409,23 @@ export class Compiler extends DiagnosticEmitter { // checking for a possible use of unary EQZ. while the most classic of all optimizations, // that's not what the source told us to do. for reference, `!left` emits unary EQZ. - left = this.compileExpression( - expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE - ); - right = this.compileExpression(expression.right, this.currentType); + left = this.compileExpressionRetainType(expression.left, contextualType); + leftType = this.currentType; + right = this.compileExpressionRetainType(expression.right, leftType); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } - switch (this.currentType.kind) { + switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: @@ -2459,16 +2475,23 @@ export class Compiler extends DiagnosticEmitter { case Token.EXCLAMATION_EQUALS_EQUALS: // TODO? case Token.EXCLAMATION_EQUALS: - left = this.compileExpression( - expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE - ); - right = this.compileExpression(expression.right, this.currentType); + left = this.compileExpressionRetainType(expression.left, contextualType); + leftType = this.currentType; + right = this.compileExpressionRetainType(expression.right, leftType); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } - switch (this.currentType.kind) { + switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: @@ -2521,20 +2544,38 @@ export class Compiler extends DiagnosticEmitter { case Token.PLUS_EQUALS: compound = true; case Token.PLUS: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE, + contextualType, false // retains low bits of small integers ); - right = this.compileExpression( - expression.right, - this.currentType, - ConversionKind.IMPLICIT, - false // ^ - ); + if (compound) { + right = this.compileExpression( + expression.right, + this.currentType, + ConversionKind.IMPLICIT, + false // ^ + ); + } else { + leftType = this.currentType; + right = this.compileExpressionRetainType( + expression.right, + leftType, + false // ^ + ); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "+", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } + } switch (this.currentType.kind) { @@ -2582,20 +2623,38 @@ export class Compiler extends DiagnosticEmitter { case Token.MINUS_EQUALS: compound = true; case Token.MINUS: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE, + contextualType, false // retains low bits of small integers ); - right = this.compileExpression( - expression.right, - this.currentType, - ConversionKind.IMPLICIT, - false // ^ - ); + if (compound) { + right = this.compileExpression( + expression.right, + this.currentType, + ConversionKind.IMPLICIT, + false // ^ + ); + } else { + leftType = this.currentType; + right = this.compileExpressionRetainType( + expression.right, + leftType, + false // ^ + ); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "-", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } + } switch (this.currentType.kind) { @@ -2647,20 +2706,38 @@ export class Compiler extends DiagnosticEmitter { case Token.ASTERISK_EQUALS: compound = true; case Token.ASTERISK: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE, + contextualType, false // retains low bits of small integers ); - right = this.compileExpression( - expression.right, - this.currentType, - ConversionKind.IMPLICIT, - false // ^ - ); + if (compound) { + right = this.compileExpression( + expression.right, + this.currentType, + ConversionKind.IMPLICIT, + false // ^ + ); + } else { + leftType = this.currentType; + right = this.compileExpressionRetainType( + expression.right, + leftType, + false // ^ + ); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "*", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } + } switch (this.currentType.kind) { @@ -2713,20 +2790,38 @@ export class Compiler extends DiagnosticEmitter { case Token.SLASH_EQUALS: compound = true; case Token.SLASH: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE, + contextualType, true // TODO: when can division remain unwrapped? does it overflow? ); - right = this.compileExpression( - expression.right, - this.currentType, - ConversionKind.IMPLICIT, - true // ^ - ); + if (compound) { + right = this.compileExpression( + expression.right, + this.currentType, + ConversionKind.IMPLICIT, + false // ^ + ); + } else { + leftType = this.currentType; + right = this.compileExpressionRetainType( + expression.right, + leftType, + false // ^ + ); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "/", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } + } switch (this.currentType.kind) { @@ -2794,20 +2889,38 @@ export class Compiler extends DiagnosticEmitter { case Token.PERCENT_EQUALS: compound = true; case Token.PERCENT: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE, - true // TODO: when can remainder remain unwrapped? may it overflow? - ); - right = this.compileExpression( - expression.right, - this.currentType, - ConversionKind.IMPLICIT, - true // ^ + contextualType, + true // TODO: when can remainder remain unwrapped? does it overflow? ); + if (compound) { + right = this.compileExpression( + expression.right, + this.currentType, + ConversionKind.IMPLICIT, + false // ^ + ); + } else { + leftType = this.currentType; + right = this.compileExpressionRetainType( + expression.right, + leftType, + false // ^ + ); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "%", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } + } switch (this.currentType.kind) { @@ -2875,14 +2988,9 @@ export class Compiler extends DiagnosticEmitter { case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true; case Token.LESSTHAN_LESSTHAN: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType.is(TypeFlags.FLOAT) - ? Type.i64 - : contextualType, - ConversionKind.NONE, + contextualType, false // retains low bits of small integers ); right = this.compileExpression( @@ -2933,14 +3041,9 @@ export class Compiler extends DiagnosticEmitter { case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true; case Token.GREATERTHAN_GREATERTHAN: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType.is(TypeFlags.FLOAT) - ? Type.i64 - : contextualType, - ConversionKind.NONE, + contextualType, true // must wrap small integers ); right = this.compileExpression( @@ -3006,14 +3109,9 @@ export class Compiler extends DiagnosticEmitter { case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true; case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType == Type.void - ? Type.u64 - : contextualType, - ConversionKind.NONE, + contextualType, true // modifies low bits of small integers if unsigned ); right = this.compileExpression( @@ -3063,22 +3161,38 @@ export class Compiler extends DiagnosticEmitter { case Token.AMPERSAND_EQUALS: compound = true; case Token.AMPERSAND: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType.is(TypeFlags.FLOAT) - ? Type.i64 - : contextualType, - ConversionKind.NONE, + contextualType, false // retains low bits of small integers ); - right = this.compileExpression( - expression.right, - this.currentType, - ConversionKind.IMPLICIT, - false // ^ - ); + if (compound) { + right = this.compileExpression( + expression.right, + this.currentType, + ConversionKind.IMPLICIT, + false // ^ + ); + } else { + leftType = this.currentType; + right = this.compileExpressionRetainType( + expression.right, + leftType, + false // ^ + ); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "&", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } + } switch (this.currentType.kind) { @@ -3121,22 +3235,38 @@ export class Compiler extends DiagnosticEmitter { case Token.BAR_EQUALS: compound = true; case Token.BAR: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType.is(TypeFlags.FLOAT) - ? Type.i64 - : contextualType, - ConversionKind.NONE, + contextualType, false // retains low bits of small integers ); - right = this.compileExpression( - expression.right, - this.currentType, - ConversionKind.IMPLICIT, - false // ^ - ); + if (compound) { + right = this.compileExpression( + expression.right, + this.currentType, + ConversionKind.IMPLICIT, + false // ^ + ); + } else { + leftType = this.currentType; + right = this.compileExpressionRetainType( + expression.right, + leftType, + false // ^ + ); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "|", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } + } switch (this.currentType.kind) { @@ -3179,22 +3309,38 @@ export class Compiler extends DiagnosticEmitter { case Token.CARET_EQUALS: compound = true; case Token.CARET: - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType.is(TypeFlags.FLOAT) - ? Type.i64 - : contextualType, - ConversionKind.NONE, + contextualType, false // retains low bits of small integers ); - right = this.compileExpression( - expression.right, - this.currentType, - ConversionKind.IMPLICIT, - false // ^ - ); + if (compound) { + right = this.compileExpression( + expression.right, + this.currentType, + ConversionKind.IMPLICIT, + false // ^ + ); + } else { + leftType = this.currentType; + right = this.compileExpressionRetainType( + expression.right, + leftType, + false // ^ + ); + rightType = this.currentType; + if (commonType = Type.commonCompatible(leftType, rightType, false)) { + left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); + right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + } else { + this.error( + DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, + expression.range, "^", leftType.toString(), rightType.toString() + ); + this.currentType = contextualType; + return this.module.createUnreachable(); + } + } switch (this.currentType.kind) { @@ -3237,12 +3383,9 @@ export class Compiler extends DiagnosticEmitter { // logical (no overloading) case Token.AMPERSAND_AMPERSAND: // left && right - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE + contextualType ); right = this.compileExpression( expression.right, @@ -3286,12 +3429,9 @@ export class Compiler extends DiagnosticEmitter { break; case Token.BAR_BAR: // left || right - left = this.compileExpression( + left = this.compileExpressionRetainType( expression.left, - contextualType == Type.void - ? Type.i32 - : contextualType, - ConversionKind.NONE + contextualType ); right = this.compileExpression( expression.right, @@ -3884,7 +4024,16 @@ export class Compiler extends DiagnosticEmitter { return this.module.createI32(index); } - compileIdentifierExpression(expression: IdentifierExpression, contextualType: Type): ExpressionRef { + /** + * Compiles an identifier in the specified context. + * @param retainConstantType Retains the type of inlined constants if `true`, otherwise + * precomputes them according to context. + */ + compileIdentifierExpression( + expression: IdentifierExpression, + contextualType: Type, + retainConstantType: bool + ): ExpressionRef { // check special keywords first switch (expression.kind) { @@ -3948,7 +4097,7 @@ export class Compiler extends DiagnosticEmitter { case ElementKind.LOCAL: if ((element).is(ElementFlags.INLINED)) { - return this.compileInlineConstant(element, contextualType); + return this.compileInlineConstant(element, contextualType, retainConstantType); } assert((element).index >= 0); this.currentType = (element).type; @@ -3963,7 +4112,7 @@ export class Compiler extends DiagnosticEmitter { } assert((element).type != Type.void); if ((element).is(ElementFlags.INLINED)) { - return this.compileInlineConstant(element, contextualType); + return this.compileInlineConstant(element, contextualType, retainConstantType); } this.currentType = (element).type; return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType()); @@ -4323,7 +4472,16 @@ export class Compiler extends DiagnosticEmitter { return this.compileExpression(expression.expression, contextualType, ConversionKind.NONE); } - compilePropertyAccessExpression(propertyAccess: PropertyAccessExpression, contextualType: Type): ExpressionRef { + /** + * Compiles a property access in the specified context. + * @param retainConstantType Retains the type of inlined constants if `true`, otherwise + * precomputes them according to context. + */ + compilePropertyAccessExpression( + propertyAccess: PropertyAccessExpression, + contextualType: Type, + retainConstantType: bool + ): ExpressionRef { var resolved = this.program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports if (!resolved) return this.module.createUnreachable(); @@ -4340,7 +4498,7 @@ export class Compiler extends DiagnosticEmitter { } assert((element).type != Type.void); if ((element).is(ElementFlags.INLINED)) { - return this.compileInlineConstant(element, contextualType); + return this.compileInlineConstant(element, contextualType, retainConstantType); } this.currentType = (element).type; return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType()); diff --git a/src/types.ts b/src/types.ts index b65fbd15..23bd3fe1 100644 --- a/src/types.ts +++ b/src/types.ts @@ -114,7 +114,7 @@ export class Type { /** Composes a class type from this type and a class. */ asClass(classType: Class): Type { - assert(this.kind == TypeKind.USIZE); + assert(this.kind == TypeKind.USIZE && !this.classType); var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size); ret.classType = classType; return ret; @@ -122,26 +122,26 @@ export class Type { /** Composes a function type from this type and a function. */ asFunction(functionType: Function): Type { - assert(this.kind == TypeKind.U32 && !this.isReference); + assert(this.kind == TypeKind.U32 && !this.functionType); var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size); ret.functionType = functionType; return ret; } /** Composes the respective nullable type of this type. */ - asNullable(): Type | null { - assert(this.kind == TypeKind.USIZE); + asNullable(): Type { + assert(this.isReference); if (!this.nullableType) { - assert(!this.is(TypeFlags.NULLABLE) && this.isReference); + assert(!this.is(TypeFlags.NULLABLE)); this.nullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size); - this.nullableType.classType = this.classType; - this.nullableType.functionType = this.functionType; + this.nullableType.classType = this.classType; // either a class reference + this.nullableType.functionType = this.functionType; // or a function reference } return this.nullableType; } /** Tests if a value of this type is assignable to a target of the specified type. */ - isAssignableTo(target: Type): bool { + isAssignableTo(target: Type, signednessIsImportant: bool = false): bool { var currentClass: Class | null; var targetClass: Class | null; var currentFunction: Function | null; @@ -159,177 +159,35 @@ export class Type { } } } else if (!target.isReference) { - switch (this.kind) { - - case TypeKind.I8: - switch (target.kind) { - case TypeKind.I8: // same - case TypeKind.I16: // larger - case TypeKind.I32: // larger - case TypeKind.I64: // larger - case TypeKind.ISIZE: // larger - case TypeKind.U8: // signed to unsigned - case TypeKind.U16: // larger - case TypeKind.U32: // larger - case TypeKind.U64: // larger - case TypeKind.USIZE: // larger - case TypeKind.F32: // safe - case TypeKind.F64: // safe - return true; + if (this.is(TypeFlags.INTEGER)) { + if (target.is(TypeFlags.INTEGER)) { + if (!signednessIsImportant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)) { + return this.size <= target.size; } - break; - - case TypeKind.I16: - switch (target.kind) { - case TypeKind.I16: // same - case TypeKind.I32: // larger - case TypeKind.I64: // larger - case TypeKind.ISIZE: // larger - case TypeKind.U16: // signed to unsigned - case TypeKind.U32: // larger - case TypeKind.U64: // larger - case TypeKind.USIZE: // larger - case TypeKind.F32: // safe - case TypeKind.F64: // safe - return true; - } - break; - - case TypeKind.I32: - switch (target.kind) { - case TypeKind.I32: // same - case TypeKind.I64: // larger - case TypeKind.ISIZE: // same or larger - case TypeKind.U32: // signed to unsigned - case TypeKind.U64: // larger - case TypeKind.USIZE: // signed to unsigned or larger - case TypeKind.F64: // safe - return true; - } - break; - - case TypeKind.I64: - switch (target.kind) { - case TypeKind.I64: // same - case TypeKind.U64: // signed to unsigned - return true; - case TypeKind.ISIZE: // possibly same - case TypeKind.USIZE: // possibly signed to unsigned - return target.size == 64; - } - break; - - case TypeKind.ISIZE: - switch (target.kind) { - case TypeKind.I32: // possibly same - case TypeKind.U32: // possibly signed to unsigned - return this.size == 32; - case TypeKind.I64: // same or larger - case TypeKind.ISIZE: // same - case TypeKind.U64: // signed to unsigned or larger - case TypeKind.USIZE: // signed to unsigned - return true; - case TypeKind.F64: // possibly safe - return target.size == 32; - } - break; - - case TypeKind.U8: - switch (target.kind) { - case TypeKind.I16: // larger - case TypeKind.I32: // larger - case TypeKind.I64: // larger - case TypeKind.ISIZE: // larger - case TypeKind.U8: // same - case TypeKind.U16: // larger - case TypeKind.U32: // larger - case TypeKind.U64: // larger - case TypeKind.USIZE: // larger - case TypeKind.F32: // safe - case TypeKind.F64: // safe - return true; - } - break; - - case TypeKind.U16: - switch (target.kind) { - case TypeKind.I32: // larger - case TypeKind.I64: // larger - case TypeKind.ISIZE: // larger - case TypeKind.U16: // same - case TypeKind.U32: // larger - case TypeKind.U64: // larger - case TypeKind.USIZE: // larger - case TypeKind.F32: // safe - case TypeKind.F64: // safe - return true; - } - break; - - case TypeKind.U32: - switch (target.kind) { - case TypeKind.I64: // larger - case TypeKind.U32: // same - case TypeKind.U64: // larger - case TypeKind.USIZE: // same or larger - case TypeKind.F64: // safe - return true; - } - break; - - case TypeKind.U64: - switch (target.kind) { - case TypeKind.U64: // same - return true; - case TypeKind.USIZE: // possibly same - return target.size == 64; - } - break; - - case TypeKind.USIZE: - switch (target.kind) { - case TypeKind.U32: // possibly same - return this.size == 32; - case TypeKind.U64: // same or larger - case TypeKind.USIZE: // same - return true; - case TypeKind.F64: // possibly safe - return target.size == 32; - } - break; - - case TypeKind.BOOL: - switch (target.kind) { - case TypeKind.I8: // larger - case TypeKind.I16: // larger - case TypeKind.I32: // larger - case TypeKind.I64: // larger - case TypeKind.ISIZE: // larger - case TypeKind.U8: // larger - case TypeKind.U16: // larger - case TypeKind.U32: // larger - case TypeKind.U64: // larger - case TypeKind.USIZE: // larger - case TypeKind.BOOL: // same - return true; - } - break; - - case TypeKind.F32: - switch (target.kind) { - case TypeKind.F32: // same - case TypeKind.F64: // larger - return true; - } - break; - - case TypeKind.F64: - return target.kind == TypeKind.F64; + } else if (target.kind == TypeKind.F32) { + return this.size <= 23; // mantissa bits + } else if (target.kind == TypeKind.F64) { + return this.size <= 52; // ^ + } + } else if (this.is(TypeFlags.FLOAT)) { + if (target.is(TypeFlags.FLOAT)) { + return this.size <= target.size; + } } } return false; } + /** Determines the common compatible type of two types, if any. */ + static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null { + if (right.isAssignableTo(left, signednessIsImportant)) { + return left; + } else if (left.isAssignableTo(right, signednessIsImportant)) { + return right; + } + return null; + } + /** Converts this type to its TypeScript representation. */ toString(kindOnly: bool = false): string { switch (this.kind) { diff --git a/std/assembly/array.ts b/std/assembly/array.ts index 1322f110..53de9086 100644 --- a/std/assembly/array.ts +++ b/std/assembly/array.ts @@ -41,7 +41,7 @@ export class Array { @operator("[]") private __get(index: i32): T { - if (index >= this.__capacity) { + if (index >= this.__capacity) { throw new Error("Index out of bounds"); // return changetype(0) ? } return load(this.__memory + index * sizeof()); @@ -62,7 +62,7 @@ export class Array { if (fromIndex < 0) { fromIndex = this.__length + fromIndex; } - while (fromIndex < this.__length) { + while (fromIndex < this.__length) { if (load(this.__memory + fromIndex * sizeof()) == searchElement) { return fromIndex; } diff --git a/std/assembly/builtins.ts b/std/assembly/builtins.ts index 3d92f9bd..ecfb8405 100644 --- a/std/assembly/builtins.ts +++ b/std/assembly/builtins.ts @@ -185,8 +185,8 @@ export { usize }; @builtin declare function bool(value: void): bool; namespace bool { - export const MIN_VALUE: bool = 0; - export const MAX_VALUE: bool = 1; + export const MIN_VALUE: bool = false; + export const MAX_VALUE: bool = true; } export { bool }; diff --git a/std/assembly/string.ts b/std/assembly/string.ts index ba33d3c8..689e9b19 100644 --- a/std/assembly/string.ts +++ b/std/assembly/string.ts @@ -13,13 +13,13 @@ function allocate(length: i32): String { export class String { - readonly length: i32; + readonly length: i32; // capped to [0, 0x7fffffff] @operator("[]") charAt(pos: i32): String { assert(this != null); - if (pos >= this.length) { + if (pos >= this.length) { return EMPTY; } @@ -37,7 +37,7 @@ export class String { charCodeAt(pos: i32): i32 { assert(this != null); - if (pos >= this.length) { + if (pos >= this.length) { return -1; // (NaN) } return load( @@ -48,7 +48,7 @@ export class String { codePointAt(pos: i32): i32 { assert(this != null); - if (pos >= this.length) { + if (pos >= this.length) { return -1; // (undefined) } var first = load( diff --git a/tests/allocators/buddy/assembly/buddy.ts b/tests/allocators/buddy/assembly/buddy.ts index 6cbadee8..57bd3a5b 100644 --- a/tests/allocators/buddy/assembly/buddy.ts +++ b/tests/allocators/buddy/assembly/buddy.ts @@ -171,7 +171,7 @@ function update_max_ptr(new_value: usize): i32 { // if (brk(new_value)) { // return 0; // } - var oldPages = current_memory(); + var oldPages = current_memory(); var newPages = (((new_value + 0xffff) & ~0xffff) >> 16); assert(newPages > oldPages); if (grow_memory(newPages - oldPages) < 0) { diff --git a/tests/allocators/buddy/buddy.untouched.wat b/tests/allocators/buddy/buddy.untouched.wat index ab2d549f..ea6bc9ae 100644 --- a/tests/allocators/buddy/buddy.untouched.wat +++ b/tests/allocators/buddy/buddy.untouched.wat @@ -927,15 +927,12 @@ ;;@ assembly/buddy.ts:400:10 (i32.and (if (result i32) - (i32.ne - (tee_local $7 - (i32.ne - (get_local $2) - ;;@ assembly/buddy.ts:400:20 - (get_global $assembly/buddy/bucket_limit) - ) + (tee_local $7 + (i32.ne + (get_local $2) + ;;@ assembly/buddy.ts:400:20 + (get_global $assembly/buddy/bucket_limit) ) - (i32.const 0) ) (get_local $7) ;;@ assembly/buddy.ts:400:36 @@ -1245,14 +1242,11 @@ (if ;;@ assembly/buddy.ts:514:8 (if (result i32) - (i32.ne - (tee_local $3 - (call $assembly/buddy/parent_is_split - ;;@ assembly/buddy.ts:514:24 - (get_local $2) - ) + (tee_local $3 + (call $assembly/buddy/parent_is_split + ;;@ assembly/buddy.ts:514:24 + (get_local $2) ) - (i32.const 0) ) (get_local $3) ;;@ assembly/buddy.ts:514:30 diff --git a/tests/allocators/tlsf/tlsf.optimized.wat b/tests/allocators/tlsf/tlsf.optimized.wat index 51516011..ebdabc8c 100644 --- a/tests/allocators/tlsf/tlsf.optimized.wat +++ b/tests/allocators/tlsf/tlsf.optimized.wat @@ -15,69 +15,69 @@ (export "memory" (memory $0)) (start $start) (func "$(lib)/allocator/tlsf/Root#set:tailRef" (; 0 ;) (type $iiv) (param $0 i32) (param $1 i32) - ;;@ (lib)/allocator/tlsf.ts:175:30 + ;;@ (lib)/allocator/tlsf.ts:174:30 (i32.store - ;;@ (lib)/allocator/tlsf.ts:175:43 + ;;@ (lib)/allocator/tlsf.ts:174:43 (i32.const 3040) - ;;@ (lib)/allocator/tlsf.ts:175:46 + ;;@ (lib)/allocator/tlsf.ts:174:46 (get_local $1) ) ) (func "$(lib)/allocator/tlsf/Root#setSLMap" (; 1 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - ;;@ (lib)/allocator/tlsf.ts:139:4 + ;;@ (lib)/allocator/tlsf.ts:138:4 (i32.store offset=4 - ;;@ (lib)/allocator/tlsf.ts:139:15 + ;;@ (lib)/allocator/tlsf.ts:138:15 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:139:41 + ;;@ (lib)/allocator/tlsf.ts:138:41 (i32.shl (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:139:46 + ;;@ (lib)/allocator/tlsf.ts:138:46 (i32.const 2) ) ) - ;;@ (lib)/allocator/tlsf.ts:139:49 + ;;@ (lib)/allocator/tlsf.ts:138:49 (get_local $2) ) ) (func "$(lib)/allocator/tlsf/Root#setHead" (; 2 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) - ;;@ (lib)/allocator/tlsf.ts:163:4 + ;;@ (lib)/allocator/tlsf.ts:162:4 (i32.store offset=96 - ;;@ (lib)/allocator/tlsf.ts:164:6 + ;;@ (lib)/allocator/tlsf.ts:163:6 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:164:32 + ;;@ (lib)/allocator/tlsf.ts:163:32 (i32.shl (i32.add - ;;@ (lib)/allocator/tlsf.ts:164:33 + ;;@ (lib)/allocator/tlsf.ts:163:33 (i32.shl (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:164:38 + ;;@ (lib)/allocator/tlsf.ts:163:38 (i32.const 5) ) - ;;@ (lib)/allocator/tlsf.ts:164:48 + ;;@ (lib)/allocator/tlsf.ts:163:48 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:164:61 + ;;@ (lib)/allocator/tlsf.ts:163:61 (i32.const 2) ) ) - ;;@ (lib)/allocator/tlsf.ts:165:6 + ;;@ (lib)/allocator/tlsf.ts:164:6 (get_local $3) ) ) (func "$(lib)/allocator/tlsf/Block#get:right" (; 3 ;) (type $ii) (param $0 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:84:11 + ;;@ (lib)/allocator/tlsf.ts:83:11 (i32.add - ;;@ (lib)/allocator/tlsf.ts:86:8 + ;;@ (lib)/allocator/tlsf.ts:85:8 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:86:34 + ;;@ (lib)/allocator/tlsf.ts:85:34 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:86:47 + ;;@ (lib)/allocator/tlsf.ts:85:47 (i32.and - ;;@ (lib)/allocator/tlsf.ts:86:48 + ;;@ (lib)/allocator/tlsf.ts:85:48 (i32.load (get_local $0) ) @@ -86,50 +86,50 @@ ) ) (func "$(lib)/allocator/tlsf/fls" (; 4 ;) (type $ii) (param $0 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:425:9 + ;;@ (lib)/allocator/tlsf.ts:423:9 (i32.sub (i32.const 31) - ;;@ (lib)/allocator/tlsf.ts:425:15 + ;;@ (lib)/allocator/tlsf.ts:423:15 (i32.clz - ;;@ (lib)/allocator/tlsf.ts:425:22 + ;;@ (lib)/allocator/tlsf.ts:423:22 (get_local $0) ) ) ) (func "$(lib)/allocator/tlsf/Root#getHead" (; 5 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:154:11 + ;;@ (lib)/allocator/tlsf.ts:153:11 (i32.load offset=96 - ;;@ (lib)/allocator/tlsf.ts:155:6 + ;;@ (lib)/allocator/tlsf.ts:154:6 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:155:32 + ;;@ (lib)/allocator/tlsf.ts:154:32 (i32.shl (i32.add - ;;@ (lib)/allocator/tlsf.ts:155:33 + ;;@ (lib)/allocator/tlsf.ts:154:33 (i32.shl (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:155:38 + ;;@ (lib)/allocator/tlsf.ts:154:38 (i32.const 5) ) - ;;@ (lib)/allocator/tlsf.ts:155:48 + ;;@ (lib)/allocator/tlsf.ts:154:48 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:155:61 + ;;@ (lib)/allocator/tlsf.ts:154:61 (i32.const 2) ) ) ) ) (func "$(lib)/allocator/tlsf/Root#getSLMap" (; 6 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:133:11 + ;;@ (lib)/allocator/tlsf.ts:132:11 (i32.load offset=4 - ;;@ (lib)/allocator/tlsf.ts:133:21 + ;;@ (lib)/allocator/tlsf.ts:132:21 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:133:47 + ;;@ (lib)/allocator/tlsf.ts:132:47 (i32.shl (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:133:52 + ;;@ (lib)/allocator/tlsf.ts:132:52 (i32.const 2) ) ) @@ -141,60 +141,60 @@ (local $4 i32) (local $5 i32) (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:258:4 + ;;@ (lib)/allocator/tlsf.ts:257:4 (if (result i32) - ;;@ (lib)/allocator/tlsf.ts:258:8 + ;;@ (lib)/allocator/tlsf.ts:257:8 (i32.lt_u - ;;@ (lib)/allocator/tlsf.ts:253:4 + ;;@ (lib)/allocator/tlsf.ts:252:4 (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:253:15 + ;;@ (lib)/allocator/tlsf.ts:252:15 (i32.and - ;;@ (lib)/allocator/tlsf.ts:251:20 + ;;@ (lib)/allocator/tlsf.ts:250:20 (i32.load (get_local $1) ) (i32.const -4) ) ) - ;;@ (lib)/allocator/tlsf.ts:258:15 + ;;@ (lib)/allocator/tlsf.ts:257:15 (i32.const 128) ) - ;;@ (lib)/allocator/tlsf.ts:258:24 + ;;@ (lib)/allocator/tlsf.ts:257:24 (block (result i32) - ;;@ (lib)/allocator/tlsf.ts:260:6 + ;;@ (lib)/allocator/tlsf.ts:259:6 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:260:11 + ;;@ (lib)/allocator/tlsf.ts:259:11 (i32.div_u - ;;@ (lib)/allocator/tlsf.ts:260:17 + ;;@ (lib)/allocator/tlsf.ts:259:17 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:260:24 + ;;@ (lib)/allocator/tlsf.ts:259:24 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:259:11 + ;;@ (lib)/allocator/tlsf.ts:258:11 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:261:11 + ;;@ (lib)/allocator/tlsf.ts:260:11 (block (result i32) - ;;@ (lib)/allocator/tlsf.ts:263:6 + ;;@ (lib)/allocator/tlsf.ts:262:6 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:263:11 + ;;@ (lib)/allocator/tlsf.ts:262:11 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:263:17 + ;;@ (lib)/allocator/tlsf.ts:262:17 (i32.shr_u - ;;@ (lib)/allocator/tlsf.ts:263:18 + ;;@ (lib)/allocator/tlsf.ts:262:18 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:263:26 + ;;@ (lib)/allocator/tlsf.ts:262:26 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:262:6 + ;;@ (lib)/allocator/tlsf.ts:261:6 (tee_local $3 - ;;@ (lib)/allocator/tlsf.ts:262:11 + ;;@ (lib)/allocator/tlsf.ts:261:11 (call "$(lib)/allocator/tlsf/fls" - ;;@ (lib)/allocator/tlsf.ts:262:22 + ;;@ (lib)/allocator/tlsf.ts:261:22 (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:263:32 + ;;@ (lib)/allocator/tlsf.ts:262:32 (i32.const 5) ) ) @@ -202,108 +202,108 @@ ) ) (i32.sub - ;;@ (lib)/allocator/tlsf.ts:264:6 + ;;@ (lib)/allocator/tlsf.ts:263:6 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:264:12 + ;;@ (lib)/allocator/tlsf.ts:263:12 (i32.const 6) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:269:4 + ;;@ (lib)/allocator/tlsf.ts:268:4 (set_local $2 - ;;@ (lib)/allocator/tlsf.ts:269:15 + ;;@ (lib)/allocator/tlsf.ts:268:15 (i32.load offset=8 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:270:4 + ;;@ (lib)/allocator/tlsf.ts:269:4 (if - ;;@ (lib)/allocator/tlsf.ts:268:4 + ;;@ (lib)/allocator/tlsf.ts:267:4 (tee_local $5 - ;;@ (lib)/allocator/tlsf.ts:268:15 + ;;@ (lib)/allocator/tlsf.ts:267:15 (i32.load offset=4 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:271:6 + ;;@ (lib)/allocator/tlsf.ts:269:14 (i32.store offset=8 (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:271:18 + ;;@ (lib)/allocator/tlsf.ts:269:26 (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:272:4 + ;;@ (lib)/allocator/tlsf.ts:270:4 (if - ;;@ (lib)/allocator/tlsf.ts:272:8 + ;;@ (lib)/allocator/tlsf.ts:270:8 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:273:6 + ;;@ (lib)/allocator/tlsf.ts:270:14 (i32.store offset=4 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:273:18 + ;;@ (lib)/allocator/tlsf.ts:270:26 (get_local $5) ) ) - ;;@ (lib)/allocator/tlsf.ts:276:4 + ;;@ (lib)/allocator/tlsf.ts:273:4 (if - ;;@ (lib)/allocator/tlsf.ts:276:8 + ;;@ (lib)/allocator/tlsf.ts:273:8 (i32.eq (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:276:22 + ;;@ (lib)/allocator/tlsf.ts:273:22 (call "$(lib)/allocator/tlsf/Root#getHead" - ;;@ (lib)/allocator/tlsf.ts:276:17 + ;;@ (lib)/allocator/tlsf.ts:273:17 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:276:30 + ;;@ (lib)/allocator/tlsf.ts:273:30 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:276:34 + ;;@ (lib)/allocator/tlsf.ts:273:34 (get_local $4) ) ) - ;;@ (lib)/allocator/tlsf.ts:276:39 + ;;@ (lib)/allocator/tlsf.ts:273:39 (block - ;;@ (lib)/allocator/tlsf.ts:277:11 + ;;@ (lib)/allocator/tlsf.ts:274:11 (call "$(lib)/allocator/tlsf/Root#setHead" - ;;@ (lib)/allocator/tlsf.ts:277:6 + ;;@ (lib)/allocator/tlsf.ts:274:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:277:19 + ;;@ (lib)/allocator/tlsf.ts:274:19 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:277:23 + ;;@ (lib)/allocator/tlsf.ts:274:23 (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:277:27 + ;;@ (lib)/allocator/tlsf.ts:274:27 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:280:6 + ;;@ (lib)/allocator/tlsf.ts:277:6 (if - ;;@ (lib)/allocator/tlsf.ts:280:10 + ;;@ (lib)/allocator/tlsf.ts:277:10 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:280:11 + ;;@ (lib)/allocator/tlsf.ts:277:11 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:280:17 + ;;@ (lib)/allocator/tlsf.ts:277:17 (block - ;;@ (lib)/allocator/tlsf.ts:282:13 + ;;@ (lib)/allocator/tlsf.ts:279:13 (call "$(lib)/allocator/tlsf/Root#setSLMap" - ;;@ (lib)/allocator/tlsf.ts:282:8 + ;;@ (lib)/allocator/tlsf.ts:279:8 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:282:22 + ;;@ (lib)/allocator/tlsf.ts:279:22 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:282:26 + ;;@ (lib)/allocator/tlsf.ts:279:26 (tee_local $1 (i32.and - ;;@ (lib)/allocator/tlsf.ts:281:25 + ;;@ (lib)/allocator/tlsf.ts:278:25 (call "$(lib)/allocator/tlsf/Root#getSLMap" - ;;@ (lib)/allocator/tlsf.ts:281:20 + ;;@ (lib)/allocator/tlsf.ts:278:20 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:281:34 + ;;@ (lib)/allocator/tlsf.ts:278:34 (get_local $3) ) - ;;@ (lib)/allocator/tlsf.ts:282:35 + ;;@ (lib)/allocator/tlsf.ts:279:35 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:282:36 + ;;@ (lib)/allocator/tlsf.ts:279:36 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:282:37 + ;;@ (lib)/allocator/tlsf.ts:279:37 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:282:42 + ;;@ (lib)/allocator/tlsf.ts:279:42 (get_local $4) ) (i32.const -1) @@ -311,27 +311,27 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:285:8 + ;;@ (lib)/allocator/tlsf.ts:282:8 (if - ;;@ (lib)/allocator/tlsf.ts:285:12 + ;;@ (lib)/allocator/tlsf.ts:282:12 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:285:13 + ;;@ (lib)/allocator/tlsf.ts:282:13 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:286:10 + ;;@ (lib)/allocator/tlsf.ts:282:20 (i32.store (get_local $0) (i32.and (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:286:24 + ;;@ (lib)/allocator/tlsf.ts:282:34 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:286:25 + ;;@ (lib)/allocator/tlsf.ts:282:35 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:286:26 + ;;@ (lib)/allocator/tlsf.ts:282:36 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:286:31 + ;;@ (lib)/allocator/tlsf.ts:282:41 (get_local $3) ) (i32.const -1) @@ -349,72 +349,72 @@ (local $3 i32) (local $4 i32) (local $5 i32) - ;;@ (lib)/allocator/tlsf.ts:184:4 + ;;@ (lib)/allocator/tlsf.ts:183:4 (set_local $2 - ;;@ (lib)/allocator/tlsf.ts:184:20 + ;;@ (lib)/allocator/tlsf.ts:183:20 (i32.load (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:195:4 + ;;@ (lib)/allocator/tlsf.ts:194:4 (if - ;;@ (lib)/allocator/tlsf.ts:195:8 + ;;@ (lib)/allocator/tlsf.ts:194:8 (i32.and - ;;@ (lib)/allocator/tlsf.ts:192:4 + ;;@ (lib)/allocator/tlsf.ts:191:4 (tee_local $5 - ;;@ (lib)/allocator/tlsf.ts:192:20 + ;;@ (lib)/allocator/tlsf.ts:191:20 (i32.load - ;;@ (lib)/allocator/tlsf.ts:191:4 + ;;@ (lib)/allocator/tlsf.ts:190:4 (tee_local $4 - ;;@ (lib)/allocator/tlsf.ts:191:23 + ;;@ (lib)/allocator/tlsf.ts:190:23 (call "$(lib)/allocator/tlsf/Block#get:right" - ;;@ (lib)/allocator/tlsf.ts:191:30 + ;;@ (lib)/allocator/tlsf.ts:190:30 (get_local $1) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:195:20 + ;;@ (lib)/allocator/tlsf.ts:194:20 (i32.const 1) ) - ;;@ (lib)/allocator/tlsf.ts:195:26 + ;;@ (lib)/allocator/tlsf.ts:194:26 (block - ;;@ (lib)/allocator/tlsf.ts:196:11 + ;;@ (lib)/allocator/tlsf.ts:195:11 (call "$(lib)/allocator/tlsf/Root#remove" - ;;@ (lib)/allocator/tlsf.ts:196:6 + ;;@ (lib)/allocator/tlsf.ts:195:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:196:18 + ;;@ (lib)/allocator/tlsf.ts:195:18 (get_local $4) ) - ;;@ (lib)/allocator/tlsf.ts:197:6 + ;;@ (lib)/allocator/tlsf.ts:196:6 (i32.store (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:197:19 + ;;@ (lib)/allocator/tlsf.ts:196:19 (tee_local $2 (i32.add - ;;@ (lib)/allocator/tlsf.ts:197:20 + ;;@ (lib)/allocator/tlsf.ts:196:20 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:197:33 + ;;@ (lib)/allocator/tlsf.ts:196:33 (i32.add - ;;@ (lib)/allocator/tlsf.ts:197:46 + ;;@ (lib)/allocator/tlsf.ts:196:46 (i32.and - ;;@ (lib)/allocator/tlsf.ts:197:47 + ;;@ (lib)/allocator/tlsf.ts:196:47 (get_local $5) (i32.const -4) ) - ;;@ (lib)/allocator/tlsf.ts:197:33 + ;;@ (lib)/allocator/tlsf.ts:196:33 (i32.const 4) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:199:6 + ;;@ (lib)/allocator/tlsf.ts:198:6 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:199:18 + ;;@ (lib)/allocator/tlsf.ts:198:18 (i32.load - ;;@ (lib)/allocator/tlsf.ts:198:6 + ;;@ (lib)/allocator/tlsf.ts:197:6 (tee_local $4 - ;;@ (lib)/allocator/tlsf.ts:198:14 + ;;@ (lib)/allocator/tlsf.ts:197:14 (call "$(lib)/allocator/tlsf/Block#get:right" (get_local $1) ) @@ -423,21 +423,21 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:204:4 + ;;@ (lib)/allocator/tlsf.ts:203:4 (if - ;;@ (lib)/allocator/tlsf.ts:204:8 + ;;@ (lib)/allocator/tlsf.ts:203:8 (i32.and (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:204:20 + ;;@ (lib)/allocator/tlsf.ts:203:20 (i32.const 2) ) - ;;@ (lib)/allocator/tlsf.ts:204:31 + ;;@ (lib)/allocator/tlsf.ts:203:31 (block - ;;@ (lib)/allocator/tlsf.ts:206:6 + ;;@ (lib)/allocator/tlsf.ts:205:6 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:206:21 + ;;@ (lib)/allocator/tlsf.ts:205:21 (i32.load - ;;@ (lib)/allocator/tlsf.ts:205:6 + ;;@ (lib)/allocator/tlsf.ts:204:6 (tee_local $1 (i32.load (i32.sub @@ -448,49 +448,49 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:208:11 + ;;@ (lib)/allocator/tlsf.ts:207:11 (call "$(lib)/allocator/tlsf/Root#remove" - ;;@ (lib)/allocator/tlsf.ts:208:6 + ;;@ (lib)/allocator/tlsf.ts:207:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:208:18 + ;;@ (lib)/allocator/tlsf.ts:207:18 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:209:6 + ;;@ (lib)/allocator/tlsf.ts:208:6 (i32.store (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:209:18 + ;;@ (lib)/allocator/tlsf.ts:208:18 (tee_local $3 (i32.add - ;;@ (lib)/allocator/tlsf.ts:209:19 + ;;@ (lib)/allocator/tlsf.ts:208:19 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:209:31 + ;;@ (lib)/allocator/tlsf.ts:208:31 (i32.add - ;;@ (lib)/allocator/tlsf.ts:209:44 + ;;@ (lib)/allocator/tlsf.ts:208:44 (i32.and - ;;@ (lib)/allocator/tlsf.ts:209:45 + ;;@ (lib)/allocator/tlsf.ts:208:45 (get_local $2) (i32.const -4) ) - ;;@ (lib)/allocator/tlsf.ts:209:31 + ;;@ (lib)/allocator/tlsf.ts:208:31 (i32.const 4) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:211:6 + ;;@ (lib)/allocator/tlsf.ts:210:6 (set_local $2 - ;;@ (lib)/allocator/tlsf.ts:211:18 + ;;@ (lib)/allocator/tlsf.ts:210:18 (get_local $3) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:215:4 + ;;@ (lib)/allocator/tlsf.ts:214:4 (i32.store (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:215:17 + ;;@ (lib)/allocator/tlsf.ts:214:17 (i32.or (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:215:29 + ;;@ (lib)/allocator/tlsf.ts:214:29 (i32.const 2) ) ) @@ -500,68 +500,68 @@ (i32.const 4) ) (tee_local $3 - ;;@ (lib)/allocator/tlsf.ts:216:17 + ;;@ (lib)/allocator/tlsf.ts:215:17 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:234:4 + ;;@ (lib)/allocator/tlsf.ts:233:4 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:234:20 + ;;@ (lib)/allocator/tlsf.ts:233:20 (call "$(lib)/allocator/tlsf/Root#getHead" - ;;@ (lib)/allocator/tlsf.ts:234:15 + ;;@ (lib)/allocator/tlsf.ts:233:15 (get_local $0) (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:224:4 + ;;@ (lib)/allocator/tlsf.ts:223:4 (if (result i32) - ;;@ (lib)/allocator/tlsf.ts:224:8 + ;;@ (lib)/allocator/tlsf.ts:223:8 (i32.lt_u - ;;@ (lib)/allocator/tlsf.ts:219:4 + ;;@ (lib)/allocator/tlsf.ts:218:4 (tee_local $3 - ;;@ (lib)/allocator/tlsf.ts:219:11 + ;;@ (lib)/allocator/tlsf.ts:218:11 (i32.and (get_local $2) (i32.const -4) ) ) - ;;@ (lib)/allocator/tlsf.ts:224:15 + ;;@ (lib)/allocator/tlsf.ts:223:15 (i32.const 128) ) - ;;@ (lib)/allocator/tlsf.ts:224:24 + ;;@ (lib)/allocator/tlsf.ts:223:24 (block (result i32) - ;;@ (lib)/allocator/tlsf.ts:226:6 + ;;@ (lib)/allocator/tlsf.ts:225:6 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:226:11 + ;;@ (lib)/allocator/tlsf.ts:225:11 (i32.div_u - ;;@ (lib)/allocator/tlsf.ts:226:17 + ;;@ (lib)/allocator/tlsf.ts:225:17 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:226:24 + ;;@ (lib)/allocator/tlsf.ts:225:24 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:225:11 + ;;@ (lib)/allocator/tlsf.ts:224:11 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:227:11 + ;;@ (lib)/allocator/tlsf.ts:226:11 (block (result i32) - ;;@ (lib)/allocator/tlsf.ts:229:6 + ;;@ (lib)/allocator/tlsf.ts:228:6 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:229:11 + ;;@ (lib)/allocator/tlsf.ts:228:11 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:229:17 + ;;@ (lib)/allocator/tlsf.ts:228:17 (i32.shr_u - ;;@ (lib)/allocator/tlsf.ts:229:18 + ;;@ (lib)/allocator/tlsf.ts:228:18 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:229:26 + ;;@ (lib)/allocator/tlsf.ts:228:26 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:228:6 + ;;@ (lib)/allocator/tlsf.ts:227:6 (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:228:11 + ;;@ (lib)/allocator/tlsf.ts:227:11 (call "$(lib)/allocator/tlsf/fls" - ;;@ (lib)/allocator/tlsf.ts:228:22 + ;;@ (lib)/allocator/tlsf.ts:227:22 (get_local $3) ) ) - ;;@ (lib)/allocator/tlsf.ts:229:32 + ;;@ (lib)/allocator/tlsf.ts:228:32 (i32.const 5) ) ) @@ -569,88 +569,88 @@ ) ) (i32.sub - ;;@ (lib)/allocator/tlsf.ts:230:6 + ;;@ (lib)/allocator/tlsf.ts:229:6 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:230:12 + ;;@ (lib)/allocator/tlsf.ts:229:12 (i32.const 6) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:234:32 + ;;@ (lib)/allocator/tlsf.ts:233:32 (get_local $3) ) ) - ;;@ (lib)/allocator/tlsf.ts:235:4 + ;;@ (lib)/allocator/tlsf.ts:234:4 (i32.store offset=4 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:235:17 + ;;@ (lib)/allocator/tlsf.ts:234:17 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:236:4 + ;;@ (lib)/allocator/tlsf.ts:235:4 (i32.store offset=8 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:236:17 + ;;@ (lib)/allocator/tlsf.ts:235:17 (get_local $4) ) - ;;@ (lib)/allocator/tlsf.ts:237:4 + ;;@ (lib)/allocator/tlsf.ts:236:4 (if - ;;@ (lib)/allocator/tlsf.ts:237:8 + ;;@ (lib)/allocator/tlsf.ts:236:8 (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:237:14 + ;;@ (lib)/allocator/tlsf.ts:236:14 (i32.store offset=4 (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:237:26 + ;;@ (lib)/allocator/tlsf.ts:236:26 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:238:9 + ;;@ (lib)/allocator/tlsf.ts:237:9 (call "$(lib)/allocator/tlsf/Root#setHead" - ;;@ (lib)/allocator/tlsf.ts:238:4 + ;;@ (lib)/allocator/tlsf.ts:237:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:238:17 + ;;@ (lib)/allocator/tlsf.ts:237:17 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:238:21 + ;;@ (lib)/allocator/tlsf.ts:237:21 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:238:25 + ;;@ (lib)/allocator/tlsf.ts:237:25 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:241:4 + ;;@ (lib)/allocator/tlsf.ts:240:4 (i32.store (get_local $0) (i32.or (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:241:18 + ;;@ (lib)/allocator/tlsf.ts:240:18 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:241:19 + ;;@ (lib)/allocator/tlsf.ts:240:19 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:241:24 + ;;@ (lib)/allocator/tlsf.ts:240:24 (get_local $2) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:242:9 + ;;@ (lib)/allocator/tlsf.ts:241:9 (call "$(lib)/allocator/tlsf/Root#setSLMap" - ;;@ (lib)/allocator/tlsf.ts:242:4 + ;;@ (lib)/allocator/tlsf.ts:241:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:242:18 + ;;@ (lib)/allocator/tlsf.ts:241:18 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:242:22 + ;;@ (lib)/allocator/tlsf.ts:241:22 (i32.or - ;;@ (lib)/allocator/tlsf.ts:242:27 + ;;@ (lib)/allocator/tlsf.ts:241:27 (call "$(lib)/allocator/tlsf/Root#getSLMap" - ;;@ (lib)/allocator/tlsf.ts:242:22 + ;;@ (lib)/allocator/tlsf.ts:241:22 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:242:36 + ;;@ (lib)/allocator/tlsf.ts:241:36 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:242:42 + ;;@ (lib)/allocator/tlsf.ts:241:42 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:242:43 + ;;@ (lib)/allocator/tlsf.ts:241:43 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:242:48 + ;;@ (lib)/allocator/tlsf.ts:241:48 (get_local $3) ) ) @@ -659,39 +659,39 @@ (func "$(lib)/allocator/tlsf/Root#addMemory" (; 9 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) - ;;@ (lib)/allocator/tlsf.ts:380:4 + ;;@ (lib)/allocator/tlsf.ts:376:4 (if - ;;@ (lib)/allocator/tlsf.ts:378:4 + ;;@ (lib)/allocator/tlsf.ts:374:4 (tee_local $3 (i32.load (i32.const 3040) ) ) - ;;@ (lib)/allocator/tlsf.ts:384:6 + ;;@ (lib)/allocator/tlsf.ts:380:6 (if - ;;@ (lib)/allocator/tlsf.ts:384:10 + ;;@ (lib)/allocator/tlsf.ts:380:10 (i32.eq (i32.sub (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:384:18 + ;;@ (lib)/allocator/tlsf.ts:380:18 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:384:32 + ;;@ (lib)/allocator/tlsf.ts:380:32 (get_local $3) ) - ;;@ (lib)/allocator/tlsf.ts:384:41 + ;;@ (lib)/allocator/tlsf.ts:380:41 (block - ;;@ (lib)/allocator/tlsf.ts:385:8 + ;;@ (lib)/allocator/tlsf.ts:381:8 (set_local $1 (i32.sub (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:385:17 + ;;@ (lib)/allocator/tlsf.ts:381:17 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:386:8 + ;;@ (lib)/allocator/tlsf.ts:382:8 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:386:19 + ;;@ (lib)/allocator/tlsf.ts:382:19 (i32.load (get_local $3) ) @@ -699,244 +699,244 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:394:4 + ;;@ (lib)/allocator/tlsf.ts:391:4 (if - ;;@ (lib)/allocator/tlsf.ts:394:8 + ;;@ (lib)/allocator/tlsf.ts:391:8 (i32.lt_u - ;;@ (lib)/allocator/tlsf.ts:393:4 + ;;@ (lib)/allocator/tlsf.ts:390:4 (tee_local $3 - ;;@ (lib)/allocator/tlsf.ts:393:15 + ;;@ (lib)/allocator/tlsf.ts:390:15 (i32.sub (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:393:21 + ;;@ (lib)/allocator/tlsf.ts:390:21 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:394:45 + ;;@ (lib)/allocator/tlsf.ts:391:45 (i32.const 20) ) - ;;@ (lib)/allocator/tlsf.ts:395:13 + ;;@ (lib)/allocator/tlsf.ts:392:13 (return (i32.const 0) ) ) - ;;@ (lib)/allocator/tlsf.ts:400:4 + ;;@ (lib)/allocator/tlsf.ts:398:4 (i32.store - ;;@ (lib)/allocator/tlsf.ts:399:4 + ;;@ (lib)/allocator/tlsf.ts:397:4 (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:399:15 + ;;@ (lib)/allocator/tlsf.ts:397:15 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:400:16 + ;;@ (lib)/allocator/tlsf.ts:398:16 (i32.or (i32.or - ;;@ (lib)/allocator/tlsf.ts:398:19 + ;;@ (lib)/allocator/tlsf.ts:396:19 (i32.sub (get_local $3) (i32.const 8) ) - ;;@ (lib)/allocator/tlsf.ts:400:27 + ;;@ (lib)/allocator/tlsf.ts:398:27 (i32.const 1) ) - ;;@ (lib)/allocator/tlsf.ts:400:34 + ;;@ (lib)/allocator/tlsf.ts:398:34 (i32.and - ;;@ (lib)/allocator/tlsf.ts:400:35 + ;;@ (lib)/allocator/tlsf.ts:398:35 (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:400:46 + ;;@ (lib)/allocator/tlsf.ts:398:46 (i32.const 2) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:401:4 + ;;@ (lib)/allocator/tlsf.ts:399:4 (i32.store offset=4 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:401:16 + ;;@ (lib)/allocator/tlsf.ts:399:16 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:402:4 + ;;@ (lib)/allocator/tlsf.ts:400:4 (i32.store offset=8 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:402:16 + ;;@ (lib)/allocator/tlsf.ts:400:16 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:406:4 + ;;@ (lib)/allocator/tlsf.ts:404:4 (i32.store - ;;@ (lib)/allocator/tlsf.ts:405:4 + ;;@ (lib)/allocator/tlsf.ts:403:4 (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:405:15 + ;;@ (lib)/allocator/tlsf.ts:403:15 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:405:33 + ;;@ (lib)/allocator/tlsf.ts:403:33 (i32.add (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:405:41 + ;;@ (lib)/allocator/tlsf.ts:403:41 (get_local $3) ) - ;;@ (lib)/allocator/tlsf.ts:405:48 + ;;@ (lib)/allocator/tlsf.ts:403:48 (i32.const 4) ) ) (i32.const 2) ) - ;;@ (lib)/allocator/tlsf.ts:407:4 + ;;@ (lib)/allocator/tlsf.ts:405:4 (call "$(lib)/allocator/tlsf/Root#set:tailRef" (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:407:19 + ;;@ (lib)/allocator/tlsf.ts:405:19 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:409:9 + ;;@ (lib)/allocator/tlsf.ts:407:9 (call "$(lib)/allocator/tlsf/Root#insert" - ;;@ (lib)/allocator/tlsf.ts:409:4 + ;;@ (lib)/allocator/tlsf.ts:407:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:409:16 + ;;@ (lib)/allocator/tlsf.ts:407:16 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:411:11 + ;;@ (lib)/allocator/tlsf.ts:409:11 (i32.const 1) ) (func "$(lib)/allocator/tlsf/Root#search" (; 10 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:297:4 + ;;@ (lib)/allocator/tlsf.ts:293:4 (if (result i32) - ;;@ (lib)/allocator/tlsf.ts:297:8 + ;;@ (lib)/allocator/tlsf.ts:293:8 (i32.lt_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:297:15 + ;;@ (lib)/allocator/tlsf.ts:293:15 (i32.const 128) ) - ;;@ (lib)/allocator/tlsf.ts:299:11 + ;;@ (lib)/allocator/tlsf.ts:295:11 (i32.div_u - ;;@ (lib)/allocator/tlsf.ts:299:17 + ;;@ (lib)/allocator/tlsf.ts:295:17 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:299:24 + ;;@ (lib)/allocator/tlsf.ts:295:24 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:300:11 + ;;@ (lib)/allocator/tlsf.ts:296:11 (block (result i32) - ;;@ (lib)/allocator/tlsf.ts:303:6 + ;;@ (lib)/allocator/tlsf.ts:299:6 (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:303:11 + ;;@ (lib)/allocator/tlsf.ts:299:11 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:303:17 + ;;@ (lib)/allocator/tlsf.ts:299:17 (i32.shr_u - ;;@ (lib)/allocator/tlsf.ts:303:18 + ;;@ (lib)/allocator/tlsf.ts:299:18 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:303:26 + ;;@ (lib)/allocator/tlsf.ts:299:26 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:302:6 + ;;@ (lib)/allocator/tlsf.ts:298:6 (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:302:11 + ;;@ (lib)/allocator/tlsf.ts:298:11 (call "$(lib)/allocator/tlsf/fls" - ;;@ (lib)/allocator/tlsf.ts:302:22 + ;;@ (lib)/allocator/tlsf.ts:298:22 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:303:32 + ;;@ (lib)/allocator/tlsf.ts:299:32 (i32.const 5) ) ) (i32.const 32) ) ) - ;;@ (lib)/allocator/tlsf.ts:304:6 + ;;@ (lib)/allocator/tlsf.ts:300:6 (set_local $2 (i32.sub (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:304:12 + ;;@ (lib)/allocator/tlsf.ts:300:12 (i32.const 6) ) ) - ;;@ (lib)/allocator/tlsf.ts:306:6 + ;;@ (lib)/allocator/tlsf.ts:302:6 (if (result i32) - ;;@ (lib)/allocator/tlsf.ts:306:10 + ;;@ (lib)/allocator/tlsf.ts:302:10 (i32.lt_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:306:15 + ;;@ (lib)/allocator/tlsf.ts:302:15 (i32.const 31) ) (i32.add - ;;@ (lib)/allocator/tlsf.ts:306:30 + ;;@ (lib)/allocator/tlsf.ts:302:30 (get_local $1) (i32.const 1) ) - ;;@ (lib)/allocator/tlsf.ts:307:11 + ;;@ (lib)/allocator/tlsf.ts:303:11 (block (result i32) (set_local $2 (i32.add - ;;@ (lib)/allocator/tlsf.ts:307:13 + ;;@ (lib)/allocator/tlsf.ts:303:13 (get_local $2) (i32.const 1) ) ) - ;;@ (lib)/allocator/tlsf.ts:307:22 + ;;@ (lib)/allocator/tlsf.ts:303:22 (i32.const 0) ) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:313:4 + ;;@ (lib)/allocator/tlsf.ts:309:4 (if (result i32) - ;;@ (lib)/allocator/tlsf.ts:311:4 + ;;@ (lib)/allocator/tlsf.ts:307:4 (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:311:16 + ;;@ (lib)/allocator/tlsf.ts:307:16 (i32.and - ;;@ (lib)/allocator/tlsf.ts:311:21 + ;;@ (lib)/allocator/tlsf.ts:307:21 (call "$(lib)/allocator/tlsf/Root#getSLMap" - ;;@ (lib)/allocator/tlsf.ts:311:16 + ;;@ (lib)/allocator/tlsf.ts:307:16 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:311:30 + ;;@ (lib)/allocator/tlsf.ts:307:30 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:311:36 + ;;@ (lib)/allocator/tlsf.ts:307:36 (i32.shl (i32.const -1) - ;;@ (lib)/allocator/tlsf.ts:311:43 + ;;@ (lib)/allocator/tlsf.ts:307:43 (get_local $1) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:324:18 + ;;@ (lib)/allocator/tlsf.ts:320:18 (call "$(lib)/allocator/tlsf/Root#getHead" - ;;@ (lib)/allocator/tlsf.ts:324:13 + ;;@ (lib)/allocator/tlsf.ts:320:13 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:324:26 + ;;@ (lib)/allocator/tlsf.ts:320:26 (get_local $2) (i32.ctz (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:316:6 + ;;@ (lib)/allocator/tlsf.ts:312:6 (if (result i32) - ;;@ (lib)/allocator/tlsf.ts:315:6 + ;;@ (lib)/allocator/tlsf.ts:311:6 (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:315:18 + ;;@ (lib)/allocator/tlsf.ts:311:18 (i32.and (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:315:31 + ;;@ (lib)/allocator/tlsf.ts:311:31 (i32.shl (i32.const -1) - ;;@ (lib)/allocator/tlsf.ts:315:38 + ;;@ (lib)/allocator/tlsf.ts:311:38 (i32.add - ;;@ (lib)/allocator/tlsf.ts:315:39 + ;;@ (lib)/allocator/tlsf.ts:311:39 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:315:44 + ;;@ (lib)/allocator/tlsf.ts:311:44 (i32.const 1) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:318:13 + ;;@ (lib)/allocator/tlsf.ts:314:13 (block (result i32) - ;;@ (lib)/allocator/tlsf.ts:320:8 + ;;@ (lib)/allocator/tlsf.ts:316:8 (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:320:16 + ;;@ (lib)/allocator/tlsf.ts:316:16 (call "$(lib)/allocator/tlsf/Root#getSLMap" - ;;@ (lib)/allocator/tlsf.ts:320:23 + ;;@ (lib)/allocator/tlsf.ts:316:23 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:319:8 + ;;@ (lib)/allocator/tlsf.ts:315:8 (tee_local $2 (i32.ctz (get_local $1) @@ -944,18 +944,18 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:321:20 + ;;@ (lib)/allocator/tlsf.ts:317:20 (call "$(lib)/allocator/tlsf/Root#getHead" - ;;@ (lib)/allocator/tlsf.ts:321:15 + ;;@ (lib)/allocator/tlsf.ts:317:15 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:321:28 + ;;@ (lib)/allocator/tlsf.ts:317:28 (get_local $2) (i32.ctz (get_local $1) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:317:15 + ;;@ (lib)/allocator/tlsf.ts:313:15 (i32.const 0) ) ) @@ -963,116 +963,116 @@ (func "$(lib)/allocator/tlsf/Root#use" (; 11 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) - ;;@ (lib)/allocator/tlsf.ts:344:4 + ;;@ (lib)/allocator/tlsf.ts:340:4 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:344:20 + ;;@ (lib)/allocator/tlsf.ts:340:20 (i32.load (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:349:9 + ;;@ (lib)/allocator/tlsf.ts:345:9 (call "$(lib)/allocator/tlsf/Root#remove" - ;;@ (lib)/allocator/tlsf.ts:349:4 + ;;@ (lib)/allocator/tlsf.ts:345:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:349:16 + ;;@ (lib)/allocator/tlsf.ts:345:16 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:353:4 + ;;@ (lib)/allocator/tlsf.ts:349:4 (if - ;;@ (lib)/allocator/tlsf.ts:353:8 + ;;@ (lib)/allocator/tlsf.ts:349:8 (i32.ge_u - ;;@ (lib)/allocator/tlsf.ts:352:4 + ;;@ (lib)/allocator/tlsf.ts:348:4 (tee_local $4 - ;;@ (lib)/allocator/tlsf.ts:352:20 + ;;@ (lib)/allocator/tlsf.ts:348:20 (i32.sub (i32.and - ;;@ (lib)/allocator/tlsf.ts:352:21 + ;;@ (lib)/allocator/tlsf.ts:348:21 (get_local $3) (i32.const -4) ) - ;;@ (lib)/allocator/tlsf.ts:352:42 + ;;@ (lib)/allocator/tlsf.ts:348:42 (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:353:34 + ;;@ (lib)/allocator/tlsf.ts:349:34 (i32.const 16) ) - ;;@ (lib)/allocator/tlsf.ts:353:50 + ;;@ (lib)/allocator/tlsf.ts:349:50 (block - ;;@ (lib)/allocator/tlsf.ts:354:6 + ;;@ (lib)/allocator/tlsf.ts:350:6 (i32.store (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:354:19 + ;;@ (lib)/allocator/tlsf.ts:350:19 (i32.or (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:354:26 + ;;@ (lib)/allocator/tlsf.ts:350:26 (i32.and - ;;@ (lib)/allocator/tlsf.ts:354:27 + ;;@ (lib)/allocator/tlsf.ts:350:27 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:354:39 + ;;@ (lib)/allocator/tlsf.ts:350:39 (i32.const 2) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:359:6 + ;;@ (lib)/allocator/tlsf.ts:355:6 (i32.store - ;;@ (lib)/allocator/tlsf.ts:356:6 + ;;@ (lib)/allocator/tlsf.ts:352:6 (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:356:18 + ;;@ (lib)/allocator/tlsf.ts:352:18 (i32.add - ;;@ (lib)/allocator/tlsf.ts:357:8 + ;;@ (lib)/allocator/tlsf.ts:353:8 (i32.add (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:357:35 + ;;@ (lib)/allocator/tlsf.ts:353:35 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:357:48 + ;;@ (lib)/allocator/tlsf.ts:353:48 (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:359:19 + ;;@ (lib)/allocator/tlsf.ts:355:19 (i32.or (i32.sub - ;;@ (lib)/allocator/tlsf.ts:359:20 + ;;@ (lib)/allocator/tlsf.ts:355:20 (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:359:32 + ;;@ (lib)/allocator/tlsf.ts:355:32 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:359:46 + ;;@ (lib)/allocator/tlsf.ts:355:46 (i32.const 1) ) ) - ;;@ (lib)/allocator/tlsf.ts:360:11 + ;;@ (lib)/allocator/tlsf.ts:356:11 (call "$(lib)/allocator/tlsf/Root#insert" - ;;@ (lib)/allocator/tlsf.ts:360:6 + ;;@ (lib)/allocator/tlsf.ts:356:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:360:18 + ;;@ (lib)/allocator/tlsf.ts:356:18 (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:363:11 + ;;@ (lib)/allocator/tlsf.ts:359:11 (block - ;;@ (lib)/allocator/tlsf.ts:364:6 + ;;@ (lib)/allocator/tlsf.ts:360:6 (i32.store (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:364:19 + ;;@ (lib)/allocator/tlsf.ts:360:19 (i32.and (get_local $3) (i32.const -2) ) ) - ;;@ (lib)/allocator/tlsf.ts:366:6 + ;;@ (lib)/allocator/tlsf.ts:362:6 (i32.store - ;;@ (lib)/allocator/tlsf.ts:365:6 + ;;@ (lib)/allocator/tlsf.ts:361:6 (tee_local $0 - ;;@ (lib)/allocator/tlsf.ts:365:25 + ;;@ (lib)/allocator/tlsf.ts:361:25 (call "$(lib)/allocator/tlsf/Block#get:right" - ;;@ (lib)/allocator/tlsf.ts:365:32 + ;;@ (lib)/allocator/tlsf.ts:361:32 (get_local $1) ) ) (i32.and - ;;@ (lib)/allocator/tlsf.ts:366:6 + ;;@ (lib)/allocator/tlsf.ts:362:6 (i32.load (get_local $0) ) @@ -1081,10 +1081,10 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:369:11 + ;;@ (lib)/allocator/tlsf.ts:365:11 (i32.add (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:369:38 + ;;@ (lib)/allocator/tlsf.ts:365:38 (i32.const 4) ) ) @@ -1094,30 +1094,30 @@ (local $3 i32) (local $4 i32) (local $5 i32) - ;;@ (lib)/allocator/tlsf.ts:439:2 + ;;@ (lib)/allocator/tlsf.ts:437:2 (if - ;;@ (lib)/allocator/tlsf.ts:439:6 + ;;@ (lib)/allocator/tlsf.ts:437:6 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:438:2 + ;;@ (lib)/allocator/tlsf.ts:436:2 (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:438:13 + ;;@ (lib)/allocator/tlsf.ts:436:13 (get_global "$(lib)/allocator/tlsf/ROOT") ) ) - ;;@ (lib)/allocator/tlsf.ts:439:13 + ;;@ (lib)/allocator/tlsf.ts:437:13 (block - ;;@ (lib)/allocator/tlsf.ts:441:4 + ;;@ (lib)/allocator/tlsf.ts:439:4 (set_global "$(lib)/allocator/tlsf/ROOT" - ;;@ (lib)/allocator/tlsf.ts:441:11 + ;;@ (lib)/allocator/tlsf.ts:439:11 (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:440:4 + ;;@ (lib)/allocator/tlsf.ts:438:4 (tee_local $4 - ;;@ (lib)/allocator/tlsf.ts:440:21 + ;;@ (lib)/allocator/tlsf.ts:438:21 (i32.and (i32.add - ;;@ (lib)/allocator/tlsf.ts:440:22 + ;;@ (lib)/allocator/tlsf.ts:438:22 (get_global $HEAP_BASE) - ;;@ (lib)/allocator/tlsf.ts:440:34 + ;;@ (lib)/allocator/tlsf.ts:438:34 (i32.const 3) ) (i32.const -4) @@ -1125,65 +1125,65 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:442:4 + ;;@ (lib)/allocator/tlsf.ts:440:4 (call "$(lib)/allocator/tlsf/Root#set:tailRef" (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:442:19 + ;;@ (lib)/allocator/tlsf.ts:440:19 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:443:4 + ;;@ (lib)/allocator/tlsf.ts:441:4 (i32.store (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:443:17 + ;;@ (lib)/allocator/tlsf.ts:441:17 (i32.const 0) ) (loop $continue|0 (if - ;;@ (lib)/allocator/tlsf.ts:444:28 + ;;@ (lib)/allocator/tlsf.ts:442:28 (i32.lt_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:444:33 + ;;@ (lib)/allocator/tlsf.ts:442:33 (i32.const 23) ) (block - ;;@ (lib)/allocator/tlsf.ts:445:11 + ;;@ (lib)/allocator/tlsf.ts:443:11 (call "$(lib)/allocator/tlsf/Root#setSLMap" - ;;@ (lib)/allocator/tlsf.ts:445:6 + ;;@ (lib)/allocator/tlsf.ts:443:6 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:445:20 + ;;@ (lib)/allocator/tlsf.ts:443:20 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:445:24 + ;;@ (lib)/allocator/tlsf.ts:443:24 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:446:11 + ;;@ (lib)/allocator/tlsf.ts:444:11 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:446:25 + ;;@ (lib)/allocator/tlsf.ts:444:25 (i32.const 0) ) (loop $continue|1 (if - ;;@ (lib)/allocator/tlsf.ts:446:28 + ;;@ (lib)/allocator/tlsf.ts:444:28 (i32.lt_u (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:446:33 + ;;@ (lib)/allocator/tlsf.ts:444:33 (i32.const 32) ) (block - ;;@ (lib)/allocator/tlsf.ts:447:13 + ;;@ (lib)/allocator/tlsf.ts:445:13 (call "$(lib)/allocator/tlsf/Root#setHead" - ;;@ (lib)/allocator/tlsf.ts:447:8 + ;;@ (lib)/allocator/tlsf.ts:445:8 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:447:21 + ;;@ (lib)/allocator/tlsf.ts:445:21 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:447:25 + ;;@ (lib)/allocator/tlsf.ts:445:25 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:447:29 + ;;@ (lib)/allocator/tlsf.ts:445:29 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:446:42 + ;;@ (lib)/allocator/tlsf.ts:444:42 (set_local $3 (i32.add - ;;@ (lib)/allocator/tlsf.ts:446:44 + ;;@ (lib)/allocator/tlsf.ts:444:44 (get_local $3) (i32.const 1) ) @@ -1192,10 +1192,10 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:444:42 + ;;@ (lib)/allocator/tlsf.ts:442:42 (set_local $1 (i32.add - ;;@ (lib)/allocator/tlsf.ts:444:44 + ;;@ (lib)/allocator/tlsf.ts:442:44 (get_local $1) (i32.const 1) ) @@ -1204,75 +1204,75 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:449:9 + ;;@ (lib)/allocator/tlsf.ts:448:9 (drop (call "$(lib)/allocator/tlsf/Root#addMemory" - ;;@ (lib)/allocator/tlsf.ts:449:4 + ;;@ (lib)/allocator/tlsf.ts:448:4 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:449:19 + ;;@ (lib)/allocator/tlsf.ts:448:19 (i32.add (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:449:32 + ;;@ (lib)/allocator/tlsf.ts:448:32 (i32.const 3044) ) - ;;@ (lib)/allocator/tlsf.ts:449:43 + ;;@ (lib)/allocator/tlsf.ts:448:43 (i32.shl (current_memory) - ;;@ (lib)/allocator/tlsf.ts:449:63 + ;;@ (lib)/allocator/tlsf.ts:448:63 (i32.const 16) ) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:453:2 + ;;@ (lib)/allocator/tlsf.ts:452:2 (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:453:20 + ;;@ (lib)/allocator/tlsf.ts:452:20 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:454:2 + ;;@ (lib)/allocator/tlsf.ts:453:2 (if (select - ;;@ (lib)/allocator/tlsf.ts:454:14 + ;;@ (lib)/allocator/tlsf.ts:453:14 (i32.lt_u (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:454:21 + ;;@ (lib)/allocator/tlsf.ts:453:21 (i32.const 1073741824) ) (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:454:6 + ;;@ (lib)/allocator/tlsf.ts:453:6 (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:454:37 + ;;@ (lib)/allocator/tlsf.ts:453:37 (block - ;;@ (lib)/allocator/tlsf.ts:458:4 + ;;@ (lib)/allocator/tlsf.ts:457:4 (if - ;;@ (lib)/allocator/tlsf.ts:458:8 + ;;@ (lib)/allocator/tlsf.ts:457:8 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:457:4 + ;;@ (lib)/allocator/tlsf.ts:456:4 (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:457:21 + ;;@ (lib)/allocator/tlsf.ts:456:21 (call "$(lib)/allocator/tlsf/Root#search" - ;;@ (lib)/allocator/tlsf.ts:457:16 + ;;@ (lib)/allocator/tlsf.ts:456:16 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:455:4 + ;;@ (lib)/allocator/tlsf.ts:454:4 (tee_local $0 - ;;@ (lib)/allocator/tlsf.ts:455:11 + ;;@ (lib)/allocator/tlsf.ts:454:11 (select (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:455:22 + ;;@ (lib)/allocator/tlsf.ts:454:22 (i32.and (i32.add - ;;@ (lib)/allocator/tlsf.ts:455:23 + ;;@ (lib)/allocator/tlsf.ts:454:23 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:455:30 + ;;@ (lib)/allocator/tlsf.ts:454:30 (i32.const 3) ) (i32.const -4) ) ) (tee_local $3 - ;;@ (lib)/allocator/tlsf.ts:455:51 + ;;@ (lib)/allocator/tlsf.ts:454:51 (i32.const 12) ) (i32.gt_u @@ -1284,38 +1284,38 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:458:16 + ;;@ (lib)/allocator/tlsf.ts:457:16 (block - ;;@ (lib)/allocator/tlsf.ts:464:6 + ;;@ (lib)/allocator/tlsf.ts:463:6 (if - ;;@ (lib)/allocator/tlsf.ts:464:10 + ;;@ (lib)/allocator/tlsf.ts:463:10 (i32.lt_s (grow_memory - ;;@ (lib)/allocator/tlsf.ts:463:24 + ;;@ (lib)/allocator/tlsf.ts:462:24 (select (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:461:6 + ;;@ (lib)/allocator/tlsf.ts:460:6 (tee_local $4 - ;;@ (lib)/allocator/tlsf.ts:461:24 + ;;@ (lib)/allocator/tlsf.ts:460:24 (current_memory) ) ) (tee_local $3 - ;;@ (lib)/allocator/tlsf.ts:462:6 + ;;@ (lib)/allocator/tlsf.ts:461:6 (tee_local $5 - ;;@ (lib)/allocator/tlsf.ts:462:24 + ;;@ (lib)/allocator/tlsf.ts:461:24 (i32.shr_u (i32.and - ;;@ (lib)/allocator/tlsf.ts:462:25 + ;;@ (lib)/allocator/tlsf.ts:461:25 (i32.add - ;;@ (lib)/allocator/tlsf.ts:462:26 + ;;@ (lib)/allocator/tlsf.ts:461:26 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:462:33 + ;;@ (lib)/allocator/tlsf.ts:461:33 (i32.const 65535) ) (i32.const -65536) ) - ;;@ (lib)/allocator/tlsf.ts:462:56 + ;;@ (lib)/allocator/tlsf.ts:461:56 (i32.const 16) ) ) @@ -1326,120 +1326,120 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:464:37 + ;;@ (lib)/allocator/tlsf.ts:463:37 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:465:8 + ;;@ (lib)/allocator/tlsf.ts:464:8 (if - ;;@ (lib)/allocator/tlsf.ts:465:12 + ;;@ (lib)/allocator/tlsf.ts:464:12 (i32.lt_s (grow_memory - ;;@ (lib)/allocator/tlsf.ts:465:24 + ;;@ (lib)/allocator/tlsf.ts:464:24 (get_local $5) ) - ;;@ (lib)/allocator/tlsf.ts:465:39 + ;;@ (lib)/allocator/tlsf.ts:464:39 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:466:10 + ;;@ (lib)/allocator/tlsf.ts:465:10 (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:468:11 + ;;@ (lib)/allocator/tlsf.ts:469:11 (drop (call "$(lib)/allocator/tlsf/Root#addMemory" - ;;@ (lib)/allocator/tlsf.ts:468:6 + ;;@ (lib)/allocator/tlsf.ts:469:6 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:468:21 + ;;@ (lib)/allocator/tlsf.ts:469:21 (i32.shl (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:468:43 + ;;@ (lib)/allocator/tlsf.ts:469:43 (i32.const 16) ) - ;;@ (lib)/allocator/tlsf.ts:468:47 + ;;@ (lib)/allocator/tlsf.ts:469:47 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:467:23 + ;;@ (lib)/allocator/tlsf.ts:468:23 (current_memory) - ;;@ (lib)/allocator/tlsf.ts:468:68 + ;;@ (lib)/allocator/tlsf.ts:469:68 (i32.const 16) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:469:6 + ;;@ (lib)/allocator/tlsf.ts:470:6 (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:469:14 + ;;@ (lib)/allocator/tlsf.ts:470:14 (call "$(lib)/allocator/tlsf/Root#search" - ;;@ (lib)/allocator/tlsf.ts:469:21 + ;;@ (lib)/allocator/tlsf.ts:470:21 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:469:33 + ;;@ (lib)/allocator/tlsf.ts:470:33 (get_local $0) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:473:4 + ;;@ (lib)/allocator/tlsf.ts:474:4 (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:473:16 + ;;@ (lib)/allocator/tlsf.ts:474:16 (call "$(lib)/allocator/tlsf/Root#use" - ;;@ (lib)/allocator/tlsf.ts:473:11 + ;;@ (lib)/allocator/tlsf.ts:474:11 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:473:20 + ;;@ (lib)/allocator/tlsf.ts:474:20 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:473:27 + ;;@ (lib)/allocator/tlsf.ts:474:27 (get_local $0) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:476:9 + ;;@ (lib)/allocator/tlsf.ts:477:9 (get_local $1) ) (func "$(lib)/allocator/tlsf/free_memory" (; 13 ;) (type $iv) (param $0 i32) (local $1 i32) (local $2 i32) - ;;@ (lib)/allocator/tlsf.ts:482:2 + ;;@ (lib)/allocator/tlsf.ts:483:2 (if - ;;@ (lib)/allocator/tlsf.ts:482:6 + ;;@ (lib)/allocator/tlsf.ts:483:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:484:4 + ;;@ (lib)/allocator/tlsf.ts:485:4 (if - ;;@ (lib)/allocator/tlsf.ts:483:4 + ;;@ (lib)/allocator/tlsf.ts:484:4 (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:483:15 + ;;@ (lib)/allocator/tlsf.ts:484:15 (get_global "$(lib)/allocator/tlsf/ROOT") ) - ;;@ (lib)/allocator/tlsf.ts:484:14 + ;;@ (lib)/allocator/tlsf.ts:485:14 (block - ;;@ (lib)/allocator/tlsf.ts:488:6 + ;;@ (lib)/allocator/tlsf.ts:489:6 (i32.store - ;;@ (lib)/allocator/tlsf.ts:485:6 + ;;@ (lib)/allocator/tlsf.ts:486:6 (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:485:18 + ;;@ (lib)/allocator/tlsf.ts:486:18 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:485:36 + ;;@ (lib)/allocator/tlsf.ts:486:36 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:485:43 + ;;@ (lib)/allocator/tlsf.ts:486:43 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:488:19 + ;;@ (lib)/allocator/tlsf.ts:489:19 (i32.or - ;;@ (lib)/allocator/tlsf.ts:486:22 + ;;@ (lib)/allocator/tlsf.ts:487:22 (i32.load (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:488:31 + ;;@ (lib)/allocator/tlsf.ts:489:31 (i32.const 1) ) ) - ;;@ (lib)/allocator/tlsf.ts:489:11 + ;;@ (lib)/allocator/tlsf.ts:490:11 (call "$(lib)/allocator/tlsf/Root#insert" - ;;@ (lib)/allocator/tlsf.ts:489:6 + ;;@ (lib)/allocator/tlsf.ts:490:6 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:489:18 + ;;@ (lib)/allocator/tlsf.ts:490:18 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:489:36 + ;;@ (lib)/allocator/tlsf.ts:490:36 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:489:43 + ;;@ (lib)/allocator/tlsf.ts:490:43 (i32.const 4) ) ) diff --git a/tests/allocators/tlsf/tlsf.untouched.wat b/tests/allocators/tlsf/tlsf.untouched.wat index 4552b533..1e9e1bc2 100644 --- a/tests/allocators/tlsf/tlsf.untouched.wat +++ b/tests/allocators/tlsf/tlsf.untouched.wat @@ -16,7 +16,6 @@ (global "$(lib)/allocator/tlsf/SL_SIZE" i32 (i32.const 32)) (global "$(lib)/allocator/tlsf/SB_BITS" i32 (i32.const 7)) (global "$(lib)/allocator/tlsf/SB_SIZE" i32 (i32.const 128)) - (global "$(lib)/allocator/tlsf/SB_MASK" i32 (i32.const 127)) (global "$(lib)/allocator/tlsf/FL_BITS" i32 (i32.const 23)) (global "$(lib)/allocator/tlsf/FREE" i32 (i32.const 1)) (global "$(lib)/allocator/tlsf/LEFT_FREE" i32 (i32.const 2)) @@ -30,22 +29,22 @@ (export "memory" (memory $0)) (start $start) (func "$(lib)/allocator/tlsf/Root#set:tailRef" (; 1 ;) (type $iiv) (param $0 i32) (param $1 i32) - ;;@ (lib)/allocator/tlsf.ts:175:30 + ;;@ (lib)/allocator/tlsf.ts:174:30 (i32.store offset=3040 - ;;@ (lib)/allocator/tlsf.ts:175:43 + ;;@ (lib)/allocator/tlsf.ts:174:43 (i32.const 0) - ;;@ (lib)/allocator/tlsf.ts:175:46 + ;;@ (lib)/allocator/tlsf.ts:174:46 (get_local $1) ) ) (func "$(lib)/allocator/tlsf/Root#setSLMap" (; 2 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - ;;@ (lib)/allocator/tlsf.ts:138:4 + ;;@ (lib)/allocator/tlsf.ts:137:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:138:11 + ;;@ (lib)/allocator/tlsf.ts:137:11 (i32.lt_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:138:16 + ;;@ (lib)/allocator/tlsf.ts:137:16 (i32.const 23) ) ) @@ -53,37 +52,57 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 138) + (i32.const 137) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:139:4 + ;;@ (lib)/allocator/tlsf.ts:138:4 (i32.store offset=4 - ;;@ (lib)/allocator/tlsf.ts:139:15 + ;;@ (lib)/allocator/tlsf.ts:138:15 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:139:41 + ;;@ (lib)/allocator/tlsf.ts:138:41 (i32.mul (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:139:46 + ;;@ (lib)/allocator/tlsf.ts:138:46 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:139:49 + ;;@ (lib)/allocator/tlsf.ts:138:49 (get_local $2) ) ) (func "$(lib)/allocator/tlsf/Root#setHead" (; 3 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + ;;@ (lib)/allocator/tlsf.ts:160:4 + (if + (i32.eqz + ;;@ (lib)/allocator/tlsf.ts:160:11 + (i32.lt_u + (get_local $1) + ;;@ (lib)/allocator/tlsf.ts:160:16 + (i32.const 23) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 160) + (i32.const 4) + ) + (unreachable) + ) + ) ;;@ (lib)/allocator/tlsf.ts:161:4 (if (i32.eqz ;;@ (lib)/allocator/tlsf.ts:161:11 (i32.lt_u - (get_local $1) + (get_local $2) ;;@ (lib)/allocator/tlsf.ts:161:16 - (i32.const 23) + (i32.const 32) ) ) (block @@ -97,73 +116,53 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:162:4 - (if - (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:162:11 - (i32.lt_u - (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:162:16 - (i32.const 32) - ) - ) - (block - (call $abort - (i32.const 0) - (i32.const 4) - (i32.const 162) - (i32.const 4) - ) - (unreachable) - ) - ) - ;;@ (lib)/allocator/tlsf.ts:163:4 (i32.store offset=96 - ;;@ (lib)/allocator/tlsf.ts:164:6 + ;;@ (lib)/allocator/tlsf.ts:163:6 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:164:32 + ;;@ (lib)/allocator/tlsf.ts:163:32 (i32.mul (i32.add - ;;@ (lib)/allocator/tlsf.ts:164:33 + ;;@ (lib)/allocator/tlsf.ts:163:33 (i32.mul (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:164:38 + ;;@ (lib)/allocator/tlsf.ts:163:38 (i32.const 32) ) - ;;@ (lib)/allocator/tlsf.ts:164:48 + ;;@ (lib)/allocator/tlsf.ts:163:48 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:164:61 + ;;@ (lib)/allocator/tlsf.ts:163:61 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:165:6 + ;;@ (lib)/allocator/tlsf.ts:164:6 (get_local $3) ) ) (func "$(lib)/allocator/tlsf/Root#get:tailRef" (; 4 ;) (type $ii) (param $0 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:174:58 + ;;@ (lib)/allocator/tlsf.ts:173:58 (return - ;;@ (lib)/allocator/tlsf.ts:174:32 + ;;@ (lib)/allocator/tlsf.ts:173:32 (i32.load offset=3040 - ;;@ (lib)/allocator/tlsf.ts:174:44 + ;;@ (lib)/allocator/tlsf.ts:173:44 (i32.const 0) ) ) ) (func "$(lib)/allocator/tlsf/Block#get:right" (; 5 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) - ;;@ (lib)/allocator/tlsf.ts:83:4 + ;;@ (lib)/allocator/tlsf.ts:82:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:83:11 + ;;@ (lib)/allocator/tlsf.ts:82:11 (i32.and (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:83:23 + ;;@ (lib)/allocator/tlsf.ts:82:23 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:83:24 + ;;@ (lib)/allocator/tlsf.ts:82:24 (i32.const 3) (i32.const -1) ) @@ -173,35 +172,35 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 83) + (i32.const 82) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:88:4 + ;;@ (lib)/allocator/tlsf.ts:87:4 (return - ;;@ (lib)/allocator/tlsf.ts:84:11 + ;;@ (lib)/allocator/tlsf.ts:83:11 (if (result i32) (i32.eqz (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:85:6 + ;;@ (lib)/allocator/tlsf.ts:84:6 (i32.add - ;;@ (lib)/allocator/tlsf.ts:86:8 + ;;@ (lib)/allocator/tlsf.ts:85:8 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:86:34 + ;;@ (lib)/allocator/tlsf.ts:85:34 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:86:47 + ;;@ (lib)/allocator/tlsf.ts:85:47 (i32.and - ;;@ (lib)/allocator/tlsf.ts:86:48 + ;;@ (lib)/allocator/tlsf.ts:85:48 (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:86:60 + ;;@ (lib)/allocator/tlsf.ts:85:60 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:86:61 + ;;@ (lib)/allocator/tlsf.ts:85:61 (i32.const 3) (i32.const -1) ) @@ -213,7 +212,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 84) + (i32.const 83) (i32.const 11) ) (unreachable) @@ -223,13 +222,13 @@ ) ) (func "$(lib)/allocator/tlsf/fls" (; 6 ;) (type $ii) (param $0 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:423:2 + ;;@ (lib)/allocator/tlsf.ts:421:2 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:423:9 + ;;@ (lib)/allocator/tlsf.ts:421:9 (i32.ne (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:423:17 + ;;@ (lib)/allocator/tlsf.ts:421:17 (i32.const 0) ) ) @@ -237,36 +236,56 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 423) + (i32.const 421) (i32.const 2) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:424:2 + ;;@ (lib)/allocator/tlsf.ts:422:2 (nop) - ;;@ (lib)/allocator/tlsf.ts:425:26 + ;;@ (lib)/allocator/tlsf.ts:423:26 (return - ;;@ (lib)/allocator/tlsf.ts:425:9 + ;;@ (lib)/allocator/tlsf.ts:423:9 (i32.sub (i32.const 31) - ;;@ (lib)/allocator/tlsf.ts:425:15 + ;;@ (lib)/allocator/tlsf.ts:423:15 (i32.clz - ;;@ (lib)/allocator/tlsf.ts:425:22 + ;;@ (lib)/allocator/tlsf.ts:423:22 (get_local $0) ) ) ) ) (func "$(lib)/allocator/tlsf/Root#getHead" (; 7 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + ;;@ (lib)/allocator/tlsf.ts:151:4 + (if + (i32.eqz + ;;@ (lib)/allocator/tlsf.ts:151:11 + (i32.lt_u + (get_local $1) + ;;@ (lib)/allocator/tlsf.ts:151:16 + (i32.const 23) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 151) + (i32.const 4) + ) + (unreachable) + ) + ) ;;@ (lib)/allocator/tlsf.ts:152:4 (if (i32.eqz ;;@ (lib)/allocator/tlsf.ts:152:11 (i32.lt_u - (get_local $1) + (get_local $2) ;;@ (lib)/allocator/tlsf.ts:152:16 - (i32.const 23) + (i32.const 32) ) ) (block @@ -279,46 +298,26 @@ (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:153:4 - (if - (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:153:11 - (i32.lt_u - (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:153:16 - (i32.const 32) - ) - ) - (block - (call $abort - (i32.const 0) - (i32.const 4) - (i32.const 153) - (i32.const 4) - ) - (unreachable) - ) - ) - ;;@ (lib)/allocator/tlsf.ts:156:20 + ;;@ (lib)/allocator/tlsf.ts:155:20 (return - ;;@ (lib)/allocator/tlsf.ts:154:11 + ;;@ (lib)/allocator/tlsf.ts:153:11 (i32.load offset=96 - ;;@ (lib)/allocator/tlsf.ts:155:6 + ;;@ (lib)/allocator/tlsf.ts:154:6 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:155:32 + ;;@ (lib)/allocator/tlsf.ts:154:32 (i32.mul (i32.add - ;;@ (lib)/allocator/tlsf.ts:155:33 + ;;@ (lib)/allocator/tlsf.ts:154:33 (i32.mul (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:155:38 + ;;@ (lib)/allocator/tlsf.ts:154:38 (i32.const 32) ) - ;;@ (lib)/allocator/tlsf.ts:155:48 + ;;@ (lib)/allocator/tlsf.ts:154:48 (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:155:61 + ;;@ (lib)/allocator/tlsf.ts:154:61 (i32.const 4) ) ) @@ -326,13 +325,13 @@ ) ) (func "$(lib)/allocator/tlsf/Root#getSLMap" (; 8 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:132:4 + ;;@ (lib)/allocator/tlsf.ts:131:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:132:11 + ;;@ (lib)/allocator/tlsf.ts:131:11 (i32.lt_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:132:16 + ;;@ (lib)/allocator/tlsf.ts:131:16 (i32.const 23) ) ) @@ -340,23 +339,23 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 132) + (i32.const 131) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:133:68 + ;;@ (lib)/allocator/tlsf.ts:132:68 (return - ;;@ (lib)/allocator/tlsf.ts:133:11 + ;;@ (lib)/allocator/tlsf.ts:132:11 (i32.load offset=4 - ;;@ (lib)/allocator/tlsf.ts:133:21 + ;;@ (lib)/allocator/tlsf.ts:132:21 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:133:47 + ;;@ (lib)/allocator/tlsf.ts:132:47 (i32.mul (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:133:52 + ;;@ (lib)/allocator/tlsf.ts:132:52 (i32.const 4) ) ) @@ -372,20 +371,20 @@ (local $7 i32) (local $8 i32) (local $9 i32) - ;;@ (lib)/allocator/tlsf.ts:251:4 + ;;@ (lib)/allocator/tlsf.ts:250:4 (set_local $2 - ;;@ (lib)/allocator/tlsf.ts:251:20 + ;;@ (lib)/allocator/tlsf.ts:250:20 (i32.load (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:252:4 + ;;@ (lib)/allocator/tlsf.ts:251:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:252:11 + ;;@ (lib)/allocator/tlsf.ts:251:11 (i32.and (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:252:23 + ;;@ (lib)/allocator/tlsf.ts:251:23 (i32.const 1) ) ) @@ -393,45 +392,42 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 252) + (i32.const 251) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:253:4 + ;;@ (lib)/allocator/tlsf.ts:252:4 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:253:15 + ;;@ (lib)/allocator/tlsf.ts:252:15 (i32.and (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:253:27 + ;;@ (lib)/allocator/tlsf.ts:252:27 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:253:28 + ;;@ (lib)/allocator/tlsf.ts:252:28 (i32.const 3) (i32.const -1) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:254:4 + ;;@ (lib)/allocator/tlsf.ts:253:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:254:11 + ;;@ (lib)/allocator/tlsf.ts:253:11 (i32.and (if (result i32) - (i32.ne - (tee_local $4 - (i32.ge_u - (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:254:19 - (i32.const 12) - ) + (tee_local $4 + (i32.ge_u + (get_local $3) + ;;@ (lib)/allocator/tlsf.ts:253:19 + (i32.const 12) ) - (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:254:37 + ;;@ (lib)/allocator/tlsf.ts:253:37 (i32.lt_u (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:254:44 + ;;@ (lib)/allocator/tlsf.ts:253:44 (i32.const 1073741824) ) (get_local $4) @@ -443,189 +439,189 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 254) + (i32.const 253) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:257:4 + ;;@ (lib)/allocator/tlsf.ts:256:4 (nop) - ;;@ (lib)/allocator/tlsf.ts:258:4 + ;;@ (lib)/allocator/tlsf.ts:257:4 (if - ;;@ (lib)/allocator/tlsf.ts:258:8 + ;;@ (lib)/allocator/tlsf.ts:257:8 (i32.lt_u (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:258:15 + ;;@ (lib)/allocator/tlsf.ts:257:15 (i32.const 128) ) - ;;@ (lib)/allocator/tlsf.ts:258:24 + ;;@ (lib)/allocator/tlsf.ts:257:24 (block - ;;@ (lib)/allocator/tlsf.ts:259:6 + ;;@ (lib)/allocator/tlsf.ts:258:6 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:259:11 + ;;@ (lib)/allocator/tlsf.ts:258:11 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:260:6 + ;;@ (lib)/allocator/tlsf.ts:259:6 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:260:11 + ;;@ (lib)/allocator/tlsf.ts:259:11 (i32.div_u - ;;@ (lib)/allocator/tlsf.ts:260:17 + ;;@ (lib)/allocator/tlsf.ts:259:17 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:260:24 + ;;@ (lib)/allocator/tlsf.ts:259:24 (i32.const 4) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:261:11 + ;;@ (lib)/allocator/tlsf.ts:260:11 (block - ;;@ (lib)/allocator/tlsf.ts:262:6 + ;;@ (lib)/allocator/tlsf.ts:261:6 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:262:11 + ;;@ (lib)/allocator/tlsf.ts:261:11 (call "$(lib)/allocator/tlsf/fls" - ;;@ (lib)/allocator/tlsf.ts:262:22 + ;;@ (lib)/allocator/tlsf.ts:261:22 (get_local $3) ) ) - ;;@ (lib)/allocator/tlsf.ts:263:6 + ;;@ (lib)/allocator/tlsf.ts:262:6 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:263:11 + ;;@ (lib)/allocator/tlsf.ts:262:11 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:263:17 + ;;@ (lib)/allocator/tlsf.ts:262:17 (i32.shr_u - ;;@ (lib)/allocator/tlsf.ts:263:18 + ;;@ (lib)/allocator/tlsf.ts:262:18 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:263:26 + ;;@ (lib)/allocator/tlsf.ts:262:26 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:263:27 + ;;@ (lib)/allocator/tlsf.ts:262:27 (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:263:32 + ;;@ (lib)/allocator/tlsf.ts:262:32 (i32.const 5) ) ) - ;;@ (lib)/allocator/tlsf.ts:263:44 + ;;@ (lib)/allocator/tlsf.ts:262:44 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:263:45 + ;;@ (lib)/allocator/tlsf.ts:262:45 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:263:50 + ;;@ (lib)/allocator/tlsf.ts:262:50 (i32.const 5) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:264:6 + ;;@ (lib)/allocator/tlsf.ts:263:6 (set_local $5 (i32.sub (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:264:12 + ;;@ (lib)/allocator/tlsf.ts:263:12 (i32.sub (i32.const 7) - ;;@ (lib)/allocator/tlsf.ts:264:22 + ;;@ (lib)/allocator/tlsf.ts:263:22 (i32.const 1) ) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:268:4 + ;;@ (lib)/allocator/tlsf.ts:267:4 (set_local $7 - ;;@ (lib)/allocator/tlsf.ts:268:15 + ;;@ (lib)/allocator/tlsf.ts:267:15 (i32.load offset=4 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:269:4 + ;;@ (lib)/allocator/tlsf.ts:268:4 (set_local $8 - ;;@ (lib)/allocator/tlsf.ts:269:15 + ;;@ (lib)/allocator/tlsf.ts:268:15 (i32.load offset=8 (get_local $1) ) ) + ;;@ (lib)/allocator/tlsf.ts:269:4 + (if + ;;@ (lib)/allocator/tlsf.ts:269:8 + (get_local $7) + ;;@ (lib)/allocator/tlsf.ts:269:14 + (i32.store offset=8 + (get_local $7) + ;;@ (lib)/allocator/tlsf.ts:269:26 + (get_local $8) + ) + ) ;;@ (lib)/allocator/tlsf.ts:270:4 (if ;;@ (lib)/allocator/tlsf.ts:270:8 - (get_local $7) - ;;@ (lib)/allocator/tlsf.ts:271:6 - (i32.store offset=8 - (get_local $7) - ;;@ (lib)/allocator/tlsf.ts:271:18 - (get_local $8) - ) - ) - ;;@ (lib)/allocator/tlsf.ts:272:4 - (if - ;;@ (lib)/allocator/tlsf.ts:272:8 (get_local $8) - ;;@ (lib)/allocator/tlsf.ts:273:6 + ;;@ (lib)/allocator/tlsf.ts:270:14 (i32.store offset=4 (get_local $8) - ;;@ (lib)/allocator/tlsf.ts:273:18 + ;;@ (lib)/allocator/tlsf.ts:270:26 (get_local $7) ) ) - ;;@ (lib)/allocator/tlsf.ts:276:4 + ;;@ (lib)/allocator/tlsf.ts:273:4 (if - ;;@ (lib)/allocator/tlsf.ts:276:8 + ;;@ (lib)/allocator/tlsf.ts:273:8 (i32.eq (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:276:22 + ;;@ (lib)/allocator/tlsf.ts:273:22 (call "$(lib)/allocator/tlsf/Root#getHead" - ;;@ (lib)/allocator/tlsf.ts:276:17 + ;;@ (lib)/allocator/tlsf.ts:273:17 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:276:30 + ;;@ (lib)/allocator/tlsf.ts:273:30 (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:276:34 + ;;@ (lib)/allocator/tlsf.ts:273:34 (get_local $6) ) ) - ;;@ (lib)/allocator/tlsf.ts:276:39 + ;;@ (lib)/allocator/tlsf.ts:273:39 (block - ;;@ (lib)/allocator/tlsf.ts:277:11 + ;;@ (lib)/allocator/tlsf.ts:274:11 (call "$(lib)/allocator/tlsf/Root#setHead" - ;;@ (lib)/allocator/tlsf.ts:277:6 + ;;@ (lib)/allocator/tlsf.ts:274:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:277:19 + ;;@ (lib)/allocator/tlsf.ts:274:19 (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:277:23 + ;;@ (lib)/allocator/tlsf.ts:274:23 (get_local $6) - ;;@ (lib)/allocator/tlsf.ts:277:27 + ;;@ (lib)/allocator/tlsf.ts:274:27 (get_local $8) ) - ;;@ (lib)/allocator/tlsf.ts:280:6 + ;;@ (lib)/allocator/tlsf.ts:277:6 (if - ;;@ (lib)/allocator/tlsf.ts:280:10 + ;;@ (lib)/allocator/tlsf.ts:277:10 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:280:11 + ;;@ (lib)/allocator/tlsf.ts:277:11 (get_local $8) ) - ;;@ (lib)/allocator/tlsf.ts:280:17 + ;;@ (lib)/allocator/tlsf.ts:277:17 (block - ;;@ (lib)/allocator/tlsf.ts:281:8 + ;;@ (lib)/allocator/tlsf.ts:278:8 (set_local $9 - ;;@ (lib)/allocator/tlsf.ts:281:25 + ;;@ (lib)/allocator/tlsf.ts:278:25 (call "$(lib)/allocator/tlsf/Root#getSLMap" - ;;@ (lib)/allocator/tlsf.ts:281:20 + ;;@ (lib)/allocator/tlsf.ts:278:20 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:281:34 + ;;@ (lib)/allocator/tlsf.ts:278:34 (get_local $5) ) ) - ;;@ (lib)/allocator/tlsf.ts:282:13 + ;;@ (lib)/allocator/tlsf.ts:279:13 (call "$(lib)/allocator/tlsf/Root#setSLMap" - ;;@ (lib)/allocator/tlsf.ts:282:8 + ;;@ (lib)/allocator/tlsf.ts:279:8 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:282:22 + ;;@ (lib)/allocator/tlsf.ts:279:22 (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:282:26 + ;;@ (lib)/allocator/tlsf.ts:279:26 (tee_local $9 (i32.and (get_local $9) - ;;@ (lib)/allocator/tlsf.ts:282:35 + ;;@ (lib)/allocator/tlsf.ts:279:35 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:282:36 + ;;@ (lib)/allocator/tlsf.ts:279:36 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:282:37 + ;;@ (lib)/allocator/tlsf.ts:279:37 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:282:42 + ;;@ (lib)/allocator/tlsf.ts:279:42 (get_local $6) ) (i32.const -1) @@ -633,27 +629,27 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:285:8 + ;;@ (lib)/allocator/tlsf.ts:282:8 (if - ;;@ (lib)/allocator/tlsf.ts:285:12 + ;;@ (lib)/allocator/tlsf.ts:282:12 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:285:13 + ;;@ (lib)/allocator/tlsf.ts:282:13 (get_local $9) ) - ;;@ (lib)/allocator/tlsf.ts:286:10 + ;;@ (lib)/allocator/tlsf.ts:282:20 (i32.store (get_local $0) (i32.and (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:286:24 + ;;@ (lib)/allocator/tlsf.ts:282:34 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:286:25 + ;;@ (lib)/allocator/tlsf.ts:282:35 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:286:26 + ;;@ (lib)/allocator/tlsf.ts:282:36 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:286:31 + ;;@ (lib)/allocator/tlsf.ts:282:41 (get_local $5) ) (i32.const -1) @@ -668,15 +664,15 @@ ) (func "$(lib)/allocator/tlsf/Block#get:left" (; 10 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) - ;;@ (lib)/allocator/tlsf.ts:75:4 + ;;@ (lib)/allocator/tlsf.ts:74:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:75:11 + ;;@ (lib)/allocator/tlsf.ts:74:11 (i32.and (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:75:23 + ;;@ (lib)/allocator/tlsf.ts:74:23 (i32.const 2) ) ) @@ -684,24 +680,24 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 75) + (i32.const 74) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:78:4 + ;;@ (lib)/allocator/tlsf.ts:77:4 (return - ;;@ (lib)/allocator/tlsf.ts:76:11 + ;;@ (lib)/allocator/tlsf.ts:75:11 (if (result i32) (i32.eqz (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:77:6 + ;;@ (lib)/allocator/tlsf.ts:76:6 (i32.load - ;;@ (lib)/allocator/tlsf.ts:77:18 + ;;@ (lib)/allocator/tlsf.ts:76:18 (i32.sub (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:77:44 + ;;@ (lib)/allocator/tlsf.ts:76:44 (i32.const 4) ) ) @@ -711,7 +707,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 76) + (i32.const 75) (i32.const 11) ) (unreachable) @@ -721,15 +717,15 @@ ) ) (func "$(lib)/allocator/tlsf/Root#setJump" (; 11 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - ;;@ (lib)/allocator/tlsf.ts:331:4 + ;;@ (lib)/allocator/tlsf.ts:327:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:331:11 + ;;@ (lib)/allocator/tlsf.ts:327:11 (i32.and (i32.load (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:331:23 + ;;@ (lib)/allocator/tlsf.ts:327:23 (i32.const 1) ) ) @@ -737,21 +733,21 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 331) + (i32.const 327) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:332:4 + ;;@ (lib)/allocator/tlsf.ts:328:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:332:11 + ;;@ (lib)/allocator/tlsf.ts:328:11 (i32.eq (call "$(lib)/allocator/tlsf/Block#get:right" (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:332:25 + ;;@ (lib)/allocator/tlsf.ts:328:25 (get_local $2) ) ) @@ -759,21 +755,21 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 332) + (i32.const 328) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:333:4 + ;;@ (lib)/allocator/tlsf.ts:329:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:333:11 + ;;@ (lib)/allocator/tlsf.ts:329:11 (i32.and (i32.load (get_local $2) ) - ;;@ (lib)/allocator/tlsf.ts:333:24 + ;;@ (lib)/allocator/tlsf.ts:329:24 (i32.const 2) ) ) @@ -781,21 +777,21 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 333) + (i32.const 329) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:334:4 + ;;@ (lib)/allocator/tlsf.ts:330:4 (i32.store - ;;@ (lib)/allocator/tlsf.ts:335:6 + ;;@ (lib)/allocator/tlsf.ts:331:6 (i32.sub (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:335:33 + ;;@ (lib)/allocator/tlsf.ts:331:33 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:336:6 + ;;@ (lib)/allocator/tlsf.ts:332:6 (get_local $1) ) ) @@ -810,36 +806,36 @@ (local $9 i32) (local $10 i32) (local $11 i32) - ;;@ (lib)/allocator/tlsf.ts:183:4 + ;;@ (lib)/allocator/tlsf.ts:182:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:183:11 + ;;@ (lib)/allocator/tlsf.ts:182:11 (get_local $1) ) (block (call $abort (i32.const 0) (i32.const 4) - (i32.const 183) + (i32.const 182) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:184:4 + ;;@ (lib)/allocator/tlsf.ts:183:4 (set_local $2 - ;;@ (lib)/allocator/tlsf.ts:184:20 + ;;@ (lib)/allocator/tlsf.ts:183:20 (i32.load (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:185:4 + ;;@ (lib)/allocator/tlsf.ts:184:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:185:11 + ;;@ (lib)/allocator/tlsf.ts:184:11 (i32.and (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:185:23 + ;;@ (lib)/allocator/tlsf.ts:184:23 (i32.const 1) ) ) @@ -847,47 +843,44 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 185) + (i32.const 184) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:186:4 + ;;@ (lib)/allocator/tlsf.ts:185:4 (nop) - ;;@ (lib)/allocator/tlsf.ts:187:4 + ;;@ (lib)/allocator/tlsf.ts:186:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:188:6 + ;;@ (lib)/allocator/tlsf.ts:187:6 (i32.and (if (result i32) - (i32.ne - (tee_local $4 - (i32.ge_u - (tee_local $3 - ;;@ (lib)/allocator/tlsf.ts:188:14 - (i32.and - (i32.load - (get_local $1) - ) - ;;@ (lib)/allocator/tlsf.ts:188:27 - (i32.xor - ;;@ (lib)/allocator/tlsf.ts:188:28 - (i32.const 3) - (i32.const -1) - ) + (tee_local $4 + (i32.ge_u + (tee_local $3 + ;;@ (lib)/allocator/tlsf.ts:187:14 + (i32.and + (i32.load + (get_local $1) + ) + ;;@ (lib)/allocator/tlsf.ts:187:27 + (i32.xor + ;;@ (lib)/allocator/tlsf.ts:187:28 + (i32.const 3) + (i32.const -1) ) ) - ;;@ (lib)/allocator/tlsf.ts:188:37 - (i32.const 12) ) + ;;@ (lib)/allocator/tlsf.ts:187:37 + (i32.const 12) ) - (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:188:55 + ;;@ (lib)/allocator/tlsf.ts:187:55 (i32.lt_u (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:188:62 + ;;@ (lib)/allocator/tlsf.ts:187:62 (i32.const 1073741824) ) (get_local $4) @@ -899,19 +892,19 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 187) + (i32.const 186) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:191:4 + ;;@ (lib)/allocator/tlsf.ts:190:4 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:191:23 + ;;@ (lib)/allocator/tlsf.ts:190:23 (if (result i32) (i32.eqz (tee_local $4 - ;;@ (lib)/allocator/tlsf.ts:191:30 + ;;@ (lib)/allocator/tlsf.ts:190:30 (call "$(lib)/allocator/tlsf/Block#get:right" (get_local $1) ) @@ -921,7 +914,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 191) + (i32.const 190) (i32.const 23) ) (unreachable) @@ -929,48 +922,48 @@ (get_local $4) ) ) - ;;@ (lib)/allocator/tlsf.ts:192:4 + ;;@ (lib)/allocator/tlsf.ts:191:4 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:192:20 + ;;@ (lib)/allocator/tlsf.ts:191:20 (i32.load (get_local $5) ) ) - ;;@ (lib)/allocator/tlsf.ts:195:4 + ;;@ (lib)/allocator/tlsf.ts:194:4 (if - ;;@ (lib)/allocator/tlsf.ts:195:8 + ;;@ (lib)/allocator/tlsf.ts:194:8 (i32.and (get_local $6) - ;;@ (lib)/allocator/tlsf.ts:195:20 + ;;@ (lib)/allocator/tlsf.ts:194:20 (i32.const 1) ) - ;;@ (lib)/allocator/tlsf.ts:195:26 + ;;@ (lib)/allocator/tlsf.ts:194:26 (block - ;;@ (lib)/allocator/tlsf.ts:196:11 + ;;@ (lib)/allocator/tlsf.ts:195:11 (call "$(lib)/allocator/tlsf/Root#remove" - ;;@ (lib)/allocator/tlsf.ts:196:6 + ;;@ (lib)/allocator/tlsf.ts:195:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:196:18 + ;;@ (lib)/allocator/tlsf.ts:195:18 (get_local $5) ) - ;;@ (lib)/allocator/tlsf.ts:197:6 + ;;@ (lib)/allocator/tlsf.ts:196:6 (i32.store (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:197:19 + ;;@ (lib)/allocator/tlsf.ts:196:19 (tee_local $2 (i32.add - ;;@ (lib)/allocator/tlsf.ts:197:20 + ;;@ (lib)/allocator/tlsf.ts:196:20 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:197:33 + ;;@ (lib)/allocator/tlsf.ts:196:33 (i32.add (i32.const 4) - ;;@ (lib)/allocator/tlsf.ts:197:46 + ;;@ (lib)/allocator/tlsf.ts:196:46 (i32.and - ;;@ (lib)/allocator/tlsf.ts:197:47 + ;;@ (lib)/allocator/tlsf.ts:196:47 (get_local $6) - ;;@ (lib)/allocator/tlsf.ts:197:59 + ;;@ (lib)/allocator/tlsf.ts:196:59 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:197:60 + ;;@ (lib)/allocator/tlsf.ts:196:60 (i32.const 3) (i32.const -1) ) @@ -979,39 +972,39 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:198:6 + ;;@ (lib)/allocator/tlsf.ts:197:6 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:198:14 + ;;@ (lib)/allocator/tlsf.ts:197:14 (call "$(lib)/allocator/tlsf/Block#get:right" (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:199:6 + ;;@ (lib)/allocator/tlsf.ts:198:6 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:199:18 + ;;@ (lib)/allocator/tlsf.ts:198:18 (i32.load (get_local $5) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:204:4 + ;;@ (lib)/allocator/tlsf.ts:203:4 (if - ;;@ (lib)/allocator/tlsf.ts:204:8 + ;;@ (lib)/allocator/tlsf.ts:203:8 (i32.and (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:204:20 + ;;@ (lib)/allocator/tlsf.ts:203:20 (i32.const 2) ) - ;;@ (lib)/allocator/tlsf.ts:204:31 + ;;@ (lib)/allocator/tlsf.ts:203:31 (block - ;;@ (lib)/allocator/tlsf.ts:205:6 + ;;@ (lib)/allocator/tlsf.ts:204:6 (set_local $7 - ;;@ (lib)/allocator/tlsf.ts:205:24 + ;;@ (lib)/allocator/tlsf.ts:204:24 (if (result i32) (i32.eqz (tee_local $4 - ;;@ (lib)/allocator/tlsf.ts:205:31 + ;;@ (lib)/allocator/tlsf.ts:204:31 (call "$(lib)/allocator/tlsf/Block#get:left" (get_local $1) ) @@ -1021,7 +1014,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 205) + (i32.const 204) (i32.const 24) ) (unreachable) @@ -1029,20 +1022,20 @@ (get_local $4) ) ) - ;;@ (lib)/allocator/tlsf.ts:206:6 + ;;@ (lib)/allocator/tlsf.ts:205:6 (set_local $8 - ;;@ (lib)/allocator/tlsf.ts:206:21 + ;;@ (lib)/allocator/tlsf.ts:205:21 (i32.load (get_local $7) ) ) - ;;@ (lib)/allocator/tlsf.ts:207:6 + ;;@ (lib)/allocator/tlsf.ts:206:6 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:207:13 + ;;@ (lib)/allocator/tlsf.ts:206:13 (i32.and (get_local $8) - ;;@ (lib)/allocator/tlsf.ts:207:24 + ;;@ (lib)/allocator/tlsf.ts:206:24 (i32.const 1) ) ) @@ -1050,37 +1043,37 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 207) + (i32.const 206) (i32.const 6) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:208:11 + ;;@ (lib)/allocator/tlsf.ts:207:11 (call "$(lib)/allocator/tlsf/Root#remove" - ;;@ (lib)/allocator/tlsf.ts:208:6 + ;;@ (lib)/allocator/tlsf.ts:207:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:208:18 + ;;@ (lib)/allocator/tlsf.ts:207:18 (get_local $7) ) - ;;@ (lib)/allocator/tlsf.ts:209:6 + ;;@ (lib)/allocator/tlsf.ts:208:6 (i32.store (get_local $7) - ;;@ (lib)/allocator/tlsf.ts:209:18 + ;;@ (lib)/allocator/tlsf.ts:208:18 (tee_local $8 (i32.add - ;;@ (lib)/allocator/tlsf.ts:209:19 + ;;@ (lib)/allocator/tlsf.ts:208:19 (get_local $8) - ;;@ (lib)/allocator/tlsf.ts:209:31 + ;;@ (lib)/allocator/tlsf.ts:208:31 (i32.add (i32.const 4) - ;;@ (lib)/allocator/tlsf.ts:209:44 + ;;@ (lib)/allocator/tlsf.ts:208:44 (i32.and - ;;@ (lib)/allocator/tlsf.ts:209:45 + ;;@ (lib)/allocator/tlsf.ts:208:45 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:209:57 + ;;@ (lib)/allocator/tlsf.ts:208:57 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:209:58 + ;;@ (lib)/allocator/tlsf.ts:208:58 (i32.const 3) (i32.const -1) ) @@ -1089,70 +1082,67 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:210:6 + ;;@ (lib)/allocator/tlsf.ts:209:6 (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:210:14 + ;;@ (lib)/allocator/tlsf.ts:209:14 (get_local $7) ) - ;;@ (lib)/allocator/tlsf.ts:211:6 + ;;@ (lib)/allocator/tlsf.ts:210:6 (set_local $2 - ;;@ (lib)/allocator/tlsf.ts:211:18 + ;;@ (lib)/allocator/tlsf.ts:210:18 (get_local $8) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:215:4 + ;;@ (lib)/allocator/tlsf.ts:214:4 (i32.store (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:215:17 + ;;@ (lib)/allocator/tlsf.ts:214:17 (i32.or (get_local $6) - ;;@ (lib)/allocator/tlsf.ts:215:29 + ;;@ (lib)/allocator/tlsf.ts:214:29 (i32.const 2) ) ) - ;;@ (lib)/allocator/tlsf.ts:216:9 + ;;@ (lib)/allocator/tlsf.ts:215:9 (call "$(lib)/allocator/tlsf/Root#setJump" - ;;@ (lib)/allocator/tlsf.ts:216:4 + ;;@ (lib)/allocator/tlsf.ts:215:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:216:17 + ;;@ (lib)/allocator/tlsf.ts:215:17 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:216:24 + ;;@ (lib)/allocator/tlsf.ts:215:24 (get_local $5) ) - ;;@ (lib)/allocator/tlsf.ts:219:4 + ;;@ (lib)/allocator/tlsf.ts:218:4 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:219:11 + ;;@ (lib)/allocator/tlsf.ts:218:11 (i32.and (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:219:23 + ;;@ (lib)/allocator/tlsf.ts:218:23 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:219:24 + ;;@ (lib)/allocator/tlsf.ts:218:24 (i32.const 3) (i32.const -1) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:220:4 + ;;@ (lib)/allocator/tlsf.ts:219:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:220:11 + ;;@ (lib)/allocator/tlsf.ts:219:11 (i32.and (if (result i32) - (i32.ne - (tee_local $4 - (i32.ge_u - (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:220:19 - (i32.const 12) - ) + (tee_local $4 + (i32.ge_u + (get_local $3) + ;;@ (lib)/allocator/tlsf.ts:219:19 + (i32.const 12) ) - (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:220:37 + ;;@ (lib)/allocator/tlsf.ts:219:37 (i32.lt_u (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:220:44 + ;;@ (lib)/allocator/tlsf.ts:219:44 (i32.const 1073741824) ) (get_local $4) @@ -1164,171 +1154,171 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 220) + (i32.const 219) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:223:4 + ;;@ (lib)/allocator/tlsf.ts:222:4 (nop) - ;;@ (lib)/allocator/tlsf.ts:224:4 + ;;@ (lib)/allocator/tlsf.ts:223:4 (if - ;;@ (lib)/allocator/tlsf.ts:224:8 + ;;@ (lib)/allocator/tlsf.ts:223:8 (i32.lt_u (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:224:15 + ;;@ (lib)/allocator/tlsf.ts:223:15 (i32.const 128) ) - ;;@ (lib)/allocator/tlsf.ts:224:24 + ;;@ (lib)/allocator/tlsf.ts:223:24 (block - ;;@ (lib)/allocator/tlsf.ts:225:6 + ;;@ (lib)/allocator/tlsf.ts:224:6 (set_local $9 - ;;@ (lib)/allocator/tlsf.ts:225:11 + ;;@ (lib)/allocator/tlsf.ts:224:11 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:226:6 + ;;@ (lib)/allocator/tlsf.ts:225:6 (set_local $10 - ;;@ (lib)/allocator/tlsf.ts:226:11 + ;;@ (lib)/allocator/tlsf.ts:225:11 (i32.div_u - ;;@ (lib)/allocator/tlsf.ts:226:17 + ;;@ (lib)/allocator/tlsf.ts:225:17 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:226:24 + ;;@ (lib)/allocator/tlsf.ts:225:24 (i32.const 4) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:227:11 + ;;@ (lib)/allocator/tlsf.ts:226:11 (block - ;;@ (lib)/allocator/tlsf.ts:228:6 + ;;@ (lib)/allocator/tlsf.ts:227:6 (set_local $9 - ;;@ (lib)/allocator/tlsf.ts:228:11 + ;;@ (lib)/allocator/tlsf.ts:227:11 (call "$(lib)/allocator/tlsf/fls" - ;;@ (lib)/allocator/tlsf.ts:228:22 + ;;@ (lib)/allocator/tlsf.ts:227:22 (get_local $3) ) ) - ;;@ (lib)/allocator/tlsf.ts:229:6 + ;;@ (lib)/allocator/tlsf.ts:228:6 (set_local $10 - ;;@ (lib)/allocator/tlsf.ts:229:11 + ;;@ (lib)/allocator/tlsf.ts:228:11 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:229:17 + ;;@ (lib)/allocator/tlsf.ts:228:17 (i32.shr_u - ;;@ (lib)/allocator/tlsf.ts:229:18 + ;;@ (lib)/allocator/tlsf.ts:228:18 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:229:26 + ;;@ (lib)/allocator/tlsf.ts:228:26 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:229:27 + ;;@ (lib)/allocator/tlsf.ts:228:27 (get_local $9) - ;;@ (lib)/allocator/tlsf.ts:229:32 + ;;@ (lib)/allocator/tlsf.ts:228:32 (i32.const 5) ) ) - ;;@ (lib)/allocator/tlsf.ts:229:44 + ;;@ (lib)/allocator/tlsf.ts:228:44 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:229:45 + ;;@ (lib)/allocator/tlsf.ts:228:45 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:229:50 + ;;@ (lib)/allocator/tlsf.ts:228:50 (i32.const 5) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:230:6 + ;;@ (lib)/allocator/tlsf.ts:229:6 (set_local $9 (i32.sub (get_local $9) - ;;@ (lib)/allocator/tlsf.ts:230:12 + ;;@ (lib)/allocator/tlsf.ts:229:12 (i32.sub (i32.const 7) - ;;@ (lib)/allocator/tlsf.ts:230:22 + ;;@ (lib)/allocator/tlsf.ts:229:22 (i32.const 1) ) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:234:4 + ;;@ (lib)/allocator/tlsf.ts:233:4 (set_local $11 - ;;@ (lib)/allocator/tlsf.ts:234:20 + ;;@ (lib)/allocator/tlsf.ts:233:20 (call "$(lib)/allocator/tlsf/Root#getHead" - ;;@ (lib)/allocator/tlsf.ts:234:15 + ;;@ (lib)/allocator/tlsf.ts:233:15 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:234:28 + ;;@ (lib)/allocator/tlsf.ts:233:28 (get_local $9) - ;;@ (lib)/allocator/tlsf.ts:234:32 + ;;@ (lib)/allocator/tlsf.ts:233:32 (get_local $10) ) ) - ;;@ (lib)/allocator/tlsf.ts:235:4 + ;;@ (lib)/allocator/tlsf.ts:234:4 (i32.store offset=4 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:235:17 + ;;@ (lib)/allocator/tlsf.ts:234:17 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:236:4 + ;;@ (lib)/allocator/tlsf.ts:235:4 (i32.store offset=8 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:236:17 + ;;@ (lib)/allocator/tlsf.ts:235:17 (get_local $11) ) - ;;@ (lib)/allocator/tlsf.ts:237:4 + ;;@ (lib)/allocator/tlsf.ts:236:4 (if - ;;@ (lib)/allocator/tlsf.ts:237:8 + ;;@ (lib)/allocator/tlsf.ts:236:8 (get_local $11) - ;;@ (lib)/allocator/tlsf.ts:237:14 + ;;@ (lib)/allocator/tlsf.ts:236:14 (i32.store offset=4 (get_local $11) - ;;@ (lib)/allocator/tlsf.ts:237:26 + ;;@ (lib)/allocator/tlsf.ts:236:26 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:238:9 + ;;@ (lib)/allocator/tlsf.ts:237:9 (call "$(lib)/allocator/tlsf/Root#setHead" - ;;@ (lib)/allocator/tlsf.ts:238:4 + ;;@ (lib)/allocator/tlsf.ts:237:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:238:17 + ;;@ (lib)/allocator/tlsf.ts:237:17 (get_local $9) - ;;@ (lib)/allocator/tlsf.ts:238:21 + ;;@ (lib)/allocator/tlsf.ts:237:21 (get_local $10) - ;;@ (lib)/allocator/tlsf.ts:238:25 + ;;@ (lib)/allocator/tlsf.ts:237:25 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:241:4 + ;;@ (lib)/allocator/tlsf.ts:240:4 (i32.store (get_local $0) (i32.or (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:241:18 + ;;@ (lib)/allocator/tlsf.ts:240:18 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:241:19 + ;;@ (lib)/allocator/tlsf.ts:240:19 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:241:24 + ;;@ (lib)/allocator/tlsf.ts:240:24 (get_local $9) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:242:9 + ;;@ (lib)/allocator/tlsf.ts:241:9 (call "$(lib)/allocator/tlsf/Root#setSLMap" - ;;@ (lib)/allocator/tlsf.ts:242:4 + ;;@ (lib)/allocator/tlsf.ts:241:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:242:18 + ;;@ (lib)/allocator/tlsf.ts:241:18 (get_local $9) - ;;@ (lib)/allocator/tlsf.ts:242:22 + ;;@ (lib)/allocator/tlsf.ts:241:22 (i32.or - ;;@ (lib)/allocator/tlsf.ts:242:27 + ;;@ (lib)/allocator/tlsf.ts:241:27 (call "$(lib)/allocator/tlsf/Root#getSLMap" - ;;@ (lib)/allocator/tlsf.ts:242:22 + ;;@ (lib)/allocator/tlsf.ts:241:22 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:242:36 + ;;@ (lib)/allocator/tlsf.ts:241:36 (get_local $9) ) - ;;@ (lib)/allocator/tlsf.ts:242:42 + ;;@ (lib)/allocator/tlsf.ts:241:42 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:242:43 + ;;@ (lib)/allocator/tlsf.ts:241:43 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:242:48 + ;;@ (lib)/allocator/tlsf.ts:241:48 (get_local $10) ) ) @@ -1341,13 +1331,13 @@ (local $6 i32) (local $7 i32) (local $8 i32) - ;;@ (lib)/allocator/tlsf.ts:374:4 + ;;@ (lib)/allocator/tlsf.ts:370:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:374:11 + ;;@ (lib)/allocator/tlsf.ts:370:11 (i32.le_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:374:20 + ;;@ (lib)/allocator/tlsf.ts:370:20 (get_local $2) ) ) @@ -1355,22 +1345,22 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 374) + (i32.const 370) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:375:4 + ;;@ (lib)/allocator/tlsf.ts:371:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:375:11 + ;;@ (lib)/allocator/tlsf.ts:371:11 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:375:12 + ;;@ (lib)/allocator/tlsf.ts:371:12 (i32.and - ;;@ (lib)/allocator/tlsf.ts:375:13 + ;;@ (lib)/allocator/tlsf.ts:371:13 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:375:21 + ;;@ (lib)/allocator/tlsf.ts:371:21 (i32.const 3) ) ) @@ -1379,22 +1369,22 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 375) + (i32.const 371) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:376:4 + ;;@ (lib)/allocator/tlsf.ts:372:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:376:11 + ;;@ (lib)/allocator/tlsf.ts:372:11 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:376:12 + ;;@ (lib)/allocator/tlsf.ts:372:12 (i32.and - ;;@ (lib)/allocator/tlsf.ts:376:13 + ;;@ (lib)/allocator/tlsf.ts:372:13 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:376:19 + ;;@ (lib)/allocator/tlsf.ts:372:19 (i32.const 3) ) ) @@ -1403,40 +1393,40 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 376) + (i32.const 372) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:378:4 + ;;@ (lib)/allocator/tlsf.ts:374:4 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:378:18 + ;;@ (lib)/allocator/tlsf.ts:374:18 (call "$(lib)/allocator/tlsf/Root#get:tailRef" (get_local $0) ) ) - ;;@ (lib)/allocator/tlsf.ts:379:4 + ;;@ (lib)/allocator/tlsf.ts:375:4 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:379:26 + ;;@ (lib)/allocator/tlsf.ts:375:26 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:380:4 + ;;@ (lib)/allocator/tlsf.ts:376:4 (if - ;;@ (lib)/allocator/tlsf.ts:380:8 + ;;@ (lib)/allocator/tlsf.ts:376:8 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:380:17 + ;;@ (lib)/allocator/tlsf.ts:376:17 (block - ;;@ (lib)/allocator/tlsf.ts:381:6 + ;;@ (lib)/allocator/tlsf.ts:377:6 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:381:13 + ;;@ (lib)/allocator/tlsf.ts:377:13 (i32.ge_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:381:22 + ;;@ (lib)/allocator/tlsf.ts:377:22 (i32.add (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:381:32 + ;;@ (lib)/allocator/tlsf.ts:377:32 (i32.const 4) ) ) @@ -1445,37 +1435,37 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 381) + (i32.const 377) (i32.const 6) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:384:6 + ;;@ (lib)/allocator/tlsf.ts:380:6 (if - ;;@ (lib)/allocator/tlsf.ts:384:10 + ;;@ (lib)/allocator/tlsf.ts:380:10 (i32.eq (i32.sub (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:384:18 + ;;@ (lib)/allocator/tlsf.ts:380:18 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:384:32 + ;;@ (lib)/allocator/tlsf.ts:380:32 (get_local $3) ) - ;;@ (lib)/allocator/tlsf.ts:384:41 + ;;@ (lib)/allocator/tlsf.ts:380:41 (block - ;;@ (lib)/allocator/tlsf.ts:385:8 + ;;@ (lib)/allocator/tlsf.ts:381:8 (set_local $1 (i32.sub (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:385:17 + ;;@ (lib)/allocator/tlsf.ts:381:17 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:386:8 + ;;@ (lib)/allocator/tlsf.ts:382:8 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:386:19 + ;;@ (lib)/allocator/tlsf.ts:382:19 (i32.load (get_local $3) ) @@ -1483,16 +1473,16 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:390:6 + ;;@ (lib)/allocator/tlsf.ts:386:6 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:390:13 + ;;@ (lib)/allocator/tlsf.ts:386:13 (i32.ge_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:390:22 + ;;@ (lib)/allocator/tlsf.ts:386:22 (i32.add (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:390:48 + ;;@ (lib)/allocator/tlsf.ts:386:48 (i32.const 3044) ) ) @@ -1501,142 +1491,142 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 390) + (i32.const 386) (i32.const 6) ) (unreachable) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:393:4 + ;;@ (lib)/allocator/tlsf.ts:390:4 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:393:15 + ;;@ (lib)/allocator/tlsf.ts:390:15 (i32.sub (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:393:21 + ;;@ (lib)/allocator/tlsf.ts:390:21 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:394:4 + ;;@ (lib)/allocator/tlsf.ts:391:4 (if - ;;@ (lib)/allocator/tlsf.ts:394:8 + ;;@ (lib)/allocator/tlsf.ts:391:8 (i32.lt_u (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:394:15 + ;;@ (lib)/allocator/tlsf.ts:391:15 (i32.add (i32.add (i32.const 4) - ;;@ (lib)/allocator/tlsf.ts:394:28 + ;;@ (lib)/allocator/tlsf.ts:391:28 (i32.const 12) ) - ;;@ (lib)/allocator/tlsf.ts:394:45 + ;;@ (lib)/allocator/tlsf.ts:391:45 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:395:13 + ;;@ (lib)/allocator/tlsf.ts:392:13 (return (i32.const 0) ) ) - ;;@ (lib)/allocator/tlsf.ts:398:4 + ;;@ (lib)/allocator/tlsf.ts:396:4 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:398:19 + ;;@ (lib)/allocator/tlsf.ts:396:19 (i32.sub (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:398:26 + ;;@ (lib)/allocator/tlsf.ts:396:26 (i32.mul (i32.const 2) - ;;@ (lib)/allocator/tlsf.ts:398:30 + ;;@ (lib)/allocator/tlsf.ts:396:30 (i32.const 4) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:399:4 + ;;@ (lib)/allocator/tlsf.ts:397:4 (set_local $7 - ;;@ (lib)/allocator/tlsf.ts:399:15 + ;;@ (lib)/allocator/tlsf.ts:397:15 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:400:4 + ;;@ (lib)/allocator/tlsf.ts:398:4 (i32.store (get_local $7) - ;;@ (lib)/allocator/tlsf.ts:400:16 + ;;@ (lib)/allocator/tlsf.ts:398:16 (i32.or (i32.or (get_local $6) - ;;@ (lib)/allocator/tlsf.ts:400:27 + ;;@ (lib)/allocator/tlsf.ts:398:27 (i32.const 1) ) - ;;@ (lib)/allocator/tlsf.ts:400:34 + ;;@ (lib)/allocator/tlsf.ts:398:34 (i32.and - ;;@ (lib)/allocator/tlsf.ts:400:35 + ;;@ (lib)/allocator/tlsf.ts:398:35 (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:400:46 + ;;@ (lib)/allocator/tlsf.ts:398:46 (i32.const 2) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:401:4 + ;;@ (lib)/allocator/tlsf.ts:399:4 (i32.store offset=4 (get_local $7) - ;;@ (lib)/allocator/tlsf.ts:401:16 + ;;@ (lib)/allocator/tlsf.ts:399:16 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:402:4 + ;;@ (lib)/allocator/tlsf.ts:400:4 (i32.store offset=8 (get_local $7) - ;;@ (lib)/allocator/tlsf.ts:402:16 + ;;@ (lib)/allocator/tlsf.ts:400:16 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:405:4 + ;;@ (lib)/allocator/tlsf.ts:403:4 (set_local $8 - ;;@ (lib)/allocator/tlsf.ts:405:15 + ;;@ (lib)/allocator/tlsf.ts:403:15 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:405:33 + ;;@ (lib)/allocator/tlsf.ts:403:33 (i32.add (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:405:41 + ;;@ (lib)/allocator/tlsf.ts:403:41 (get_local $5) ) - ;;@ (lib)/allocator/tlsf.ts:405:48 + ;;@ (lib)/allocator/tlsf.ts:403:48 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:406:4 + ;;@ (lib)/allocator/tlsf.ts:404:4 (i32.store (get_local $8) - ;;@ (lib)/allocator/tlsf.ts:406:16 + ;;@ (lib)/allocator/tlsf.ts:404:16 (i32.or (i32.const 0) - ;;@ (lib)/allocator/tlsf.ts:406:20 + ;;@ (lib)/allocator/tlsf.ts:404:20 (i32.const 2) ) ) - ;;@ (lib)/allocator/tlsf.ts:407:4 + ;;@ (lib)/allocator/tlsf.ts:405:4 (call "$(lib)/allocator/tlsf/Root#set:tailRef" (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:407:19 + ;;@ (lib)/allocator/tlsf.ts:405:19 (get_local $8) ) - ;;@ (lib)/allocator/tlsf.ts:409:9 + ;;@ (lib)/allocator/tlsf.ts:407:9 (call "$(lib)/allocator/tlsf/Root#insert" - ;;@ (lib)/allocator/tlsf.ts:409:4 + ;;@ (lib)/allocator/tlsf.ts:407:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:409:16 + ;;@ (lib)/allocator/tlsf.ts:407:16 (get_local $7) ) - ;;@ (lib)/allocator/tlsf.ts:411:11 + ;;@ (lib)/allocator/tlsf.ts:409:11 (return (i32.const 1) ) ) (func "$(lib)/allocator/tlsf/ffs" (; 14 ;) (type $ii) (param $0 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:417:2 + ;;@ (lib)/allocator/tlsf.ts:415:2 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:417:9 + ;;@ (lib)/allocator/tlsf.ts:415:9 (i32.ne (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:417:17 + ;;@ (lib)/allocator/tlsf.ts:415:17 (i32.const 0) ) ) @@ -1644,29 +1634,29 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 417) + (i32.const 415) (i32.const 2) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:418:20 + ;;@ (lib)/allocator/tlsf.ts:416:20 (return - ;;@ (lib)/allocator/tlsf.ts:418:9 + ;;@ (lib)/allocator/tlsf.ts:416:9 (i32.ctz - ;;@ (lib)/allocator/tlsf.ts:418:16 + ;;@ (lib)/allocator/tlsf.ts:416:16 (get_local $0) ) ) ) (func "$(lib)/allocator/tlsf/ffs" (; 15 ;) (type $ii) (param $0 i32) (result i32) - ;;@ (lib)/allocator/tlsf.ts:417:2 + ;;@ (lib)/allocator/tlsf.ts:415:2 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:417:9 + ;;@ (lib)/allocator/tlsf.ts:415:9 (i32.ne (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:417:17 + ;;@ (lib)/allocator/tlsf.ts:415:17 (i32.const 0) ) ) @@ -1674,17 +1664,17 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 417) + (i32.const 415) (i32.const 2) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:418:20 + ;;@ (lib)/allocator/tlsf.ts:416:20 (return - ;;@ (lib)/allocator/tlsf.ts:418:9 + ;;@ (lib)/allocator/tlsf.ts:416:9 (i32.ctz - ;;@ (lib)/allocator/tlsf.ts:418:16 + ;;@ (lib)/allocator/tlsf.ts:416:16 (get_local $0) ) ) @@ -1696,26 +1686,23 @@ (local $5 i32) (local $6 i32) (local $7 i32) - ;;@ (lib)/allocator/tlsf.ts:293:4 + ;;@ (lib)/allocator/tlsf.ts:289:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:293:11 + ;;@ (lib)/allocator/tlsf.ts:289:11 (i32.and (if (result i32) - (i32.ne - (tee_local $2 - (i32.ge_u - (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:293:19 - (i32.const 12) - ) + (tee_local $2 + (i32.ge_u + (get_local $1) + ;;@ (lib)/allocator/tlsf.ts:289:19 + (i32.const 12) ) - (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:293:37 + ;;@ (lib)/allocator/tlsf.ts:289:37 (i32.lt_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:293:44 + ;;@ (lib)/allocator/tlsf.ts:289:44 (i32.const 1073741824) ) (get_local $2) @@ -1727,218 +1714,218 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 293) + (i32.const 289) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:296:4 + ;;@ (lib)/allocator/tlsf.ts:292:4 (nop) - ;;@ (lib)/allocator/tlsf.ts:297:4 + ;;@ (lib)/allocator/tlsf.ts:293:4 (if - ;;@ (lib)/allocator/tlsf.ts:297:8 + ;;@ (lib)/allocator/tlsf.ts:293:8 (i32.lt_u (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:297:15 + ;;@ (lib)/allocator/tlsf.ts:293:15 (i32.const 128) ) - ;;@ (lib)/allocator/tlsf.ts:297:24 + ;;@ (lib)/allocator/tlsf.ts:293:24 (block - ;;@ (lib)/allocator/tlsf.ts:298:6 + ;;@ (lib)/allocator/tlsf.ts:294:6 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:298:11 + ;;@ (lib)/allocator/tlsf.ts:294:11 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:299:6 + ;;@ (lib)/allocator/tlsf.ts:295:6 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:299:11 + ;;@ (lib)/allocator/tlsf.ts:295:11 (i32.div_u - ;;@ (lib)/allocator/tlsf.ts:299:17 + ;;@ (lib)/allocator/tlsf.ts:295:17 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:299:24 + ;;@ (lib)/allocator/tlsf.ts:295:24 (i32.const 4) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:300:11 + ;;@ (lib)/allocator/tlsf.ts:296:11 (block - ;;@ (lib)/allocator/tlsf.ts:302:6 + ;;@ (lib)/allocator/tlsf.ts:298:6 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:302:11 + ;;@ (lib)/allocator/tlsf.ts:298:11 (call "$(lib)/allocator/tlsf/fls" - ;;@ (lib)/allocator/tlsf.ts:302:22 + ;;@ (lib)/allocator/tlsf.ts:298:22 (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:303:6 + ;;@ (lib)/allocator/tlsf.ts:299:6 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:303:11 + ;;@ (lib)/allocator/tlsf.ts:299:11 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:303:17 + ;;@ (lib)/allocator/tlsf.ts:299:17 (i32.shr_u - ;;@ (lib)/allocator/tlsf.ts:303:18 + ;;@ (lib)/allocator/tlsf.ts:299:18 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:303:26 + ;;@ (lib)/allocator/tlsf.ts:299:26 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:303:27 + ;;@ (lib)/allocator/tlsf.ts:299:27 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:303:32 + ;;@ (lib)/allocator/tlsf.ts:299:32 (i32.const 5) ) ) - ;;@ (lib)/allocator/tlsf.ts:303:44 + ;;@ (lib)/allocator/tlsf.ts:299:44 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:303:45 + ;;@ (lib)/allocator/tlsf.ts:299:45 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:303:50 + ;;@ (lib)/allocator/tlsf.ts:299:50 (i32.const 5) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:304:6 + ;;@ (lib)/allocator/tlsf.ts:300:6 (set_local $3 (i32.sub (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:304:12 + ;;@ (lib)/allocator/tlsf.ts:300:12 (i32.sub (i32.const 7) - ;;@ (lib)/allocator/tlsf.ts:304:22 + ;;@ (lib)/allocator/tlsf.ts:300:22 (i32.const 1) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:306:6 + ;;@ (lib)/allocator/tlsf.ts:302:6 (if - ;;@ (lib)/allocator/tlsf.ts:306:10 + ;;@ (lib)/allocator/tlsf.ts:302:10 (i32.lt_u (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:306:15 + ;;@ (lib)/allocator/tlsf.ts:302:15 (i32.sub (i32.const 32) - ;;@ (lib)/allocator/tlsf.ts:306:25 + ;;@ (lib)/allocator/tlsf.ts:302:25 (i32.const 1) ) ) - ;;@ (lib)/allocator/tlsf.ts:306:28 + ;;@ (lib)/allocator/tlsf.ts:302:28 (set_local $4 (i32.add - ;;@ (lib)/allocator/tlsf.ts:306:30 + ;;@ (lib)/allocator/tlsf.ts:302:30 (get_local $4) (i32.const 1) ) ) - ;;@ (lib)/allocator/tlsf.ts:307:11 + ;;@ (lib)/allocator/tlsf.ts:303:11 (block (set_local $3 (i32.add - ;;@ (lib)/allocator/tlsf.ts:307:13 + ;;@ (lib)/allocator/tlsf.ts:303:13 (get_local $3) (i32.const 1) ) ) - ;;@ (lib)/allocator/tlsf.ts:307:17 + ;;@ (lib)/allocator/tlsf.ts:303:17 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:307:22 + ;;@ (lib)/allocator/tlsf.ts:303:22 (i32.const 0) ) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:311:4 + ;;@ (lib)/allocator/tlsf.ts:307:4 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:311:16 + ;;@ (lib)/allocator/tlsf.ts:307:16 (i32.and - ;;@ (lib)/allocator/tlsf.ts:311:21 + ;;@ (lib)/allocator/tlsf.ts:307:21 (call "$(lib)/allocator/tlsf/Root#getSLMap" - ;;@ (lib)/allocator/tlsf.ts:311:16 + ;;@ (lib)/allocator/tlsf.ts:307:16 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:311:30 + ;;@ (lib)/allocator/tlsf.ts:307:30 (get_local $3) ) - ;;@ (lib)/allocator/tlsf.ts:311:36 + ;;@ (lib)/allocator/tlsf.ts:307:36 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:311:37 + ;;@ (lib)/allocator/tlsf.ts:307:37 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:311:38 + ;;@ (lib)/allocator/tlsf.ts:307:38 (i32.const 0) (i32.const -1) ) - ;;@ (lib)/allocator/tlsf.ts:311:43 + ;;@ (lib)/allocator/tlsf.ts:307:43 (get_local $4) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:312:4 + ;;@ (lib)/allocator/tlsf.ts:308:4 (nop) - ;;@ (lib)/allocator/tlsf.ts:313:4 + ;;@ (lib)/allocator/tlsf.ts:309:4 (if - ;;@ (lib)/allocator/tlsf.ts:313:8 + ;;@ (lib)/allocator/tlsf.ts:309:8 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:313:9 + ;;@ (lib)/allocator/tlsf.ts:309:9 (get_local $5) ) - ;;@ (lib)/allocator/tlsf.ts:313:16 + ;;@ (lib)/allocator/tlsf.ts:309:16 (block - ;;@ (lib)/allocator/tlsf.ts:315:6 + ;;@ (lib)/allocator/tlsf.ts:311:6 (set_local $7 - ;;@ (lib)/allocator/tlsf.ts:315:18 + ;;@ (lib)/allocator/tlsf.ts:311:18 (i32.and (i32.load (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:315:31 + ;;@ (lib)/allocator/tlsf.ts:311:31 (i32.shl - ;;@ (lib)/allocator/tlsf.ts:315:32 + ;;@ (lib)/allocator/tlsf.ts:311:32 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:315:33 + ;;@ (lib)/allocator/tlsf.ts:311:33 (i32.const 0) (i32.const -1) ) - ;;@ (lib)/allocator/tlsf.ts:315:38 + ;;@ (lib)/allocator/tlsf.ts:311:38 (i32.add - ;;@ (lib)/allocator/tlsf.ts:315:39 + ;;@ (lib)/allocator/tlsf.ts:311:39 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:315:44 + ;;@ (lib)/allocator/tlsf.ts:311:44 (i32.const 1) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:316:6 + ;;@ (lib)/allocator/tlsf.ts:312:6 (if - ;;@ (lib)/allocator/tlsf.ts:316:10 + ;;@ (lib)/allocator/tlsf.ts:312:10 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:316:11 + ;;@ (lib)/allocator/tlsf.ts:312:11 (get_local $7) ) - ;;@ (lib)/allocator/tlsf.ts:317:8 + ;;@ (lib)/allocator/tlsf.ts:313:8 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:317:15 + ;;@ (lib)/allocator/tlsf.ts:313:15 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:318:13 + ;;@ (lib)/allocator/tlsf.ts:314:13 (block - ;;@ (lib)/allocator/tlsf.ts:319:8 + ;;@ (lib)/allocator/tlsf.ts:315:8 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:319:13 + ;;@ (lib)/allocator/tlsf.ts:315:13 (call "$(lib)/allocator/tlsf/ffs" - ;;@ (lib)/allocator/tlsf.ts:319:24 + ;;@ (lib)/allocator/tlsf.ts:315:24 (get_local $7) ) ) - ;;@ (lib)/allocator/tlsf.ts:320:8 + ;;@ (lib)/allocator/tlsf.ts:316:8 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:320:16 + ;;@ (lib)/allocator/tlsf.ts:316:16 (if (result i32) (i32.eqz (tee_local $2 - ;;@ (lib)/allocator/tlsf.ts:320:28 + ;;@ (lib)/allocator/tlsf.ts:316:28 (call "$(lib)/allocator/tlsf/Root#getSLMap" - ;;@ (lib)/allocator/tlsf.ts:320:23 + ;;@ (lib)/allocator/tlsf.ts:316:23 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:320:37 + ;;@ (lib)/allocator/tlsf.ts:316:37 (get_local $3) ) ) @@ -1947,7 +1934,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 320) + (i32.const 316) (i32.const 16) ) (unreachable) @@ -1955,17 +1942,17 @@ (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:321:8 + ;;@ (lib)/allocator/tlsf.ts:317:8 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:321:20 + ;;@ (lib)/allocator/tlsf.ts:317:20 (call "$(lib)/allocator/tlsf/Root#getHead" - ;;@ (lib)/allocator/tlsf.ts:321:15 + ;;@ (lib)/allocator/tlsf.ts:317:15 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:321:28 + ;;@ (lib)/allocator/tlsf.ts:317:28 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:321:32 + ;;@ (lib)/allocator/tlsf.ts:317:32 (call "$(lib)/allocator/tlsf/ffs" - ;;@ (lib)/allocator/tlsf.ts:321:41 + ;;@ (lib)/allocator/tlsf.ts:317:41 (get_local $5) ) ) @@ -1973,23 +1960,23 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:324:6 + ;;@ (lib)/allocator/tlsf.ts:320:6 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:324:18 + ;;@ (lib)/allocator/tlsf.ts:320:18 (call "$(lib)/allocator/tlsf/Root#getHead" - ;;@ (lib)/allocator/tlsf.ts:324:13 + ;;@ (lib)/allocator/tlsf.ts:320:13 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:324:26 + ;;@ (lib)/allocator/tlsf.ts:320:26 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:324:30 + ;;@ (lib)/allocator/tlsf.ts:320:30 (call "$(lib)/allocator/tlsf/ffs" - ;;@ (lib)/allocator/tlsf.ts:324:39 + ;;@ (lib)/allocator/tlsf.ts:320:39 (get_local $5) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:326:13 + ;;@ (lib)/allocator/tlsf.ts:322:11 (return (get_local $6) ) @@ -2000,20 +1987,20 @@ (local $5 i32) (local $6 i32) (local $7 i32) - ;;@ (lib)/allocator/tlsf.ts:344:4 + ;;@ (lib)/allocator/tlsf.ts:340:4 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:344:20 + ;;@ (lib)/allocator/tlsf.ts:340:20 (i32.load (get_local $1) ) ) - ;;@ (lib)/allocator/tlsf.ts:345:4 + ;;@ (lib)/allocator/tlsf.ts:341:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:345:11 + ;;@ (lib)/allocator/tlsf.ts:341:11 (i32.and (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:345:23 + ;;@ (lib)/allocator/tlsf.ts:341:23 (i32.const 1) ) ) @@ -2021,32 +2008,29 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 345) + (i32.const 341) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:346:4 + ;;@ (lib)/allocator/tlsf.ts:342:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:346:11 + ;;@ (lib)/allocator/tlsf.ts:342:11 (i32.and (if (result i32) - (i32.ne - (tee_local $4 - (i32.ge_u - (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:346:19 - (i32.const 12) - ) + (tee_local $4 + (i32.ge_u + (get_local $2) + ;;@ (lib)/allocator/tlsf.ts:342:19 + (i32.const 12) ) - (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:346:37 + ;;@ (lib)/allocator/tlsf.ts:342:37 (i32.lt_u (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:346:44 + ;;@ (lib)/allocator/tlsf.ts:342:44 (i32.const 1073741824) ) (get_local $4) @@ -2058,22 +2042,22 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 346) + (i32.const 342) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:347:4 + ;;@ (lib)/allocator/tlsf.ts:343:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:347:11 + ;;@ (lib)/allocator/tlsf.ts:343:11 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:347:12 + ;;@ (lib)/allocator/tlsf.ts:343:12 (i32.and - ;;@ (lib)/allocator/tlsf.ts:347:13 + ;;@ (lib)/allocator/tlsf.ts:343:13 (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:347:20 + ;;@ (lib)/allocator/tlsf.ts:343:20 (i32.const 3) ) ) @@ -2082,126 +2066,126 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 347) + (i32.const 343) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:349:9 + ;;@ (lib)/allocator/tlsf.ts:345:9 (call "$(lib)/allocator/tlsf/Root#remove" - ;;@ (lib)/allocator/tlsf.ts:349:4 + ;;@ (lib)/allocator/tlsf.ts:345:4 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:349:16 + ;;@ (lib)/allocator/tlsf.ts:345:16 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:352:4 + ;;@ (lib)/allocator/tlsf.ts:348:4 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:352:20 + ;;@ (lib)/allocator/tlsf.ts:348:20 (i32.sub (i32.and - ;;@ (lib)/allocator/tlsf.ts:352:21 + ;;@ (lib)/allocator/tlsf.ts:348:21 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:352:33 + ;;@ (lib)/allocator/tlsf.ts:348:33 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:352:34 + ;;@ (lib)/allocator/tlsf.ts:348:34 (i32.const 3) (i32.const -1) ) ) - ;;@ (lib)/allocator/tlsf.ts:352:42 + ;;@ (lib)/allocator/tlsf.ts:348:42 (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:353:4 + ;;@ (lib)/allocator/tlsf.ts:349:4 (if - ;;@ (lib)/allocator/tlsf.ts:353:8 + ;;@ (lib)/allocator/tlsf.ts:349:8 (i32.ge_u (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:353:21 + ;;@ (lib)/allocator/tlsf.ts:349:21 (i32.add (i32.const 4) - ;;@ (lib)/allocator/tlsf.ts:353:34 + ;;@ (lib)/allocator/tlsf.ts:349:34 (i32.const 12) ) ) - ;;@ (lib)/allocator/tlsf.ts:353:50 + ;;@ (lib)/allocator/tlsf.ts:349:50 (block - ;;@ (lib)/allocator/tlsf.ts:354:6 + ;;@ (lib)/allocator/tlsf.ts:350:6 (i32.store (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:354:19 + ;;@ (lib)/allocator/tlsf.ts:350:19 (i32.or (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:354:26 + ;;@ (lib)/allocator/tlsf.ts:350:26 (i32.and - ;;@ (lib)/allocator/tlsf.ts:354:27 + ;;@ (lib)/allocator/tlsf.ts:350:27 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:354:39 + ;;@ (lib)/allocator/tlsf.ts:350:39 (i32.const 2) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:356:6 + ;;@ (lib)/allocator/tlsf.ts:352:6 (set_local $6 - ;;@ (lib)/allocator/tlsf.ts:356:18 + ;;@ (lib)/allocator/tlsf.ts:352:18 (i32.add - ;;@ (lib)/allocator/tlsf.ts:357:8 + ;;@ (lib)/allocator/tlsf.ts:353:8 (i32.add (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:357:35 + ;;@ (lib)/allocator/tlsf.ts:353:35 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:357:48 + ;;@ (lib)/allocator/tlsf.ts:353:48 (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:359:6 + ;;@ (lib)/allocator/tlsf.ts:355:6 (i32.store (get_local $6) - ;;@ (lib)/allocator/tlsf.ts:359:19 + ;;@ (lib)/allocator/tlsf.ts:355:19 (i32.or (i32.sub - ;;@ (lib)/allocator/tlsf.ts:359:20 + ;;@ (lib)/allocator/tlsf.ts:355:20 (get_local $5) - ;;@ (lib)/allocator/tlsf.ts:359:32 + ;;@ (lib)/allocator/tlsf.ts:355:32 (i32.const 4) ) - ;;@ (lib)/allocator/tlsf.ts:359:46 + ;;@ (lib)/allocator/tlsf.ts:355:46 (i32.const 1) ) ) - ;;@ (lib)/allocator/tlsf.ts:360:11 + ;;@ (lib)/allocator/tlsf.ts:356:11 (call "$(lib)/allocator/tlsf/Root#insert" - ;;@ (lib)/allocator/tlsf.ts:360:6 + ;;@ (lib)/allocator/tlsf.ts:356:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:360:18 + ;;@ (lib)/allocator/tlsf.ts:356:18 (get_local $6) ) ) - ;;@ (lib)/allocator/tlsf.ts:363:11 + ;;@ (lib)/allocator/tlsf.ts:359:11 (block - ;;@ (lib)/allocator/tlsf.ts:364:6 + ;;@ (lib)/allocator/tlsf.ts:360:6 (i32.store (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:364:19 + ;;@ (lib)/allocator/tlsf.ts:360:19 (i32.and (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:364:31 + ;;@ (lib)/allocator/tlsf.ts:360:31 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:364:32 + ;;@ (lib)/allocator/tlsf.ts:360:32 (i32.const 1) (i32.const -1) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:365:6 + ;;@ (lib)/allocator/tlsf.ts:361:6 (set_local $7 - ;;@ (lib)/allocator/tlsf.ts:365:25 + ;;@ (lib)/allocator/tlsf.ts:361:25 (if (result i32) (i32.eqz (tee_local $4 - ;;@ (lib)/allocator/tlsf.ts:365:32 + ;;@ (lib)/allocator/tlsf.ts:361:32 (call "$(lib)/allocator/tlsf/Block#get:right" (get_local $1) ) @@ -2211,7 +2195,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 365) + (i32.const 361) (i32.const 25) ) (unreachable) @@ -2219,16 +2203,16 @@ (get_local $4) ) ) - ;;@ (lib)/allocator/tlsf.ts:366:6 + ;;@ (lib)/allocator/tlsf.ts:362:6 (i32.store (get_local $7) (i32.and (i32.load (get_local $7) ) - ;;@ (lib)/allocator/tlsf.ts:366:20 + ;;@ (lib)/allocator/tlsf.ts:362:20 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:366:21 + ;;@ (lib)/allocator/tlsf.ts:362:21 (i32.const 2) (i32.const -1) ) @@ -2236,12 +2220,12 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:369:44 + ;;@ (lib)/allocator/tlsf.ts:365:44 (return - ;;@ (lib)/allocator/tlsf.ts:369:11 + ;;@ (lib)/allocator/tlsf.ts:365:11 (i32.add (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:369:38 + ;;@ (lib)/allocator/tlsf.ts:365:38 (i32.const 4) ) ) @@ -2259,115 +2243,117 @@ (local $10 i32) (local $11 i32) (local $12 i32) - ;;@ (lib)/allocator/tlsf.ts:438:2 + ;;@ (lib)/allocator/tlsf.ts:436:2 (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:438:13 + ;;@ (lib)/allocator/tlsf.ts:436:13 (get_global "$(lib)/allocator/tlsf/ROOT") ) - ;;@ (lib)/allocator/tlsf.ts:439:2 + ;;@ (lib)/allocator/tlsf.ts:437:2 (if - ;;@ (lib)/allocator/tlsf.ts:439:6 + ;;@ (lib)/allocator/tlsf.ts:437:6 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:439:7 + ;;@ (lib)/allocator/tlsf.ts:437:7 (get_local $1) ) - ;;@ (lib)/allocator/tlsf.ts:439:13 + ;;@ (lib)/allocator/tlsf.ts:437:13 (block - ;;@ (lib)/allocator/tlsf.ts:440:4 + ;;@ (lib)/allocator/tlsf.ts:438:4 (set_local $2 - ;;@ (lib)/allocator/tlsf.ts:440:21 + ;;@ (lib)/allocator/tlsf.ts:438:21 (i32.and (i32.add - ;;@ (lib)/allocator/tlsf.ts:440:22 + ;;@ (lib)/allocator/tlsf.ts:438:22 (get_global $HEAP_BASE) - ;;@ (lib)/allocator/tlsf.ts:440:34 + ;;@ (lib)/allocator/tlsf.ts:438:34 (i32.const 3) ) - ;;@ (lib)/allocator/tlsf.ts:440:45 + ;;@ (lib)/allocator/tlsf.ts:438:45 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:440:46 + ;;@ (lib)/allocator/tlsf.ts:438:46 (i32.const 3) (i32.const -1) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:441:4 + ;;@ (lib)/allocator/tlsf.ts:439:4 (set_global "$(lib)/allocator/tlsf/ROOT" - ;;@ (lib)/allocator/tlsf.ts:441:11 + ;;@ (lib)/allocator/tlsf.ts:439:11 (tee_local $1 - ;;@ (lib)/allocator/tlsf.ts:441:18 + ;;@ (lib)/allocator/tlsf.ts:439:18 (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:442:4 + ;;@ (lib)/allocator/tlsf.ts:440:4 (call "$(lib)/allocator/tlsf/Root#set:tailRef" (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:442:19 + ;;@ (lib)/allocator/tlsf.ts:440:19 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:443:4 + ;;@ (lib)/allocator/tlsf.ts:441:4 (i32.store (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:443:17 + ;;@ (lib)/allocator/tlsf.ts:441:17 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:444:4 + ;;@ (lib)/allocator/tlsf.ts:442:4 (block $break|0 - ;;@ (lib)/allocator/tlsf.ts:444:9 + ;;@ (lib)/allocator/tlsf.ts:442:9 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:444:25 + ;;@ (lib)/allocator/tlsf.ts:442:25 (i32.const 0) ) (loop $continue|0 (if - ;;@ (lib)/allocator/tlsf.ts:444:28 + ;;@ (lib)/allocator/tlsf.ts:442:28 (i32.lt_u (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:444:33 + ;;@ (lib)/allocator/tlsf.ts:442:33 (i32.const 23) ) (block (block - ;;@ (lib)/allocator/tlsf.ts:445:11 + ;;@ (lib)/allocator/tlsf.ts:443:11 (call "$(lib)/allocator/tlsf/Root#setSLMap" - ;;@ (lib)/allocator/tlsf.ts:445:6 + ;;@ (lib)/allocator/tlsf.ts:443:6 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:445:20 + ;;@ (lib)/allocator/tlsf.ts:443:20 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:445:24 + ;;@ (lib)/allocator/tlsf.ts:443:24 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:446:6 + ;;@ (lib)/allocator/tlsf.ts:444:6 (block $break|1 - ;;@ (lib)/allocator/tlsf.ts:446:11 + ;;@ (lib)/allocator/tlsf.ts:444:11 (set_local $4 - ;;@ (lib)/allocator/tlsf.ts:446:25 + ;;@ (lib)/allocator/tlsf.ts:444:25 (i32.const 0) ) (loop $continue|1 (if - ;;@ (lib)/allocator/tlsf.ts:446:28 + ;;@ (lib)/allocator/tlsf.ts:444:28 (i32.lt_u (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:446:33 + ;;@ (lib)/allocator/tlsf.ts:444:33 (i32.const 32) ) (block - ;;@ (lib)/allocator/tlsf.ts:447:13 - (call "$(lib)/allocator/tlsf/Root#setHead" - ;;@ (lib)/allocator/tlsf.ts:447:8 - (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:447:21 - (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:447:25 - (get_local $4) - ;;@ (lib)/allocator/tlsf.ts:447:29 - (i32.const 0) + (block + ;;@ (lib)/allocator/tlsf.ts:445:13 + (call "$(lib)/allocator/tlsf/Root#setHead" + ;;@ (lib)/allocator/tlsf.ts:445:8 + (get_local $1) + ;;@ (lib)/allocator/tlsf.ts:445:21 + (get_local $3) + ;;@ (lib)/allocator/tlsf.ts:445:25 + (get_local $4) + ;;@ (lib)/allocator/tlsf.ts:445:29 + (i32.const 0) + ) ) - ;;@ (lib)/allocator/tlsf.ts:446:42 + ;;@ (lib)/allocator/tlsf.ts:444:42 (set_local $4 (i32.add - ;;@ (lib)/allocator/tlsf.ts:446:44 + ;;@ (lib)/allocator/tlsf.ts:444:44 (get_local $4) (i32.const 1) ) @@ -2378,10 +2364,10 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:444:42 + ;;@ (lib)/allocator/tlsf.ts:442:42 (set_local $3 (i32.add - ;;@ (lib)/allocator/tlsf.ts:444:44 + ;;@ (lib)/allocator/tlsf.ts:442:44 (get_local $3) (i32.const 1) ) @@ -2391,73 +2377,70 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:449:9 + ;;@ (lib)/allocator/tlsf.ts:448:9 (drop (call "$(lib)/allocator/tlsf/Root#addMemory" - ;;@ (lib)/allocator/tlsf.ts:449:4 + ;;@ (lib)/allocator/tlsf.ts:448:4 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:449:19 + ;;@ (lib)/allocator/tlsf.ts:448:19 (i32.add (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:449:32 + ;;@ (lib)/allocator/tlsf.ts:448:32 (i32.const 3044) ) - ;;@ (lib)/allocator/tlsf.ts:449:43 + ;;@ (lib)/allocator/tlsf.ts:448:43 (i32.shl (current_memory) - ;;@ (lib)/allocator/tlsf.ts:449:63 + ;;@ (lib)/allocator/tlsf.ts:448:63 (i32.const 16) ) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:453:2 + ;;@ (lib)/allocator/tlsf.ts:452:2 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:453:20 + ;;@ (lib)/allocator/tlsf.ts:452:20 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:454:2 + ;;@ (lib)/allocator/tlsf.ts:453:2 (if - ;;@ (lib)/allocator/tlsf.ts:454:6 + ;;@ (lib)/allocator/tlsf.ts:453:6 (if (result i32) - (i32.ne - (get_local $0) - (i32.const 0) - ) - ;;@ (lib)/allocator/tlsf.ts:454:14 + (get_local $0) + ;;@ (lib)/allocator/tlsf.ts:453:14 (i32.lt_u (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:454:21 + ;;@ (lib)/allocator/tlsf.ts:453:21 (i32.const 1073741824) ) (get_local $0) ) - ;;@ (lib)/allocator/tlsf.ts:454:37 + ;;@ (lib)/allocator/tlsf.ts:453:37 (block - ;;@ (lib)/allocator/tlsf.ts:455:4 + ;;@ (lib)/allocator/tlsf.ts:454:4 (set_local $0 - ;;@ (lib)/allocator/tlsf.ts:455:11 + ;;@ (lib)/allocator/tlsf.ts:454:11 (select (tee_local $6 - ;;@ (lib)/allocator/tlsf.ts:455:22 + ;;@ (lib)/allocator/tlsf.ts:454:22 (i32.and (i32.add - ;;@ (lib)/allocator/tlsf.ts:455:23 + ;;@ (lib)/allocator/tlsf.ts:454:23 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:455:30 + ;;@ (lib)/allocator/tlsf.ts:454:30 (i32.const 3) ) - ;;@ (lib)/allocator/tlsf.ts:455:41 + ;;@ (lib)/allocator/tlsf.ts:454:41 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:455:42 + ;;@ (lib)/allocator/tlsf.ts:454:42 (i32.const 3) (i32.const -1) ) ) ) (tee_local $7 - ;;@ (lib)/allocator/tlsf.ts:455:51 + ;;@ (lib)/allocator/tlsf.ts:454:51 (i32.const 12) ) (i32.gt_u @@ -2466,63 +2449,63 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:457:4 + ;;@ (lib)/allocator/tlsf.ts:456:4 (set_local $8 - ;;@ (lib)/allocator/tlsf.ts:457:21 + ;;@ (lib)/allocator/tlsf.ts:456:21 (call "$(lib)/allocator/tlsf/Root#search" - ;;@ (lib)/allocator/tlsf.ts:457:16 + ;;@ (lib)/allocator/tlsf.ts:456:16 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:457:28 + ;;@ (lib)/allocator/tlsf.ts:456:28 (get_local $0) ) ) - ;;@ (lib)/allocator/tlsf.ts:458:4 + ;;@ (lib)/allocator/tlsf.ts:457:4 (if - ;;@ (lib)/allocator/tlsf.ts:458:8 + ;;@ (lib)/allocator/tlsf.ts:457:8 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:458:9 + ;;@ (lib)/allocator/tlsf.ts:457:9 (get_local $8) ) - ;;@ (lib)/allocator/tlsf.ts:458:16 + ;;@ (lib)/allocator/tlsf.ts:457:16 (block - ;;@ (lib)/allocator/tlsf.ts:461:6 + ;;@ (lib)/allocator/tlsf.ts:460:6 (set_local $9 - ;;@ (lib)/allocator/tlsf.ts:461:24 + ;;@ (lib)/allocator/tlsf.ts:460:24 (current_memory) ) - ;;@ (lib)/allocator/tlsf.ts:462:6 + ;;@ (lib)/allocator/tlsf.ts:461:6 (set_local $10 - ;;@ (lib)/allocator/tlsf.ts:462:24 + ;;@ (lib)/allocator/tlsf.ts:461:24 (i32.shr_u (i32.and - ;;@ (lib)/allocator/tlsf.ts:462:25 + ;;@ (lib)/allocator/tlsf.ts:461:25 (i32.add - ;;@ (lib)/allocator/tlsf.ts:462:26 + ;;@ (lib)/allocator/tlsf.ts:461:26 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:462:33 + ;;@ (lib)/allocator/tlsf.ts:461:33 (i32.const 65535) ) - ;;@ (lib)/allocator/tlsf.ts:462:43 + ;;@ (lib)/allocator/tlsf.ts:461:43 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:462:44 + ;;@ (lib)/allocator/tlsf.ts:461:44 (i32.const 65535) (i32.const -1) ) ) - ;;@ (lib)/allocator/tlsf.ts:462:56 + ;;@ (lib)/allocator/tlsf.ts:461:56 (i32.const 16) ) ) - ;;@ (lib)/allocator/tlsf.ts:463:6 + ;;@ (lib)/allocator/tlsf.ts:462:6 (set_local $11 - ;;@ (lib)/allocator/tlsf.ts:463:24 + ;;@ (lib)/allocator/tlsf.ts:462:24 (select (tee_local $6 - ;;@ (lib)/allocator/tlsf.ts:463:28 + ;;@ (lib)/allocator/tlsf.ts:462:28 (get_local $9) ) (tee_local $7 - ;;@ (lib)/allocator/tlsf.ts:463:41 + ;;@ (lib)/allocator/tlsf.ts:462:41 (get_local $10) ) (i32.gt_s @@ -2531,67 +2514,67 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:464:6 + ;;@ (lib)/allocator/tlsf.ts:463:6 (if - ;;@ (lib)/allocator/tlsf.ts:464:10 + ;;@ (lib)/allocator/tlsf.ts:463:10 (i32.lt_s (grow_memory - ;;@ (lib)/allocator/tlsf.ts:464:22 + ;;@ (lib)/allocator/tlsf.ts:463:22 (get_local $11) ) - ;;@ (lib)/allocator/tlsf.ts:464:37 + ;;@ (lib)/allocator/tlsf.ts:463:37 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:465:8 + ;;@ (lib)/allocator/tlsf.ts:464:8 (if - ;;@ (lib)/allocator/tlsf.ts:465:12 + ;;@ (lib)/allocator/tlsf.ts:464:12 (i32.lt_s (grow_memory - ;;@ (lib)/allocator/tlsf.ts:465:24 + ;;@ (lib)/allocator/tlsf.ts:464:24 (get_local $10) ) - ;;@ (lib)/allocator/tlsf.ts:465:39 + ;;@ (lib)/allocator/tlsf.ts:464:39 (i32.const 0) ) - ;;@ (lib)/allocator/tlsf.ts:466:10 + ;;@ (lib)/allocator/tlsf.ts:465:10 (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:467:6 + ;;@ (lib)/allocator/tlsf.ts:468:6 (set_local $12 - ;;@ (lib)/allocator/tlsf.ts:467:23 + ;;@ (lib)/allocator/tlsf.ts:468:23 (current_memory) ) - ;;@ (lib)/allocator/tlsf.ts:468:11 + ;;@ (lib)/allocator/tlsf.ts:469:11 (drop (call "$(lib)/allocator/tlsf/Root#addMemory" - ;;@ (lib)/allocator/tlsf.ts:468:6 + ;;@ (lib)/allocator/tlsf.ts:469:6 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:468:21 + ;;@ (lib)/allocator/tlsf.ts:469:21 (i32.shl (get_local $9) - ;;@ (lib)/allocator/tlsf.ts:468:43 + ;;@ (lib)/allocator/tlsf.ts:469:43 (i32.const 16) ) - ;;@ (lib)/allocator/tlsf.ts:468:47 + ;;@ (lib)/allocator/tlsf.ts:469:47 (i32.shl (get_local $12) - ;;@ (lib)/allocator/tlsf.ts:468:68 + ;;@ (lib)/allocator/tlsf.ts:469:68 (i32.const 16) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:469:6 + ;;@ (lib)/allocator/tlsf.ts:470:6 (set_local $8 - ;;@ (lib)/allocator/tlsf.ts:469:14 + ;;@ (lib)/allocator/tlsf.ts:470:14 (if (result i32) (i32.eqz (tee_local $6 - ;;@ (lib)/allocator/tlsf.ts:469:26 + ;;@ (lib)/allocator/tlsf.ts:470:26 (call "$(lib)/allocator/tlsf/Root#search" - ;;@ (lib)/allocator/tlsf.ts:469:21 + ;;@ (lib)/allocator/tlsf.ts:470:21 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:469:33 + ;;@ (lib)/allocator/tlsf.ts:470:33 (get_local $0) ) ) @@ -2600,7 +2583,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 469) + (i32.const 470) (i32.const 14) ) (unreachable) @@ -2610,24 +2593,24 @@ ) ) ) - ;;@ (lib)/allocator/tlsf.ts:472:4 + ;;@ (lib)/allocator/tlsf.ts:473:4 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:472:11 + ;;@ (lib)/allocator/tlsf.ts:473:11 (i32.ge_u (i32.and - ;;@ (lib)/allocator/tlsf.ts:472:12 + ;;@ (lib)/allocator/tlsf.ts:473:12 (i32.load (get_local $8) ) - ;;@ (lib)/allocator/tlsf.ts:472:25 + ;;@ (lib)/allocator/tlsf.ts:473:25 (i32.xor - ;;@ (lib)/allocator/tlsf.ts:472:26 + ;;@ (lib)/allocator/tlsf.ts:473:26 (i32.const 3) (i32.const -1) ) ) - ;;@ (lib)/allocator/tlsf.ts:472:35 + ;;@ (lib)/allocator/tlsf.ts:473:35 (get_local $0) ) ) @@ -2635,27 +2618,27 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 472) + (i32.const 473) (i32.const 4) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:473:4 + ;;@ (lib)/allocator/tlsf.ts:474:4 (set_local $5 - ;;@ (lib)/allocator/tlsf.ts:473:16 + ;;@ (lib)/allocator/tlsf.ts:474:16 (call "$(lib)/allocator/tlsf/Root#use" - ;;@ (lib)/allocator/tlsf.ts:473:11 + ;;@ (lib)/allocator/tlsf.ts:474:11 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:473:20 + ;;@ (lib)/allocator/tlsf.ts:474:20 (get_local $8) - ;;@ (lib)/allocator/tlsf.ts:473:27 + ;;@ (lib)/allocator/tlsf.ts:474:27 (get_local $0) ) ) ) ) - ;;@ (lib)/allocator/tlsf.ts:476:9 + ;;@ (lib)/allocator/tlsf.ts:477:9 (return (get_local $5) ) @@ -2664,50 +2647,50 @@ (local $1 i32) (local $2 i32) (local $3 i32) - ;;@ (lib)/allocator/tlsf.ts:482:2 + ;;@ (lib)/allocator/tlsf.ts:483:2 (if - ;;@ (lib)/allocator/tlsf.ts:482:6 + ;;@ (lib)/allocator/tlsf.ts:483:6 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:482:12 + ;;@ (lib)/allocator/tlsf.ts:483:12 (block - ;;@ (lib)/allocator/tlsf.ts:483:4 + ;;@ (lib)/allocator/tlsf.ts:484:4 (set_local $1 - ;;@ (lib)/allocator/tlsf.ts:483:15 + ;;@ (lib)/allocator/tlsf.ts:484:15 (get_global "$(lib)/allocator/tlsf/ROOT") ) - ;;@ (lib)/allocator/tlsf.ts:484:4 + ;;@ (lib)/allocator/tlsf.ts:485:4 (if - ;;@ (lib)/allocator/tlsf.ts:484:8 + ;;@ (lib)/allocator/tlsf.ts:485:8 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:484:14 + ;;@ (lib)/allocator/tlsf.ts:485:14 (block - ;;@ (lib)/allocator/tlsf.ts:485:6 + ;;@ (lib)/allocator/tlsf.ts:486:6 (set_local $2 - ;;@ (lib)/allocator/tlsf.ts:485:18 + ;;@ (lib)/allocator/tlsf.ts:486:18 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:485:36 + ;;@ (lib)/allocator/tlsf.ts:486:36 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:485:43 + ;;@ (lib)/allocator/tlsf.ts:486:43 (i32.const 4) ) ) - ;;@ (lib)/allocator/tlsf.ts:486:6 + ;;@ (lib)/allocator/tlsf.ts:487:6 (set_local $3 - ;;@ (lib)/allocator/tlsf.ts:486:22 + ;;@ (lib)/allocator/tlsf.ts:487:22 (i32.load (get_local $2) ) ) - ;;@ (lib)/allocator/tlsf.ts:487:6 + ;;@ (lib)/allocator/tlsf.ts:488:6 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:487:13 + ;;@ (lib)/allocator/tlsf.ts:488:13 (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:487:14 + ;;@ (lib)/allocator/tlsf.ts:488:14 (i32.and - ;;@ (lib)/allocator/tlsf.ts:487:15 + ;;@ (lib)/allocator/tlsf.ts:488:15 (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:487:27 + ;;@ (lib)/allocator/tlsf.ts:488:27 (i32.const 1) ) ) @@ -2716,31 +2699,31 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 487) + (i32.const 488) (i32.const 6) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:488:6 + ;;@ (lib)/allocator/tlsf.ts:489:6 (i32.store (get_local $2) - ;;@ (lib)/allocator/tlsf.ts:488:19 + ;;@ (lib)/allocator/tlsf.ts:489:19 (i32.or (get_local $3) - ;;@ (lib)/allocator/tlsf.ts:488:31 + ;;@ (lib)/allocator/tlsf.ts:489:31 (i32.const 1) ) ) - ;;@ (lib)/allocator/tlsf.ts:489:11 + ;;@ (lib)/allocator/tlsf.ts:490:11 (call "$(lib)/allocator/tlsf/Root#insert" - ;;@ (lib)/allocator/tlsf.ts:489:6 + ;;@ (lib)/allocator/tlsf.ts:490:6 (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:489:18 + ;;@ (lib)/allocator/tlsf.ts:490:18 (i32.sub - ;;@ (lib)/allocator/tlsf.ts:489:36 + ;;@ (lib)/allocator/tlsf.ts:490:36 (get_local $0) - ;;@ (lib)/allocator/tlsf.ts:489:43 + ;;@ (lib)/allocator/tlsf.ts:490:43 (i32.const 4) ) ) @@ -2750,13 +2733,13 @@ ) ) (func $start (; 20 ;) (type $v) - ;;@ (lib)/allocator/tlsf.ts:50:0 + ;;@ (lib)/allocator/tlsf.ts:49:0 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:50:7 + ;;@ (lib)/allocator/tlsf.ts:49:7 (i32.ge_u (i32.const 2) - ;;@ (lib)/allocator/tlsf.ts:50:18 + ;;@ (lib)/allocator/tlsf.ts:49:18 (i32.const 2) ) ) @@ -2764,24 +2747,24 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 50) + (i32.const 49) (i32.const 0) ) (unreachable) ) ) - ;;@ (lib)/allocator/tlsf.ts:116:0 + ;;@ (lib)/allocator/tlsf.ts:115:0 (if (i32.eqz - ;;@ (lib)/allocator/tlsf.ts:116:7 + ;;@ (lib)/allocator/tlsf.ts:115:7 (i32.le_s (i32.shl - ;;@ (lib)/allocator/tlsf.ts:116:8 + ;;@ (lib)/allocator/tlsf.ts:115:8 (i32.const 1) - ;;@ (lib)/allocator/tlsf.ts:116:13 + ;;@ (lib)/allocator/tlsf.ts:115:13 (i32.const 5) ) - ;;@ (lib)/allocator/tlsf.ts:116:25 + ;;@ (lib)/allocator/tlsf.ts:115:25 (i32.const 32) ) ) @@ -2789,7 +2772,7 @@ (call $abort (i32.const 0) (i32.const 4) - (i32.const 116) + (i32.const 115) (i32.const 0) ) (unreachable) diff --git a/tests/compiler/retain-i32.ts b/tests/compiler/retain-i32.ts index c3b15115..769b684f 100644 --- a/tests/compiler/retain-i32.ts +++ b/tests/compiler/retain-i32.ts @@ -56,7 +56,7 @@ test(u8.MAX_VALUE, -1); test(u8.MAX_VALUE, u8.MAX_VALUE); // various -for (var i: i32 = i8.MIN_VALUE; i <= u8.MAX_VALUE; ++i) { +for (var i: i32 = i8.MIN_VALUE; i <= u8.MAX_VALUE; ++i) { test(0, i); test(1, i); test(-1, i); diff --git a/webpack.config.js b/webpack.config.js index e6745ade..81a55487 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,6 +4,7 @@ const webpack = require("webpack"); // Build the C-like library const lib = { + mode: "production", entry: [ "./src/glue/js", "./src/index.ts" ], module: { rules: [ @@ -24,20 +25,18 @@ const lib = { library: "assemblyscript", libraryTarget: "umd" }, - plugins: [ - new webpack.optimize.UglifyJsPlugin({ - minimize: true, - sourceMap: true - }), - new webpack.SourceMapDevToolPlugin({ - filename: "assemblyscript.js.map" - }) - ] + optimization: { + minimize: true + }, + devtool: "source-map", + performance: { + hints : false + } }; // Build asc for browser usage -const BabelMinifyPlugin = require("babel-minify-webpack-plugin"); const bin = { + mode: "production", context: path.join(__dirname, "bin"), entry: [ "./asc.js" ], externals: [{ @@ -64,6 +63,10 @@ const bin = { library: "asc", libraryTarget: "umd" }, + optimization: { + minimize: true + }, + devtool: "source-map", plugins: [ new webpack.DefinePlugin({ BUNDLE_VERSION: JSON.stringify(require("./package.json").version), @@ -81,13 +84,6 @@ const bin = { __dirname: JSON.stringify(".") }), new webpack.IgnorePlugin(/\.\/src|package\.json|^(ts\-node|glob|source\-map\-support)$/), - // Error: original.line and original.column are not numbers -- you probably meant to omit the - // original mapping entirely and only map the generated position. If so, pass null for the - // original mapping instead of an object with empty or null values. - new BabelMinifyPlugin(/* {}, { sourceMap: true } */), - // new webpack.SourceMapDevToolPlugin({ - // filename: "asc.js.map" - // }), ] };