diff --git a/bin/asc.js b/bin/asc.js index 6b9b864f..95342dab 100644 --- a/bin/asc.js +++ b/bin/asc.js @@ -357,6 +357,7 @@ exports.main = function main(argv, options, callback) { // Initialize default aliases assemblyscript.setGlobalAlias(compilerOptions, "Math", "NativeMath"); assemblyscript.setGlobalAlias(compilerOptions, "Mathf", "NativeMathf"); + assemblyscript.setGlobalAlias(compilerOptions, "abort", "~lib/env/abort"); // Add or override aliases if specified var aliases = args.use; diff --git a/dist/asc.js b/dist/asc.js index 844fc697..3b320395 100644 --- a/dist/asc.js +++ b/dist/asc.js @@ -1,2 +1,2 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(function(){try{return require("assemblyscript")}catch(e){}}()):"function"==typeof define&&define.amd?define(["assemblyscript"],n):"object"==typeof exports?exports.asc=n(function(){try{return require("assemblyscript")}catch(e){}}()):e.asc=n(e.assemblyscript)}("undefined"!=typeof self?self:this,function(__WEBPACK_EXTERNAL_MODULE__6__){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=10)}([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 s(e,n){if(e.filter)return e.filter(n);for(var t=[],r=0;r=-1&&!r;i--){var a=i>=0?arguments[i]:e.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(n=a+"/"+n,r="/"===a.charAt(0))}return n=t(s(n.split("/"),function(e){return!!e}),!r).join("/"),(r?"/":"")+n||"."},n.normalize=function(e){var r=n.isAbsolute(e),i="/"===a(e,-1);return(e=t(s(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(s(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("/")),s=r(t.split("/")),a=Math.min(i.length,s.length),o=a,l=0;l191&&r<224?s[a++]=(31&r)<<6|63&e[n++]:r>239&&r<365?(r=((7&r)<<18|(63&e[n++])<<12|(63&e[n++])<<6|63&e[n++])-65536,s[a++]=55296+(r>>10),s[a++]=56320+(1023&r)):s[a++]=(15&r)<<12|(63&e[n++])<<6|63&e[n++],a>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,s)),a=0);return i?(a&&i.push(String.fromCharCode.apply(String,s.slice(0,a))),i.join("")):String.fromCharCode.apply(String,s.slice(0,a))},r.write=function(e,n,t){for(var r,i,s=t,a=0;a>6|192,n[t++]=63&r|128):55296==(64512&r)&&56320==(64512&(i=e.charCodeAt(a+1)))?(r=65536+((1023&r)<<10)+(1023&i),++a,n[t++]=r>>18|240,n[t++]=r>>12&63|128,n[t++]=r>>6&63|128,n[t++]=63&r|128):(n[t++]=r>>12|224,n[t++]=r>>6&63|128,n[t++]=63&r|128);return t-s}},function(e,n){},function(module,exports,__webpack_require__){(function(process,global){const fs=__webpack_require__(8),path=__webpack_require__(2),utf8=__webpack_require__(7),EOL="win32"===process.platform?"\r\n":"\n";var assemblyscript,isDev;function parseArguments(e){const n={};return Object.keys(exports.options).forEach(e=>{const t=exports.options[e];t.aliases&&((n.alias||(n.alias={}))[e]=t.aliases),void 0!==t.default&&((n.default||(n.default={}))[e]=t.default),"string"===t.type?(n.string||(n.string=[])).push(e):"boolean"===t.type&&(n.boolean||(n.boolean=[])).push(e)}),__webpack_require__(4)(e,n)}function checkDiagnostics(e,n){for(var t,r=!1;null!=(t=assemblyscript.nextDiagnostic(e));)n.write(assemblyscript.formatDiagnostic(t,n.isTTY,!0)+EOL+EOL),assemblyscript.isError(t)&&(r=!0);return r}function createStats(){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 measure(e){const n=process.hrtime();e();const t=process.hrtime(n);return 1e9*t[0]+t[1]}function formatTime(e){return e?(e/1e6).toFixed(3)+" ms":"N/A"}function printStats(e,n){function t(e,n){return formatTime(e)}(n||process.stdout).write(["I/O Read : "+t(e.readTime,e.readCount),"I/O Write : "+t(e.writeTime,e.writeCount),"Parse : "+t(e.parseTime,e.parseCount),"Compile : "+t(e.compileTime,e.compileCount),"Emit : "+t(e.emitTime,e.emitCount),"Validate : "+t(e.validateTime,e.validateCount),"Optimize : "+t(e.optimizeTime,e.optimizeCount)].join(EOL)+EOL)}(()=>{try{assemblyscript=__webpack_require__(6),isDev=!1;try{__webpack_require__(!function(){var e=new Error('Cannot find module "source-map-support"');throw e.code="MODULE_NOT_FOUND",e}()).install()}catch(e){}}catch(e){try{__webpack_require__(!function(){var e=new Error('Cannot find module "ts-node"');throw e.code="MODULE_NOT_FOUND",e}()).register({project:path.join(".","..","src","tsconfig.json")}),__webpack_require__(!function(){var e=new Error('Cannot find module "../src/glue/js"');throw e.code="MODULE_NOT_FOUND",e}()),assemblyscript=__webpack_require__(!function(){var e=new Error('Cannot find module "../src"');throw e.code="MODULE_NOT_FOUND",e}()),isDev=!0}catch(e){assemblyscript=eval("require('./assemblyscript')"),isDev=!1}}})(),exports.isBundle=!0,exports.isDev=isDev,exports.version=exports.isBundle?"0.5.0":__webpack_require__(!function(){var e=new Error('Cannot find module "../package.json"');throw e.code="MODULE_NOT_FOUND",e}()).version,exports.options=__webpack_require__(5),exports.sourceMapRoot="assemblyscript:///",exports.libraryPrefix=assemblyscript.LIBRARY_PREFIX,exports.defaultOptimizeLevel=2,exports.defaultShrinkLevel=1,exports.libraryFiles=exports.isBundle?Object({"allocator/arena":'/**\n * Arena Memory Allocator\n *\n * Provides a `reset_memory` function to reset the heap to its initial state. A user has to make\n * sure that there are no more references to cleared memory afterwards. Always aligns to 8 bytes.\n *\n * @module std/assembly/allocator/arena\n *//***/\n\nimport { AL_MASK, MAX_SIZE_32 } from "../internal/allocator";\n\nvar startOffset: usize = (HEAP_BASE + AL_MASK) & ~AL_MASK;\nvar offset: usize = startOffset;\n\n@global\nexport function allocate_memory(size: usize): usize {\n if (size) {\n if (size > MAX_SIZE_32) unreachable();\n let ptr = offset;\n let newPtr = (ptr + size + AL_MASK) & ~AL_MASK;\n let pagesBefore = current_memory();\n if (newPtr > pagesBefore << 16) {\n let pagesNeeded = ((newPtr - ptr + 0xffff) & ~0xffff) >>> 16;\n let 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 }\n offset = newPtr;\n return ptr;\n }\n return 0;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n // nop\n}\n\n@global\nexport function reset_memory(): void {\n offset = startOffset;\n}\n',"allocator/buddy":'/**\n * Buddy Memory Allocator.\n * @module std/assembly/allocator/buddy\n *//***/\n\n/*\n Copyright 2018 Evan Wallace\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the "Software"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n*/// see: https://github.com/evanw/buddy-malloc\n\n/*\n * This file implements a buddy memory allocator, which is an allocator that\n * allocates memory within a fixed linear address range. It spans the address\n * range with a binary tree that tracks free space. Both "malloc" and "free"\n * are O(log N) time where N is the maximum possible number of allocations.\n *\n * The "buddy" term comes from how the tree is used. When memory is allocated,\n * nodes in the tree are split recursively until a node of the appropriate size\n * is reached. Every split results in two child nodes, each of which is the\n * buddy of the other. When a node is freed, the node and its buddy can be\n * merged again if the buddy is also free. This makes the memory available\n * for larger allocations again.\n */\n\n/*\n * Every allocation needs an 8-byte header to store the allocation size while\n * staying 8-byte aligned. The address returned by "malloc" is the address\n * right after this header (i.e. the size occupies the 8 bytes before the\n * returned address).\n */\nconst HEADER_SIZE: usize = 8;\n\n/*\n * The minimum allocation size is 16 bytes because we have an 8-byte header and\n * we need to stay 8-byte aligned.\n */\nconst MIN_ALLOC_LOG2: usize = 4;\nconst MIN_ALLOC: usize = 1 << MIN_ALLOC_LOG2;\n\n/*\n * The maximum allocation size is currently set to 2gb. This is the total size\n * of the heap. It\'s technically also the maximum allocation size because the\n * heap could consist of a single allocation of this size. But of course real\n * heaps will have multiple allocations, so the real maximum allocation limit\n * is at most 1gb.\n */\nconst MAX_ALLOC_LOG2: usize = 30; // 31;\nconst MAX_ALLOC: usize = 1 << MAX_ALLOC_LOG2;\n\n/*\n * Allocations are done in powers of two starting from MIN_ALLOC and ending at\n * MAX_ALLOC inclusive. Each allocation size has a bucket that stores the free\n * list for that allocation size.\n *\n * Given a bucket index, the size of the allocations in that bucket can be\n * found with "(size_t)1 << (MAX_ALLOC_LOG2 - bucket)".\n */\nconst BUCKET_COUNT: usize = MAX_ALLOC_LOG2 - MIN_ALLOC_LOG2 + 1;\n\n/*\n * Free lists are stored as circular doubly-linked lists. Every possible\n * allocation size has an associated free list that is threaded through all\n * currently free blocks of that size. That means MIN_ALLOC must be at least\n * "sizeof(list_t)". MIN_ALLOC is currently 16 bytes, so this will be true for\n * both 32-bit and 64-bit.\n */\n@unmanaged\nclass List {\n prev: List;\n next: List;\n static readonly SIZE: usize = 2 * sizeof();\n}\n\n/*\n * Each bucket corresponds to a certain allocation size and stores a free list\n * for that size. The bucket at index 0 corresponds to an allocation size of\n * MAX_ALLOC (i.e. the whole address space).\n */\nvar BUCKETS_START: usize = HEAP_BASE;\nvar BUCKETS_END: usize = BUCKETS_START + BUCKET_COUNT * List.SIZE;\n\nfunction buckets$get(index: usize): List {\n assert(index < BUCKET_COUNT);\n return changetype(BUCKETS_START + index * List.SIZE);\n}\n\n/*\n * We could initialize the allocator by giving it one free block the size of\n * the entire address space. However, this would cause us to instantly reserve\n * half of the entire address space on the first allocation, since the first\n * split would store a free list entry at the start of the right child of the\n * root. Instead, we have the tree start out small and grow the size of the\n * tree as we use more memory. The size of the tree is tracked by this value.\n */\nvar bucket_limit: usize;\n\n/*\n * This array represents a linearized binary tree of bits. Every possible\n * allocation larger than MIN_ALLOC has a node in this tree (and therefore a\n * bit in this array).\n *\n * Given the index for a node, lineraized binary trees allow you to traverse to\n * the parent node or the child nodes just by doing simple arithmetic on the\n * index:\n *\n * - Move to parent: index = (index - 1) / 2;\n * - Move to left child: index = index * 2 + 1;\n * - Move to right child: index = index * 2 + 2;\n * - Move to sibling: index = ((index - 1) ^ 1) + 1;\n *\n * Each node in this tree can be in one of several states:\n *\n * - UNUSED (both children are UNUSED)\n * - SPLIT (one child is UNUSED and the other child isn\'t)\n * - USED (neither children are UNUSED)\n *\n * These states take two bits to store. However, it turns out we have enough\n * information to distinguish between UNUSED and USED from context, so we only\n * need to store SPLIT or not, which only takes a single bit.\n *\n * Note that we don\'t need to store any nodes for allocations of size MIN_ALLOC\n * since we only ever care about parent nodes.\n */\nconst SPLIT_COUNT: usize = (1 << (BUCKET_COUNT - 1)) / 8;\nvar NODE_IS_SPLIT_START: usize = BUCKETS_END;\nvar NODE_IS_SPLIT_END: usize = NODE_IS_SPLIT_START + SPLIT_COUNT * sizeof();\n\nfunction node_is_split$get(index: usize): i32 {\n assert(index < SPLIT_COUNT);\n return load(NODE_IS_SPLIT_START + index);\n}\n\nfunction node_is_split$set(index: usize, state: i32): void {\n assert(index < SPLIT_COUNT);\n store(NODE_IS_SPLIT_START + index, state);\n}\n\n/*\n * This is the starting address of the address range for this allocator. Every\n * returned allocation will be an offset of this pointer from 0 to MAX_ALLOC.\n */\nvar base_ptr: usize;\n\n/*\n * This is the maximum address that has ever been used by the allocator. It\'s\n * used to know when to call "brk" to request more memory from the kernel.\n */\nvar max_ptr: usize;\n\n/*\n * Make sure all addresses before "new_value" are valid and can be used. Memory\n * is allocated in a 2gb address range but that memory is not reserved up\n * front. It\'s only reserved when it\'s needed by calling this function. This\n * will return false if the memory could not be reserved.\n */\nfunction update_max_ptr(new_value: usize): i32 {\n if (new_value > max_ptr) {\n // if (brk(new_value)) {\n // return 0;\n // }\n let oldPages = current_memory();\n let newPages = (((new_value + 0xffff) & ~0xffff) >> 16);\n assert(newPages > oldPages);\n if (grow_memory(newPages - oldPages) < 0) {\n return 0;\n }\n // max_ptr = new_value;\n max_ptr = newPages << 16;\n }\n return 1;\n}\n\n/*\n * Initialize a list to empty. Because these are circular lists, an "empty"\n * list is an entry where both links point to itself. This makes insertion\n * and removal simpler because they don\'t need any branches.\n */\nfunction list_init(list: List): void {\n list.prev = list;\n list.next = list;\n}\n\n/*\n * Append the provided entry to the end of the list. This assumes the entry\n * isn\'t in a list already because it overwrites the linked list pointers.\n */\nfunction list_push(list: List, entry: List): void {\n var prev = list.prev;\n entry.prev = prev;\n entry.next = list;\n prev.next = entry;\n list.prev = entry;\n}\n\n/*\n * Remove the provided entry from whichever list it\'s currently in. This\n * assumes that the entry is in a list. You don\'t need to provide the list\n * because the lists are circular, so the list\'s pointers will automatically\n * be updated if the first or last entries are removed.\n */\nfunction list_remove(entry: List): void {\n var prev = entry.prev;\n var next = entry.next;\n prev.next = next;\n next.prev = prev;\n}\n\n/*\n * Remove and return the first entry in the list or NULL if the list is empty.\n */\nfunction list_pop(list: List): List | null {\n var back = list.prev;\n if (back == list) return null;\n list_remove(back);\n return back;\n}\n\n/*\n * This maps from the index of a node to the address of memory that node\n * represents. The bucket can be derived from the index using a loop but is\n * required to be provided here since having them means we can avoid the loop\n * and have this function return in constant time.\n */\nfunction ptr_for_node(index: usize, bucket: usize): usize {\n return base_ptr + ((index - (1 << bucket) + 1) << (MAX_ALLOC_LOG2 - bucket));\n}\n\n/*\n * This maps from an address of memory to the node that represents that\n * address. There are often many nodes that all map to the same address, so\n * the bucket is needed to uniquely identify a node.\n */\nfunction node_for_ptr(ptr: usize, bucket: usize): usize {\n return ((ptr - base_ptr) >> (MAX_ALLOC_LOG2 - bucket)) + (1 << bucket) - 1;\n}\n\n/*\n * Given the index of a node, this returns the "is split" flag of the parent.\n */\nfunction parent_is_split(index: usize): bool {\n index = (index - 1) / 2;\n return ((node_is_split$get(index / 8) >>> (index % 8)) & 1) == 1;\n}\n\n/*\n * Given the index of a node, this flips the "is split" flag of the parent.\n */\nfunction flip_parent_is_split(index: usize): void {\n index = (index - 1) / 2;\n var indexDiv8 = index / 8;\n node_is_split$set(indexDiv8,\n node_is_split$get(indexDiv8) ^ (1 << (index % 8))\n );\n}\n\n/*\n * Given the requested size passed to "malloc", this function returns the index\n * of the smallest bucket that can fit that size.\n */\nfunction bucket_for_request(request: usize): usize {\n var bucket = BUCKET_COUNT - 1;\n var size = MIN_ALLOC;\n\n while (size < request) {\n bucket--;\n size *= 2;\n }\n\n return bucket;\n}\n\n/*\n * The tree is always rooted at the current bucket limit. This call grows the\n * tree by repeatedly doubling it in size until the root lies at the provided\n * bucket index. Each doubling lowers the bucket limit by 1.\n */\nfunction lower_bucket_limit(bucket: usize): u32 {\n while (bucket < bucket_limit) {\n let root = node_for_ptr(base_ptr, bucket_limit);\n let right_child: usize;\n\n /*\n * If the parent isn\'t SPLIT, that means the node at the current bucket\n * limit is UNUSED and our address space is entirely free. In that case,\n * clear the root free list, increase the bucket limit, and add a single\n * block with the newly-expanded address space to the new root free list.\n */\n if (!parent_is_split(root)) {\n list_remove(changetype(base_ptr));\n list_init(buckets$get(--bucket_limit));\n list_push(buckets$get(bucket_limit), changetype(base_ptr));\n continue;\n }\n\n /*\n * Otherwise, the tree is currently in use. Create a parent node for the\n * current root node in the SPLIT state with a right child on the free\n * list. Make sure to reserve the memory for the free list entry before\n * writing to it. Note that we do not need to flip the "is split" flag for\n * our current parent because it\'s already on (we know because we just\n * checked it above).\n */\n right_child = ptr_for_node(root + 1, bucket_limit);\n if (!update_max_ptr(right_child + List.SIZE)) {\n return 0;\n }\n list_push(buckets$get(bucket_limit), changetype(right_child));\n list_init(buckets$get(--bucket_limit));\n\n /*\n * Set the grandparent\'s SPLIT flag so if we need to lower the bucket limit\n * again, we\'ll know that the new root node we just added is in use.\n */\n root = (root - 1) / 2;\n if (root != 0) {\n flip_parent_is_split(root);\n }\n }\n\n return 1;\n}\n\n@global\nexport function allocate_memory(request: usize): usize {\n var original_bucket: usize, bucket: usize;\n\n /*\n * Make sure it\'s possible for an allocation of this size to succeed. There\'s\n * a hard-coded limit on the maximum allocation size because of the way this\n * allocator works.\n */\n if (request > MAX_ALLOC - HEADER_SIZE) unreachable();\n\n /*\n * Initialize our global state if this is the first call to "malloc". At the\n * beginning, the tree has a single node that represents the smallest\n * possible allocation size. More memory will be reserved later as needed.\n */\n if (base_ptr == 0) {\n // base_ptr = max_ptr = (uint8_t *)sbrk(0);\n base_ptr = (NODE_IS_SPLIT_END + 7) & ~7; // must be aligned\n max_ptr = current_memory() << 16; // must grow first\n bucket_limit = BUCKET_COUNT - 1;\n if (!update_max_ptr(base_ptr + List.SIZE)) {\n return 0;\n }\n list_init(buckets$get(BUCKET_COUNT - 1));\n list_push(buckets$get(BUCKET_COUNT - 1), changetype(base_ptr));\n }\n\n /*\n * Find the smallest bucket that will fit this request. This doesn\'t check\n * that there\'s space for the request yet.\n */\n bucket = bucket_for_request(request + HEADER_SIZE);\n original_bucket = bucket;\n\n /*\n * Search for a bucket with a non-empty free list that\'s as large or larger\n * than what we need. If there isn\'t an exact match, we\'ll need to split a\n * larger one to get a match.\n */\n while (bucket + 1 != 0) {\n let size: usize, bytes_needed: usize, i: usize;\n let ptr: usize;\n\n /*\n * We may need to grow the tree to be able to fit an allocation of this\n * size. Try to grow the tree and stop here if we can\'t.\n */\n if (!lower_bucket_limit(bucket)) {\n return 0;\n }\n\n /*\n * Try to pop a block off the free list for this bucket. If the free list\n * is empty, we\'re going to have to split a larger block instead.\n */\n ptr = changetype(list_pop(buckets$get(bucket)));\n if (!ptr) {\n /*\n * If we\'re not at the root of the tree or it\'s impossible to grow the\n * tree any more, continue on to the next bucket.\n */\n if (bucket != bucket_limit || bucket == 0) {\n bucket--;\n continue;\n }\n\n /*\n * Otherwise, grow the tree one more level and then pop a block off the\n * free list again. Since we know the root of the tree is used (because\n * the free list was empty), this will add a parent above this node in\n * the SPLIT state and then add the new right child node to the free list\n * for this bucket. Popping the free list will give us this right child.\n */\n if (!lower_bucket_limit(bucket - 1)) {\n return 0;\n }\n ptr = changetype(list_pop(buckets$get(bucket)));\n }\n\n /*\n * Try to expand the address space first before going any further. If we\n * have run out of space, put this block back on the free list and fail.\n */\n size = 1 << (MAX_ALLOC_LOG2 - bucket);\n bytes_needed = bucket < original_bucket ? size / 2 + List.SIZE : size;\n if (!update_max_ptr(ptr + bytes_needed)) {\n list_push(buckets$get(bucket), changetype(ptr));\n return 0;\n }\n\n /*\n * If we got a node off the free list, change the node from UNUSED to USED.\n * This involves flipping our parent\'s "is split" bit because that bit is\n * the exclusive-or of the UNUSED flags of both children, and our UNUSED\n * flag (which isn\'t ever stored explicitly) has just changed.\n *\n * Note that we shouldn\'t ever need to flip the "is split" bit of our\n * grandparent because we know our buddy is USED so it\'s impossible for our\n * grandparent to be UNUSED (if our buddy chunk was UNUSED, our parent\n * wouldn\'t ever have been split in the first place).\n */\n i = node_for_ptr(ptr, bucket);\n if (i != 0) {\n flip_parent_is_split(i);\n }\n\n /*\n * If the node we got is larger than we need, split it down to the correct\n * size and put the new unused child nodes on the free list in the\n * corresponding bucket. This is done by repeatedly moving to the left\n * child, splitting the parent, and then adding the right child to the free\n * list.\n */\n while (bucket < original_bucket) {\n i = i * 2 + 1;\n bucket++;\n flip_parent_is_split(i);\n list_push(\n buckets$get(bucket),\n changetype(ptr_for_node(i + 1, bucket))\n );\n }\n\n /*\n * Now that we have a memory address, write the block header (just the size\n * of the allocation) and return the address immediately after the header.\n */\n store(ptr, request);\n return ptr + HEADER_SIZE;\n }\n\n return 0;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n var bucket: usize, i: usize;\n\n /*\n * Ignore any attempts to free a NULL pointer.\n */\n if (!ptr) {\n return;\n }\n\n /*\n * We were given the address returned by "malloc" so get back to the actual\n * address of the node by subtracting off the size of the block header. Then\n * look up the index of the node corresponding to this address.\n */\n ptr = ptr - HEADER_SIZE;\n bucket = bucket_for_request(load(ptr) + HEADER_SIZE);\n i = node_for_ptr(ptr, bucket);\n\n /*\n * Traverse up to the root node, flipping USED blocks to UNUSED and merging\n * UNUSED buddies together into a single UNUSED parent.\n */\n while (i != 0) {\n /*\n * Change this node from UNUSED to USED. This involves flipping our\n * parent\'s "is split" bit because that bit is the exclusive-or of the\n * UNUSED flags of both children, and our UNUSED flag (which isn\'t ever\n * stored explicitly) has just changed.\n */\n flip_parent_is_split(i);\n\n /*\n * If the parent is now SPLIT, that means our buddy is USED, so don\'t merge\n * with it. Instead, stop the iteration here and add ourselves to the free\n * list for our bucket.\n *\n * Also stop here if we\'re at the current root node, even if that root node\n * is now UNUSED. Root nodes don\'t have a buddy so we can\'t merge with one.\n */\n if (parent_is_split(i) || bucket == bucket_limit) {\n break;\n }\n\n /*\n * If we get here, we know our buddy is UNUSED. In this case we should\n * merge with that buddy and continue traversing up to the root node. We\n * need to remove the buddy from its free list here but we don\'t need to\n * add the merged parent to its free list yet. That will be done once after\n * this loop is finished.\n */\n list_remove(changetype(ptr_for_node(((i - 1) ^ 1) + 1, bucket)));\n i = (i - 1) / 2;\n bucket--;\n }\n\n /*\n * Add ourselves to the free list for our bucket. We add to the back of the\n * list because "malloc" takes from the back of the list and we want a "free"\n * followed by a "malloc" of the same size to ideally use the same address\n * for better memory locality.\n */\n list_push(buckets$get(bucket), changetype(ptr_for_node(i, bucket)));\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n',"allocator/emscripten":"/**\n * Emscripten Memory Allocator.\n *\n * Uses Emscripten's exported _malloc and _free implementations, i.e., when linking with\n * Emscripten-compiled programs that already provide these. Differs from 'system' in that their\n * names are prefixed with an underscore.\n *\n * @module std/assembly/allocator/emscripten\n *//***/\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 function reset_memory(): void {\n unreachable();\n}\n","allocator/system":"/**\n * System Memory Allocator.\n *\n * Uses the environment's malloc and free implementations, i.e., when linking with other C-like\n * programs that already provide these.\n *\n * @module std/assembly/allocator/system\n *//***/\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 function reset_memory(): void {\n unreachable();\n}\n","allocator/tlsf":"/**\n * Two-Level Segregate Fit Memory Allocator.\n *\n * A general purpose dynamic memory allocator specifically designed to meet real-time requirements.\n * Always aligns to 8 bytes.\n *\n * @module std/assembly/allocator/tlsf\n *//***/\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\nimport {\n AL_BITS,\n AL_SIZE,\n AL_MASK\n} from \"../internal/allocator\";\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│ ◄─┐ info\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\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() + AL_MASK) & ~AL_MASK;\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() + AL_MASK) & ~AL_MASK;// 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 let left: Block = assert(block.left); // can't be null\n let 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 let 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 let 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 let 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 let 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 let rootOffset = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n ROOT = root = changetype(rootOffset);\n root.tailRef = 0;\n root.flMap = 0;\n for (let fl: usize = 0; fl < FL_BITS; ++fl) {\n root.setSLMap(fl, 0);\n for (let sl: u32 = 0; sl < SL_SIZE; ++sl) {\n root.setHead(fl, sl, null);\n }\n }\n root.addMemory((rootOffset + Root.SIZE + AL_MASK) & ~AL_MASK, current_memory() << 16);\n }\n\n // search for a suitable block\n var data: usize = 0;\n if (size) {\n if (size > Block.MAX_SIZE) unreachable();\n // 32-bit MAX_SIZE is 1 << 30 and itself aligned, hence the following can't overflow MAX_SIZE\n size = max((size + AL_MASK) & ~AL_MASK, Block.MIN_SIZE);\n\n let block = root.search(size);\n if (!block) {\n\n // request more memory\n let pagesBefore = current_memory();\n let pagesNeeded = ((size + 0xffff) & ~0xffff) >>> 16;\n let 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 let 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 let root = ROOT;\n if (root) {\n let block = changetype(data - Block.INFO);\n let 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\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n",array:'import {\n MAX_BLENGTH,\n HEADER_SIZE as HEADER_SIZE_AB,\n allocUnsafe,\n reallocUnsafe,\n loadUnsafe,\n storeUnsafe\n} from "./internal/arraybuffer";\n\nimport {\n defaultComparator,\n insertionSort,\n weakHeapSort\n} from "./internal/array";\n\nexport class Array {\n\n /* @internal */ buffer_: ArrayBuffer;\n /* @internal */ length_: i32;\n\n constructor(length: i32 = 0) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (length > MAX_LENGTH) throw new RangeError("Invalid array length");\n var byteLength = length << alignof();\n var buffer = allocUnsafe(byteLength);\n this.buffer_ = buffer;\n this.length_ = length;\n set_memory(\n changetype(buffer) + HEADER_SIZE_AB,\n 0,\n byteLength\n );\n }\n\n get length(): i32 {\n return this.length_;\n }\n\n set length(length: i32) {\n var buffer = this.buffer_;\n var capacity = buffer.byteLength >>> alignof();\n if (length > capacity) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (length > MAX_LENGTH) throw new RangeError("Invalid array length");\n buffer = reallocUnsafe(buffer, length << alignof());\n this.buffer_ = buffer;\n }\n this.length_ = length;\n }\n\n every(callbackfn: (element: T, index: i32, array: Array) => bool): bool {\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n if (!callbackfn(loadUnsafe(buffer, index), index, this)) return false;\n }\n return true;\n }\n\n findIndex(predicate: (element: T, index: i32, array: Array) => bool): i32 {\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n if (predicate(loadUnsafe(buffer, index), index, this)) return index;\n }\n return -1;\n }\n\n @operator("[]")\n private __get(index: i32): T {\n var buffer = this.buffer_;\n return index < (buffer.byteLength >>> alignof())\n ? loadUnsafe(buffer, index)\n : unreachable();\n }\n\n @operator("{}")\n private __unchecked_get(index: i32): T {\n return loadUnsafe(this.buffer_, index);\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n var buffer = this.buffer_;\n var capacity = buffer.byteLength >>> alignof();\n if (index >= capacity) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (index >= MAX_LENGTH) throw new Error("Invalid array length");\n buffer = reallocUnsafe(buffer, (index + 1) << alignof());\n this.buffer_ = buffer;\n this.length_ = index + 1;\n }\n storeUnsafe(buffer, index, value);\n }\n\n @operator("{}=")\n private __unchecked_set(index: i32, value: T): void {\n storeUnsafe(this.buffer_, index, value);\n }\n\n includes(searchElement: T, fromIndex: i32 = 0): bool {\n var length = this.length_;\n if (length == 0 || fromIndex >= length) return false;\n if (fromIndex < 0) fromIndex = max(length + fromIndex, 0);\n var buffer = this.buffer_;\n while (fromIndex < length) {\n if (loadUnsafe(buffer, fromIndex) == searchElement) return true;\n ++fromIndex;\n }\n return false;\n }\n\n indexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n var length = this.length_;\n if (length == 0 || fromIndex >= length) return -1;\n if (fromIndex < 0) fromIndex = max(length + fromIndex, 0);\n var buffer = this.buffer_;\n while (fromIndex < length) {\n if (loadUnsafe(buffer, fromIndex) == searchElement) return fromIndex;\n ++fromIndex;\n }\n return -1;\n }\n\n lastIndexOf(searchElement: T, fromIndex: i32 = this.length_): i32 {\n var length = this.length_;\n if (length == 0) return -1;\n if (fromIndex < 0) fromIndex = length + fromIndex; // no need to clamp\n else if (fromIndex >= length) fromIndex = length - 1;\n var buffer = this.buffer_;\n while (fromIndex >= 0) { // ^\n if (loadUnsafe(buffer, fromIndex) == searchElement) return fromIndex;\n --fromIndex;\n }\n return -1;\n }\n\n push(element: T): i32 {\n var length = this.length_;\n var buffer = this.buffer_;\n var capacity = buffer.byteLength >>> alignof();\n var newLength = length + 1; // safe only if length is checked\n if (length >= capacity) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (length >= MAX_LENGTH) throw new Error("Invalid array length");\n buffer = reallocUnsafe(buffer, newLength << alignof());\n this.buffer_ = buffer;\n }\n this.length_ = newLength;\n storeUnsafe(buffer, length, element);\n return newLength;\n }\n\n pop(): T {\n var length = this.length_;\n if (length < 1) throw new RangeError("Array is empty");\n var element = loadUnsafe(this.buffer_, --length);\n this.length_ = length;\n return element;\n }\n\n forEach(callbackfn: (value: T, index: i32, array: Array) => void): void {\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n callbackfn(loadUnsafe(buffer, index), index, this);\n }\n }\n\n map(callbackfn: (value: T, index: i32, array: Array) => U): Array {\n var buffer = this.buffer_;\n var length = this.length_;\n var result = new Array(length);\n var resultBuffer = result.buffer_;\n for (let index = 0; index < length && index < this.length_; ++index) {\n storeUnsafe(resultBuffer, index, callbackfn(loadUnsafe(buffer, index), index, this));\n }\n return result;\n }\n\n filter(callbackfn: (value: T, index: i32, array: Array) => bool): Array {\n var buffer = this.buffer_;\n var length = this.length_;\n var result = new Array();\n for (let index = 0; index < length && index < this.length_; ++index) {\n let value = loadUnsafe(buffer, index);\n if (callbackfn(value, index, this)) result.push(value);\n }\n return result;\n }\n\n reduce(\n callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U,\n initialValue: U\n ): U {\n var accum = initialValue;\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n accum = callbackfn(accum, loadUnsafe(buffer, index), index, this);\n }\n return accum;\n }\n\n reduceRight(\n callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U,\n initialValue: U\n ): U {\n var accum = initialValue;\n var buffer = this.buffer_;\n for (let index: i32 = this.length_ - 1; index >= 0; --index) {\n accum = callbackfn(accum, loadUnsafe(buffer, index), index, this);\n }\n return accum;\n }\n\n shift(): T {\n var length = this.length_;\n if (length < 1) throw new RangeError("Array is empty");\n var buffer = this.buffer_;\n var element = loadUnsafe(buffer, 0);\n var lastIndex = length - 1;\n move_memory(\n changetype(buffer) + HEADER_SIZE_AB,\n changetype(buffer) + HEADER_SIZE_AB + sizeof(),\n lastIndex << alignof()\n );\n storeUnsafe(buffer, lastIndex, null);\n this.length_ = lastIndex;\n return element;\n }\n\n some(callbackfn: (element: T, index: i32, array: Array) => bool): bool {\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n if (callbackfn(loadUnsafe(buffer, index), index, this)) return true;\n }\n return false;\n }\n\n unshift(element: T): i32 {\n var buffer = this.buffer_;\n var capacity = buffer.byteLength >>> alignof();\n var length = this.length_;\n var newLength = length + 1; // safe only if length is checked\n if (length >= capacity) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (length >= MAX_LENGTH) throw new Error("Invalid array length");\n buffer = reallocUnsafe(buffer, newLength << alignof());\n capacity = buffer.byteLength >>> alignof();\n this.buffer_ = buffer;\n }\n move_memory(\n changetype(buffer) + HEADER_SIZE_AB + sizeof(),\n changetype(buffer) + HEADER_SIZE_AB,\n (capacity - 1) << alignof()\n );\n storeUnsafe(buffer, 0, element);\n this.length_ = newLength;\n return newLength;\n }\n\n slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Array {\n var length = this.length_;\n if (begin < 0) begin = max(length + begin, 0);\n else if (begin > length) begin = length;\n if (end < 0) end = length + end; // no need to clamp\n else if (end > length) end = length;\n if (end < begin) end = begin; // ^\n var newLength = end - begin;\n assert(newLength >= 0);\n var sliced = new Array(newLength);\n if (newLength) {\n move_memory(\n changetype(sliced.buffer_) + HEADER_SIZE_AB,\n changetype(this.buffer_) + HEADER_SIZE_AB + (begin << alignof()),\n newLength << alignof()\n );\n }\n return sliced;\n }\n\n splice(start: i32, deleteCount: i32 = i32.MAX_VALUE): void {\n if (deleteCount < 1) return;\n var length = this.length_;\n if (start < 0) start = max(length + start, 0);\n if (start >= length) return;\n deleteCount = min(deleteCount, length - start);\n var buffer = this.buffer_;\n move_memory(\n changetype(buffer) + HEADER_SIZE_AB + (start << alignof()),\n changetype(buffer) + HEADER_SIZE_AB + ((start + deleteCount) << alignof()),\n deleteCount << alignof()\n );\n this.length_ = length - deleteCount;\n }\n\n reverse(): Array {\n var buffer = this.buffer_;\n for (let front = 0, back = this.length_ - 1; front < back; ++front, --back) {\n let temp = loadUnsafe(buffer, front);\n storeUnsafe(buffer, front, loadUnsafe(buffer, back));\n storeUnsafe(buffer, back, temp);\n }\n return this;\n }\n\n sort(comparator: (a: T, b: T) => i32 = defaultComparator()): this {\n var length = this.length_;\n if (length <= 1) return this;\n var buffer = this.buffer_;\n if (length == 2) {\n let a = loadUnsafe(buffer, 1); // a = arr[1]\n let b = loadUnsafe(buffer, 0); // b = arr[0]\n if (comparator(a, b) < 0) {\n storeUnsafe(buffer, 1, b); // arr[1] = b;\n storeUnsafe(buffer, 0, a); // arr[0] = a;\n }\n return this;\n }\n\n if (isReference()) {\n // TODO replace this to stable sort when it implemented\n return changetype(insertionSort(this, comparator));\n } else {\n return changetype(length < 256\n ? insertionSort(this, comparator)\n : weakHeapSort(this, comparator)\n );\n }\n }\n}\n',arraybuffer:'import {\n HEADER_SIZE,\n MAX_BLENGTH,\n allocUnsafe\n} from "./internal/arraybuffer";\n\n@sealed\nexport class ArrayBuffer {\n\n readonly byteLength: i32; // capped to [0, MAX_LENGTH]\n\n constructor(length: i32) {\n if (length > MAX_BLENGTH) throw new RangeError("Invalid array buffer length");\n var buffer = allocUnsafe(length);\n set_memory(changetype(buffer) + HEADER_SIZE, 0, length);\n return buffer;\n }\n\n slice(begin: i32 = 0, end: i32 = MAX_BLENGTH): ArrayBuffer {\n var len = this.byteLength;\n if (begin < 0) begin = max(len + begin, 0);\n else begin = min(begin, len);\n if (end < 0) end = max(len + end, 0);\n else end = min(end, len);\n var newLen = max(end - begin, 0);\n var buffer = allocUnsafe(newLen);\n move_memory(changetype(buffer) + HEADER_SIZE, changetype(this) + HEADER_SIZE + begin, newLen);\n return buffer;\n }\n}\n',builtins:"export declare function isInteger(value?: T): bool;\n\nexport declare function isFloat(value?: T): bool;\n\nexport declare function isSigned(value?: T): bool;\n\nexport declare function isReference(value?: T): bool;\n\nexport declare function isString(value?: T): bool;\n\nexport declare function isArray(value?: T): bool;\n\nexport const NaN: f64 = 0 / 0;\n\nexport const Infinity: f64 = 1 / 0;\n\nexport function isNaN(value: T): bool {\n return value != value;\n}\n\nexport function isFinite(value: T): bool {\n return value - value == 0;\n}\n\nexport declare function clz(value: T): T;\n\nexport declare function ctz(value: T): T;\n\nexport declare function popcnt(value: T): T;\n\nexport declare function rotl(value: T, shift: T): T;\n\nexport declare function rotr(value: T, shift: T): T;\n\nexport declare function abs(value: T): T;\n\nexport declare function max(left: T, right: T): T;\n\nexport declare function min(left: T, right: T): T;\n\nexport declare function ceil(value: T): T;\n\nexport declare function floor(value: T): T;\n\nexport declare function copysign(left: T, right: T): T;\n\nexport declare function nearest(value: T): T;\n\nexport declare function reinterpret(value: void): T;\n\nexport declare function sqrt(value: T): T;\n\nexport declare function trunc(value: T): T;\n\nexport declare function load(offset: usize, constantOffset?: usize): T;\n\nexport declare function store(offset: usize, value: void, constantOffset?: usize): void;\n\nexport declare function sizeof(): usize; // | u32 / u64\n\nexport declare function alignof(): usize; // | u32 / u64\n\nexport declare function offsetof(fieldName?: string): usize; // | u32 / u64\n\nexport declare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n\nexport declare function unreachable(): void;\n\nexport declare function current_memory(): i32;\n\nexport declare function grow_memory(pages: i32): i32;\n\n// export declare function move_memory(dest: usize, src: usize: n: usize): void;\n\n// export declare function set_memory(dest: usize, value: u32, n: usize): void;\n\nexport declare function changetype(value: void): T;\n\nexport declare function assert(isTrueish: T, message?: string): T;\n\nexport declare function abort(\n message?: string | null,\n fileName?: string | null,\n lineNumber?: u32,\n columnNumber?: u32\n): void;\n\nexport declare function unchecked(expr: T): T;\n\nexport declare function i8(value: void): i8;\nexport namespace i8 {\n export const MIN_VALUE: i8 = -128;\n export const MAX_VALUE: i8 = 127;\n}\n\nexport declare function i16(value: void): i16;\nexport namespace i16 {\n export const MIN_VALUE: i16 = -32768;\n export const MAX_VALUE: i16 = 32767;\n}\n\nexport declare function i32(value: void): i32;\nexport namespace i32 {\n export const MIN_VALUE: i32 = -2147483648;\n export const MAX_VALUE: i32 = 2147483647;\n export declare function clz(value: i32): i32;\n export declare function ctz(value: i32): i32;\n export declare function popcnt(value: i32): i32;\n export declare function rotl(value: i32, shift: i32): i32;\n export declare function rotr(value: i32, shift: i32): i32;\n export declare function reinterpret_f32(value: f32): i32;\n export declare function load8_s(offset: usize, constantOffset?: usize): i32;\n export declare function load8_u(offset: usize, constantOffset?: usize): i32;\n export declare function load16_s(offset: usize, constantOffset?: usize): i32;\n export declare function load16_u(offset: usize, constantOffset?: usize): i32;\n export declare function load(offset: usize, constantOffset?: usize): i32;\n export declare function store8(offset: usize, value: i32, constantOffset?: usize): void;\n export declare function store16(offset: usize, value: i32, constantOffset?: usize): void;\n export declare function store(offset: usize, value: i32, constantOffset?: usize): void;\n}\n\nexport declare function i64(value: void): i64;\nexport namespace i64 {\n export const MIN_VALUE: i64 = -9223372036854775808;\n export const MAX_VALUE: i64 = 9223372036854775807;\n export declare function clz(value: i64): i64;\n export declare function ctz(value: i64): i64;\n export declare function load8_s(offset: usize, constantOffset?: usize): i64;\n export declare function load8_u(offset: usize, constantOffset?: usize): u64;\n export declare function load16_s(offset: usize, constantOffset?: usize): i64;\n export declare function load16_u(offset: usize, constantOffset?: usize): u64;\n export declare function load32_s(offset: usize, constantOffset?: usize): i64;\n export declare function load32_u(offset: usize, constantOffset?: usize): u64;\n export declare function load(offset: usize, constantOffset?: usize): i64;\n export declare function popcnt(value: i64): i64;\n export declare function rotl(value: i64, shift: i64): i64;\n export declare function rotr(value: i64, shift: i64): i64;\n export declare function reinterpret_f64(value: f64): i64;\n export declare function store8(offset: usize, value: i64, constantOffset?: usize): void;\n export declare function store16(offset: usize, value: i64, constantOffset?: usize): void;\n export declare function store32(offset: usize, value: i64, constantOffset?: usize): void;\n export declare function store(offset: usize, value: i64, constantOffset?: usize): void;\n}\n\nexport declare function isize(value: void): isize;\nexport namespace 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}\n\nexport declare function u8(value: void): u8;\nexport namespace u8 {\n export const MIN_VALUE: u8 = 0;\n export const MAX_VALUE: u8 = 255;\n}\n\nexport declare function u16(value: void): u16;\nexport namespace u16 {\n export const MIN_VALUE: u16 = 0;\n export const MAX_VALUE: u16 = 65535;\n}\n\nexport declare function u32(value: void): u32;\nexport namespace u32 {\n export const MIN_VALUE: u32 = 0;\n export const MAX_VALUE: u32 = 4294967295;\n}\n\nexport declare function u64(value: void): u64;\nexport namespace u64 {\n export const MIN_VALUE: u64 = 0;\n export const MAX_VALUE: u64 = 18446744073709551615;\n}\n\nexport declare function usize(value: void): usize;\nexport namespace usize {\n export const MIN_VALUE: usize = 0;\n export const MAX_VALUE: usize = sizeof() == sizeof()\n ? 4294967295\n : 18446744073709551615;\n}\n\nexport declare function bool(value: void): bool;\nexport namespace bool {\n export const MIN_VALUE: bool = false;\n export const MAX_VALUE: bool = true;\n}\n\nexport declare function f32(value: void): f32;\nexport namespace f32 {\n export const MIN_VALUE = reinterpret(0xFF7FFFFF); // -0x1.fffffep+127f\n export const MAX_VALUE = reinterpret(0x7F7FFFFF); // 0x1.fffffep+127f\n export const MIN_POSITIVE_VALUE = reinterpret(0x00800000); // 0x1p-126f\n export const MIN_SAFE_INTEGER: f32 = -16777215;\n export const MAX_SAFE_INTEGER: f32 = 16777215;\n export const EPSILON = reinterpret(0x34000000); // 0x1p-23f\n export declare function abs(value: f32): f32;\n export declare function ceil(value: f32): f32;\n export declare function copysign(x: f32, y: f32): f32;\n export declare function floor(value: f32): f32;\n export declare function load(offset: usize, constantOffset?: usize): f32;\n export declare function max(left: f32, right: f32): f32;\n export declare function min(left: f32, right: f32): f32;\n export declare function nearest(value: f32): f32;\n export declare function reinterpret_i32(value: i32): f32;\n export declare function sqrt(value: f32): f32;\n export declare function store(offset: usize, value: f32, constantOffset?: usize): void;\n export declare function trunc(value: f32): f32;\n}\n\nexport declare function f64(value: void): f64;\nexport namespace f64 {\n export const MIN_VALUE = reinterpret(0xFFEFFFFFFFFFFFFF); // -0x1.fffffffffffffp+1023\n export const MAX_VALUE = reinterpret(0x7FEFFFFFFFFFFFFF); // 0x1.fffffffffffffp+1023\n export const MIN_POSITIVE_VALUE = reinterpret(0x0010000000000000); // 0x1p-1022\n export const MIN_SAFE_INTEGER: f64 = -9007199254740991;\n export const MAX_SAFE_INTEGER: f64 = 9007199254740991;\n export const EPSILON = reinterpret(0x3CB0000000000000); // 0x1p-52\n export declare function abs(value: f64): f64;\n export declare function ceil(value: f64): f64;\n export declare function copysign(x: f64, y: f64): f64;\n export declare function floor(value: f64): f64;\n export declare function load(offset: usize, constantOffset?: usize): f64;\n export declare function max(left: f64, right: f64): f64;\n export declare function min(left: f64, right: f64): f64;\n export declare function nearest(value: f64): f64;\n export declare function reinterpret_i64(value: i64): f64;\n export declare function sqrt(value: f64): f64;\n export declare function store(offset: usize, value: f64, constantOffset?: usize): void;\n export declare function trunc(value: f64): f64;\n}\n\nexport declare const HEAP_BASE: usize;\n\nexport declare function start(): void;\n","collector/itcm":"/**\n * Incremental Tri-Color-Marking Garbage Collector.\n *\n * @module std/assembly/collector/itcm\n *//***/\n\n// Based on the concepts of Bach Le's μgc, see: https://github.com/bullno1/ugc\n\nimport {\n AL_MASK,\n MAX_SIZE_32\n} from \"../internal/allocator\";\n\n// ╒═══════════════ Managed object 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// │ next │ F │ ◄─┐ = nextWithFlags\n// ├─────────────────────────────────────────────────────────┴─────┤ │ usize\n// │ prev │ ◄─┘\n// ╞═══════════════════════════════════════════════════════════════╡ SIZE ┘\n// │ ... data ... │\n// └───────────────────────────────────────────────────────────────┘\n// F: flags\n\n/** Managed object flags. */\nnamespace Flags {\n /** Object is unreachable (so far). */\n export var WHITE = 0;\n /** Object is reachable. */\n export var BLACK = 1;\n /** Object is reachable but its children have not yet been scanned. */\n export const GRAY = 2;\n /** Mask to obtain just the flag bits. */\n export const MASK = AL_MASK;\n}\n\n/** Represents a managed object in memory, consisting of a header followed by the object's data. */\n@unmanaged\nclass ManagedObject {\n\n /** Pointer to the next object with additional flags stored in the alignment bits. */\n nextWithFlags: usize;\n\n /** Pointer to the previous object. */\n prev: ManagedObject;\n\n /** Visitor function called with the data pointer (excl. header). */\n visitFn: (obj: usize) => void;\n\n /** Size of a managed object after alignment. */\n static readonly SIZE: usize = (offsetof() + AL_MASK) & ~AL_MASK;\n\n /** Gets the pointer to the next object in the list. */\n get next(): ManagedObject {\n return changetype(this.nextWithFlags & ~Flags.MASK);\n }\n\n /** Sets the pointer to the next object in the list. */\n set next(obj: ManagedObject) {\n this.nextWithFlags = changetype(obj) | (this.nextWithFlags & Flags.MASK);\n }\n\n /** Inserts an object to this list. */\n insert(obj: ManagedObject): void {\n var prev = this.prev;\n obj.next = this;\n obj.prev = prev;\n prev.next = obj;\n this.prev = obj;\n }\n\n /** Removes this object from its list. */\n remove(): void {\n var next = this.next;\n var prev = this.prev;\n next.prev = prev;\n prev.next = next;\n }\n\n /** Tests if this object is white, that is unreachable (so far). */\n get isWhite(): bool {\n return (this.nextWithFlags & Flags.MASK) == Flags.WHITE;\n }\n\n /** Marks this object as white, that is unreachable (so far). */\n makeWhite(): void {\n this.nextWithFlags = (this.nextWithFlags & ~Flags.MASK) | Flags.WHITE;\n }\n\n /** Tests if this object is black, that is reachable. Root objects are always reachable. */\n get isBlack(): bool {\n return (this.nextWithFlags & Flags.MASK) == Flags.BLACK;\n }\n\n /** Marks this object as black, that is reachable. */\n makeBlack(): void {\n this.nextWithFlags = (this.nextWithFlags & ~Flags.MASK) | Flags.BLACK;\n }\n\n /** Tests if this object is gray, that is reachable with unscanned children. */\n get isGray(): bool {\n return (this.nextWithFlags & Flags.MASK) == Flags.GRAY;\n }\n\n /** Marks this object as gray, that is reachable with unscanned children. */\n makeGray(): void {\n if (this != iter) {\n this.remove();\n to.insert(this);\n } else {\n iter = iter.prev;\n }\n this.nextWithFlags = (this.nextWithFlags & ~Flags.MASK) | Flags.GRAY;\n }\n}\n\n/** Collector states. */\nconst enum State {\n /** Not yet initialized. */\n INIT = 0,\n /** Currently transitioning from SWEEP to MARK state. */\n IDLE = 1,\n /** Currently marking reachable objects. */\n MARK = 2,\n /** Currently sweeping unreachable objects. */\n SWEEP = 3\n}\n\n/** Current collector state. */\nvar state = State.INIT;\n\n// From and to spaces\nvar from: ManagedObject;\nvar to: ManagedObject;\nvar iter: ManagedObject;\n\n/** Performs a single step according to the current state. */\nfunction gc_step(): void {\n var obj: ManagedObject;\n switch (state) {\n case State.INIT: {\n from = changetype(allocate_memory(ManagedObject.SIZE));\n from.nextWithFlags = changetype(from);\n from.prev = from;\n to = changetype(allocate_memory(ManagedObject.SIZE));\n to.nextWithFlags = changetype(to);\n to.prev = to;\n iter = to;\n // fall-through\n }\n case State.IDLE: {\n state = State.MARK;\n break;\n }\n case State.MARK: {\n obj = iter.next;\n if (obj != to) {\n iter = obj;\n obj.makeBlack();\n obj.visitFn(changetype(obj) + ManagedObject.SIZE);\n } else {\n obj = iter.next;\n if (obj == to) {\n let temp = from;\n from = to;\n to = temp;\n Flags.WHITE ^= 1;\n Flags.BLACK ^= 1;\n iter = from.next;\n state = State.SWEEP;\n }\n }\n break;\n }\n case State.SWEEP: {\n obj = iter;\n if (obj != to) {\n iter = obj.next;\n free_memory(changetype(obj));\n } else {\n to.nextWithFlags = changetype(to);\n to.prev = to;\n state = State.IDLE;\n }\n break;\n }\n }\n}\n\n/** Allocates a managed object. */\n@global\nexport function gc_allocate(\n size: usize,\n visitFn: (obj: usize) => void\n): usize {\n assert(size <= MAX_SIZE_32 - ManagedObject.SIZE);\n var obj = changetype(allocate_memory(ManagedObject.SIZE + size));\n obj.makeWhite();\n obj.visitFn = visitFn;\n from.insert(obj);\n return changetype(obj) + ManagedObject.SIZE;\n}\n\n/** Visits a reachable object. Called from the visitFn functions. */\n@global\nexport function gc_visit(obj: ManagedObject): void {\n if (state == State.SWEEP) return;\n if (obj.isWhite) obj.makeGray();\n}\n\n/** Registers a managed child object with its parent object. */\n@global\nexport function gc_register(parent: ManagedObject, child: ManagedObject): void {\n if (parent.isBlack && child.isWhite) parent.makeGray();\n}\n\n/** Iterates the root set. Provided by the compiler according to the program. */\n@global\nexport declare function gc_roots(): void;\n\n/** Performs a full garbage collection cycle. */\n@global\nexport function gc_collect(): void {\n // begin collecting if not yet collecting\n switch (state) {\n case State.INIT:\n case State.IDLE: gc_step();\n }\n // finish the cycle\n while (state != State.IDLE) gc_step();\n}\n\ndeclare function allocate_memory(size: usize): usize;\ndeclare function free_memory(ptr: usize): void;\n\n// Considerations\n//\n// - An API that consists mostly of just replacing `allocate_memory` would be ideal, possibly taking\n// any additional number of parameters that are necessary, like the parent and the visitor.\n//\n// - Not having to generate a helper function for iterating globals but instead marking specific\n// nodes as roots could simplify the embedding, but whether this is feasible or not depends on its\n// performance characteristics and the possibility of tracking root status accross assignments.\n// For example, root status could be implemented as some sort of referenced-by-globals counting\n// and a dedicated list of root objects.\n//\n// - In 32-bit specifically, there is some free space in TLSF object headers due to alignment that\n// could be repurposed to store some GC information, like a class id. Certainly, this somewhat\n// depends on the efficiency of the used mechanism to detect this at compile time, including when\n// a different allocator is used.\n//\n// - Think about generations.\n",error:'export class Error {\n\n message: string;\n stack: string = ""; // TODO\n\n constructor(message: string = "") {\n this.message = message;\n }\n}\n\nexport class RangeError extends Error {}\nexport class TypeError extends Error {}\n',"internal/allocator":"/** Number of alignment bits. */\nexport const AL_BITS: u32 = 3;\n\n/** Number of possible alignment values. */\nexport const AL_SIZE: usize = 1 << AL_BITS;\n\n/** Mask to obtain just the alignment bits. */\nexport const AL_MASK: usize = AL_SIZE - 1;\n\n/** Maximum 32-bit allocation size. */\nexport const MAX_SIZE_32: usize = 1 << 30; // 1GB\n","internal/array":"import {\n loadUnsafe,\n storeUnsafe\n} from \"./arraybuffer\";\n\nimport {\n Array\n} from \"../array\";\n\n/** Obtains the default comparator for the specified type. */\n@inline\nexport function defaultComparator(): (a: T, b: T) => i32 {\n return (a: T, b: T): i32 => ((a > b) - (a < b)); // compiles to a constant table index\n}\n\n/** Sorts an Array with the 'Insertion Sort' algorithm. */\nexport function insertionSort(arr: Array, comparator: (a: T, b: T) => i32): Array {\n var buffer = arr.buffer_;\n for (let i: i32 = 0, length: i32 = arr.length; i < length; i++) {\n let a = loadUnsafe(buffer, i); // a = arr[i]\n let j = i - 1;\n while (j >= 0) {\n let b = loadUnsafe(buffer, j); // b = arr[j]\n if (comparator(a, b) < 0) {\n storeUnsafe(buffer, j-- + 1, b); // arr[j + 1] = b\n } else break;\n }\n storeUnsafe(buffer, j + 1, a); // arr[j + 1] = a\n }\n return arr;\n}\n\n/** Sorts an Array with the 'Weak Heap Sort' algorithm. */\nexport function weakHeapSort(arr: Array, comparator: (a: T, b: T) => i32): Array {\n const shift32 = alignof();\n\n var length = arr.length;\n var bitsetSize = (length + 31) >> 5 << shift32;\n var bitset = allocate_memory(bitsetSize); // indexed in 32-bit chunks below\n set_memory(bitset, 0, bitsetSize);\n\n // see: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.21.1863&rep=rep1&type=pdf\n\n var buffer = arr.buffer_;\n for (let i = length - 1; i > 0; i--) {\n let j = i;\n while ((j & 1) == (load(bitset + (j >> 6 << shift32)) >> (j >> 1 & 31) & 1)) j >>= 1;\n\n let p = j >> 1;\n let a = loadUnsafe(buffer, p); // a = arr[p]\n let b = loadUnsafe(buffer, i); // b = arr[i]\n if (comparator(a, b) < 0) {\n store(\n bitset + (i >> 5 << shift32),\n load(bitset + (i >> 5 << shift32)) ^ (1 << (i & 31))\n );\n storeUnsafe(buffer, i, a); // arr[i] = a\n storeUnsafe(buffer, p, b); // arr[p] = b\n }\n }\n\n for (let i = length - 1; i >= 2; i--) {\n let a = loadUnsafe(buffer, 0); // a = arr[0]\n storeUnsafe(buffer, 0, loadUnsafe(buffer, i)); // arr[0] = arr[i]\n storeUnsafe(buffer, i, a); // arr[i] = a\n\n let x = 1, y: i32;\n while ((y = (x << 1) + ((load(bitset + (x >> 5 << shift32)) >> (x & 31)) & 1)) < i) x = y;\n\n while (x > 0) {\n a = loadUnsafe(buffer, 0); // a = arr[0]\n let b = loadUnsafe(buffer, x); // b = arr[x]\n\n if (comparator(a, b) < 0) {\n store(\n bitset + (x >> 5 << shift32),\n load(bitset + (x >> 5 << shift32)) ^ (1 << (x & 31))\n );\n storeUnsafe(buffer, x, a); // arr[x] = a\n storeUnsafe(buffer, 0, b); // arr[0] = b\n }\n x >>= 1;\n }\n }\n\n free_memory(bitset);\n\n var t = loadUnsafe(buffer, 1); // t = arr[1]\n storeUnsafe(buffer, 1, loadUnsafe(buffer, 0)); // arr[1] = arr[0]\n storeUnsafe(buffer, 0, t); // arr[0] = t\n return arr;\n}\n","internal/arraybuffer":'import { AL_MASK, MAX_SIZE_32 } from "./allocator";\n\n/** Size of an ArrayBuffer header. */\nexport const HEADER_SIZE: usize = (offsetof() + AL_MASK) & ~AL_MASK;\n\n/** Maximum byte length of an ArrayBuffer. */\nexport const MAX_BLENGTH: i32 = MAX_SIZE_32 - HEADER_SIZE;\n\n/** Computes an ArrayBuffer\'s size in memory. */\nexport function computeSize(byteLength: i32): usize {\n // round up to power of 2, with HEADER_SIZE=8:\n // 0 -> 2^3 = 8\n // 1..8 -> 2^4 = 16\n // 9..24 -> 2^5 = 32\n // ...\n // MAX_LENGTH -> 2^30 = 0x40000000 (MAX_SIZE_32)\n return 1 << (32 - clz(byteLength + HEADER_SIZE - 1));\n}\n\n/** Allocates a raw ArrayBuffer. Contents remain uninitialized. */\nexport function allocUnsafe(byteLength: i32): ArrayBuffer {\n assert(byteLength <= MAX_BLENGTH);\n var buffer = allocate_memory(computeSize(byteLength));\n store(buffer, byteLength, offsetof("byteLength"));\n return changetype(buffer);\n}\n\n/** Reallocates an ArrayBuffer, resizing it as requested. Tries to modify the buffer in place. */\nexport function reallocUnsafe(buffer: ArrayBuffer, newByteLength: i32): ArrayBuffer {\n var oldByteLength = buffer.byteLength;\n if (newByteLength > oldByteLength) {\n assert(newByteLength <= MAX_BLENGTH);\n if (newByteLength <= (computeSize(oldByteLength) - HEADER_SIZE)) { // fast path: zero out additional space\n store(changetype(buffer), newByteLength, offsetof("byteLength"));\n set_memory(\n changetype(buffer) + HEADER_SIZE + oldByteLength,\n 0,\n (newByteLength - oldByteLength)\n );\n } else { // slow path: copy to new buffer\n let newBuffer = allocUnsafe(newByteLength);\n move_memory(\n changetype(newBuffer) + HEADER_SIZE,\n changetype(buffer) + HEADER_SIZE,\n oldByteLength\n );\n set_memory(\n changetype(newBuffer) + HEADER_SIZE + oldByteLength,\n 0,\n (newByteLength - oldByteLength)\n );\n return newBuffer;\n }\n } else if (newByteLength < oldByteLength) { // fast path: override size\n // TBD: worth to copy and release if size is significantly less than before?\n assert(newByteLength >= 0);\n store(changetype(buffer), newByteLength, offsetof("byteLength"));\n }\n return buffer;\n}\n\n@inline\nexport function loadUnsafe(buffer: ArrayBuffer, index: i32): V {\n return load(changetype(buffer) + (index << alignof()), HEADER_SIZE);\n}\n\n@inline\nexport function storeUnsafe(buffer: ArrayBuffer, index: i32, value: V): void {\n store(changetype(buffer) + (index << alignof()), value, HEADER_SIZE);\n}\n\n@inline\nexport function loadUnsafeWithOffset(buffer: ArrayBuffer, index: i32, byteOffset: i32): V {\n return load(changetype(buffer) + byteOffset + (index << alignof()), HEADER_SIZE);\n}\n\n@inline\nexport function storeUnsafeWithOffset(buffer: ArrayBuffer, index: i32, value: V, byteOffset: i32): void {\n store(changetype(buffer) + byteOffset + (index << alignof()), value, HEADER_SIZE);\n}\n',"internal/hash":'import {\n HEADER_SIZE as HEADER_SIZE_STR\n} from "./string";\n\n/** Computes the 32-bit hash of a value of any type. */\n@inline\nexport function hash(key: T): u32 {\n // branch-level tree-shaking makes this a `(return (call ...))`\n if (isString(key)) {\n return hashStr(key);\n } else if (isReference()) {\n if (sizeof() == 4) return hash32(changetype(key));\n if (sizeof() == 8) return hash64(changetype(key));\n } else if (isFloat()) {\n if (sizeof() == 4) return hash32(reinterpret(key));\n if (sizeof() == 8) return hash64(reinterpret(key));\n } else {\n if (sizeof() == 1) return hash8 (key);\n if (sizeof() == 2) return hash16(key);\n if (sizeof() == 4) return hash32(key);\n if (sizeof() == 8) return hash64(key);\n }\n unreachable();\n}\n\n// FNV-1a 32-bit as a starting point, see: http://isthe.com/chongo/tech/comp/fnv/\n\nconst FNV_OFFSET: u32 = 2166136261;\nconst FNV_PRIME: u32 = 16777619;\n\nfunction hash8(key: u32): u32 {\n return (FNV_OFFSET ^ key) * FNV_PRIME;\n}\n\nfunction hash16(key: u32): u32 {\n var v = FNV_OFFSET;\n v = (v ^ ( key & 0xff)) * FNV_PRIME;\n v = (v ^ ( key >> 8 )) * FNV_PRIME;\n return v;\n}\n\nfunction hash32(key: u32): u32 {\n var v = FNV_OFFSET;\n v = (v ^ ( key & 0xff)) * FNV_PRIME;\n v = (v ^ ((key >> 8) & 0xff)) * FNV_PRIME;\n v = (v ^ ((key >> 16) & 0xff)) * FNV_PRIME;\n v = (v ^ ( key >> 24 )) * FNV_PRIME;\n return v;\n}\n\nfunction hash64(key: u64): u32 {\n var l = key;\n var h = (key >>> 32);\n var v = FNV_OFFSET;\n v = (v ^ ( l & 0xff)) * FNV_PRIME;\n v = (v ^ ((l >> 8) & 0xff)) * FNV_PRIME;\n v = (v ^ ((l >> 16) & 0xff)) * FNV_PRIME;\n v = (v ^ ( l >> 24 )) * FNV_PRIME;\n v = (v ^ ( h & 0xff)) * FNV_PRIME;\n v = (v ^ ((h >> 8) & 0xff)) * FNV_PRIME;\n v = (v ^ ((h >> 16) & 0xff)) * FNV_PRIME;\n v = (v ^ ( h >> 24 )) * FNV_PRIME;\n return v;\n}\n\nfunction hashStr(key: string): u32 {\n var v = FNV_OFFSET;\n for (let i: usize = 0, k: usize = key.length << 1; i < k; ++i) {\n v = (v ^ load(changetype(key) + i, HEADER_SIZE_STR)) * FNV_PRIME;\n }\n return v;\n}\n',"internal/string":'import {\n MAX_SIZE_32\n} from "./allocator";\n\nimport {\n String\n} from "../string";\n\n/** Size of a String header. */\nexport const HEADER_SIZE = (offsetof() + 1) & ~1; // 2 byte aligned\n\n/** Maximum length of a String. */\nexport const MAX_LENGTH = (MAX_SIZE_32 - HEADER_SIZE) >>> 1;\n\n/** Singleton empty String. */\nexport const EMPTY = changetype(""); // TODO: is this a bad idea with \'===\' in place?\n\n/** Allocates a raw String with uninitialized contents. */\nexport function allocate(length: i32): String {\n assert(length > 0 && length <= MAX_LENGTH);\n var buffer = allocate_memory(HEADER_SIZE + (length << 1));\n store(buffer, length);\n return changetype(buffer);\n}\n\nexport function 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 }\n default: return false;\n }\n}\n\nexport const 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 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, HEADER_SIZE);\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, HEADER_SIZE);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEADER_SIZE);\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, HEADER_SIZE)) {\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 }\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, HEADER_SIZE);\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',"internal/typedarray":'import {\n HEADER_SIZE as HEADER_SIZE_AB,\n MAX_BLENGTH,\n allocUnsafe,\n loadUnsafeWithOffset,\n storeUnsafeWithOffset\n} from "./arraybuffer";\n\n/** Typed array base class. Not a global object. */\nexport abstract class TypedArray {\n\n readonly buffer: ArrayBuffer;\n readonly byteOffset: i32;\n readonly byteLength: i32;\n\n constructor(length: i32) {\n const MAX_LENGTH = MAX_BLENGTH / sizeof();\n if (length > MAX_LENGTH) throw new RangeError("Invalid typed array length");\n var byteLength = length << alignof();\n var buffer = allocUnsafe(byteLength);\n set_memory(changetype(buffer) + HEADER_SIZE_AB, 0, byteLength);\n this.buffer = buffer;\n this.byteOffset = 0;\n this.byteLength = byteLength;\n }\n\n get length(): i32 {\n return (this.byteLength - this.byteOffset) >> alignof();\n }\n\n @operator("[]")\n protected __get(index: i32): T {\n var byteOffset = this.byteOffset;\n var elementLength = (this.byteLength - byteOffset) >>> alignof();\n if (index >= elementLength) throw new Error("Index out of bounds");\n return loadUnsafeWithOffset(this.buffer, index, byteOffset);\n }\n\n @operator("{}")\n protected __unchecked_get(index: i32): T {\n return loadUnsafeWithOffset(this.buffer, index, this.byteOffset);\n }\n\n @operator("[]=")\n protected __set(index: i32, value: V): void {\n var byteOffset = this.byteOffset;\n var elementLength = (this.byteLength - byteOffset) >>> alignof();\n if (index >= elementLength) throw new Error("Index out of bounds");\n storeUnsafeWithOffset(this.buffer, index, value, byteOffset);\n }\n\n @operator("{}=")\n protected __unchecked_set(index: i32, value: V): void {\n storeUnsafeWithOffset(this.buffer, index, value, this.byteOffset);\n }\n\n // copyWithin(target: i32, start: i32, end: i32 = this.length): this\n\n @inline\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): TypedArray {\n var length = this.length;\n if (begin < 0) begin = max(length + begin, 0);\n else begin = min(begin, length);\n if (end < 0) end = max(length + end, begin);\n else end = max(min(end, length), begin);\n var slice = allocate_memory(offsetof());\n store(slice, this.buffer, offsetof("buffer"));\n store(slice, begin << alignof(), offsetof("byteOffset"));\n store(slice, end << alignof(), offsetof("byteLength"));\n return changetype(slice);\n }\n}\n',iterator:"// export abstract class Iterator {\n// abstract get done(): bool;\n// abstract next(): T;\n// }\n",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 (let 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 (let 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",math:'export declare namespace JSMath {\n\n export const E: f64;\n export const LN2: f64;\n export const LN10: f64;\n export const LOG2E: f64;\n export const LOG10E: f64;\n export const PI: f64;\n export const SQRT1_2: f64;\n export const SQRT2: f64;\n\n export function abs(x: f64): f64;\n export function acos(x: f64): f64;\n export function acosh(x: f64): f64;\n export function asin(x: f64): f64;\n export function asinh(x: f64): f64;\n export function atan(x: f64): f64;\n export function atan2(y: f64, x: f64): f64;\n export function atanh(x: f64): f64;\n export function cbrt(x: f64): f64;\n export function ceil(x: f64): f64;\n export function clz32(x: f64): f64;\n export function cos(x: f64): f64;\n export function cosh(x: f64): f64;\n export function exp(x: f64): f64;\n export function expm1(x: f64): f64;\n export function floor(x: f64): f64;\n export function fround(x: f64): f32;\n export function hypot(value1: f64, value2: f64): f64; // TODO: rest\n export function imul(a: f64, b: f64): f64;\n export function log(x: f64): f64;\n export function log10(x: f64): f64;\n export function log1p(x: f64): f64;\n export function log2(x: f64): f64;\n export function max(value1: f64, value2: f64): f64; // TODO: rest\n export function min(value1: f64, value2: f64): f64; // TODO: rest\n export function pow(base: f64, exponent: f64): f64;\n export function random(): f64;\n export function round(x: f64): f64;\n export function sign(x: f64): f64;\n export function sin(x: f64): f64;\n export function sinh(x: f64): f64;\n export function sqrt(x: f64): f64;\n export function tan(x: f64): f64;\n export function tanh(x: f64): f64;\n export function trunc(x: f64): f64;\n}\n\nimport {\n abs as builtin_abs,\n ceil as builtin_ceil,\n clz as builtin_clz,\n copysign as builtin_copysign,\n floor as builtin_floor,\n max as builtin_max,\n min as builtin_min,\n sqrt as builtin_sqrt,\n trunc as builtin_trunc\n} from "./builtins";\n\n// SUN COPYRIGHT NOTICE\n//\n// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.\n// Developed at SunPro, a Sun Microsystems, Inc. business.\n// Permission to use, copy, modify, and distribute this software\n// is freely granted, provided that this notice is preserved.\n//\n// Applies to all functions marked with a comment referring here.\n\n// TODO: sin, cos, tan\n\nfunction R(z: f64): f64 { // Rational approximation of (asin(x)-x)/x^3\n const // see: musl/src/math/asin.c and SUN COPYRIGHT NOTICE above\n pS0 = reinterpret(0x3FC5555555555555), // 1.66666666666666657415e-01\n pS1 = reinterpret(0xBFD4D61203EB6F7D), // -3.25565818622400915405e-01\n pS2 = reinterpret(0x3FC9C1550E884455), // 2.01212532134862925881e-01\n pS3 = reinterpret(0xBFA48228B5688F3B), // -4.00555345006794114027e-02\n pS4 = reinterpret(0x3F49EFE07501B288), // 7.91534994289814532176e-04\n pS5 = reinterpret(0x3F023DE10DFDF709), // 3.47933107596021167570e-05\n qS1 = reinterpret(0xC0033A271C8A2D4B), // -2.40339491173441421878e+00\n qS2 = reinterpret(0x40002AE59C598AC8), // 2.02094576023350569471e+00\n qS3 = reinterpret(0xBFE6066C1B8D0159), // -6.88283971605453293030e-01\n qS4 = reinterpret(0x3FB3B8C5B12E9282); // 7.70381505559019352791e-02\n var p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 + z * (pS4 + z * pS5)))));\n var q = 1.0 + z * (qS1 + z * (qS2 + z * (qS3 + z * qS4)));\n return p / q;\n}\n\nfunction expo2(x: f64): f64 { // exp(x)/2 for x >= log(DBL_MAX)\n const // see: musl/src/math/__expo2.c\n k = 2043,\n kln2 = reinterpret(0x40962066151ADD8B); // 0x1.62066151add8bp+10\n var scale = reinterpret(((0x3FF + k / 2) << 20) << 32);\n return NativeMath.exp(x - kln2) * scale * scale;\n}\n\nvar random_seeded = false;\nvar random_state0: u64;\nvar random_state1: u64;\n\nfunction murmurHash3(h: u64): u64 { // Force all bits of a hash block to avalanche\n h ^= h >> 33; // see: https://github.com/aappleby/smhasher\n h *= 0xFF51AFD7ED558CCD;\n h ^= h >> 33;\n h *= 0xC4CEB9FE1A85EC53;\n h ^= h >> 33;\n return h;\n}\n\nexport namespace NativeMath {\n\n export const E = reinterpret(0x4005BF0A8B145769); // 2.7182818284590452354\n export const LN2 = reinterpret(0x3FE62E42FEFA39EF); // 0.69314718055994530942\n export const LN10 = reinterpret(0x40026BB1BBB55516); // 2.30258509299404568402\n export const LOG2E = reinterpret(0x3FF71547652B82FE); // 1.4426950408889634074\n export const LOG10E = reinterpret(0x3FDBCB7B1526E50E); // 0.43429448190325182765\n export const PI = reinterpret(0x400921FB54442D18); // 3.14159265358979323846\n export const SQRT1_2 = reinterpret(0x3FE6A09E667F3BCD); // 0.70710678118654752440\n export const SQRT2 = reinterpret(0x3FF6A09E667F3BCD); // 1.41421356237309504880\n\n @inline\n export function abs(x: f64): f64 {\n return builtin_abs(x);\n }\n\n export function acos(x: f64): f64 { // see: musl/src/math/acos.c and SUN COPYRIGHT NOTICE above\n const\n pio2_hi = reinterpret(0x3FF921FB54442D18), // 1.57079632679489655800e+00\n pio2_lo = reinterpret(0x3C91A62633145C07), // 6.12323399573676603587e-17\n Ox1p_120f = reinterpret(0x03800000);\n var hx = (reinterpret(x) >> 32);\n var ix = hx & 0x7FFFFFFF;\n if (ix >= 0x3FF00000) {\n let lx = reinterpret(x);\n if ((ix - 0x3FF00000 | lx) == 0) {\n if (hx >> 31) return 2 * pio2_hi + Ox1p_120f;\n return 0;\n }\n return 0 / (x - x);\n }\n if (ix < 0x3FE00000) {\n if (ix <= 0x3C600000) return pio2_hi + Ox1p_120f;\n return pio2_hi - (x - (pio2_lo - x * R(x * x)));\n }\n var s: f64, w: f64, z: f64;\n if (hx >> 31) {\n z = (1.0 + x) * 0.5;\n s = builtin_sqrt(z);\n w = R(z) * s - pio2_lo;\n return 2 * (pio2_hi - (s + w));\n }\n z = (1.0 - x) * 0.5;\n s = builtin_sqrt(z);\n var df = reinterpret(reinterpret(s) & 0xFFFFFFFF00000000);\n var c = (z - df * df) / (s + df);\n w = R(z) * s + c;\n return 2 * (df + w);\n }\n\n export function acosh(x: f64): f64 { // see: musl/src/math/acosh.c\n const s = reinterpret(0x3FE62E42FEFA39EF);\n var e = reinterpret(x) >> 52 & 0x7FF;\n if (e < 0x3FF + 1) return log1p(x - 1 + builtin_sqrt((x - 1) * (x - 1) + 2 * (x - 1)));\n if (e < 0x3FF + 26) return log(2 * x - 1 / (x + builtin_sqrt(x * x - 1)));\n return log(x) + s;\n }\n\n export function asin(x: f64): f64 { // see: musl/src/math/asin.c and SUN COPYRIGHT NOTICE above\n const\n pio2_hi = reinterpret(0x3FF921FB54442D18), // 1.57079632679489655800e+00\n pio2_lo = reinterpret(0x3C91A62633145C07), // 6.12323399573676603587e-17\n Ox1p_120f = reinterpret(0x03800000);\n var hx = (reinterpret(x) >> 32);\n var ix = hx & 0x7FFFFFFF;\n if (ix >= 0x3FF00000) {\n let lx = reinterpret(x);\n if ((ix - 0x3FF00000 | lx) == 0) return x * pio2_hi + Ox1p_120f;\n return 0 / (x - x);\n }\n if (ix < 0x3FE00000) {\n if (ix < 0x3E500000 && ix >= 0x00100000) return x;\n return x + x * R(x * x);\n }\n var z = (1.0 - builtin_abs(x)) * 0.5;\n var s = builtin_sqrt(z);\n var r = R(z);\n if (ix >= 0x3FEF3333) x = pio2_hi - (2 * (s + s * r) - pio2_lo);\n else {\n let f = reinterpret(reinterpret(s) & 0xFFFFFFFF00000000);\n let c = (z - f * f) / (s + f);\n x = 0.5 * pio2_hi - (2 * s * r - (pio2_lo - 2 * c) - (0.5 * pio2_hi - 2 * f));\n }\n if (hx >> 31) return -x;\n return x;\n }\n\n export function asinh(x: f64): f64 { // see: musl/src/math/asinh.c\n const c = reinterpret(0x3FE62E42FEFA39EF); // 0.693147180559945309417232121458176568\n var u = reinterpret(x);\n var e = u >> 52 & 0x7FF;\n var s = u >> 63;\n u &= 0x7FFFFFFFFFFFFFFF;\n x = reinterpret(u);\n if (e >= 0x3FF + 26) x = log(x) + c;\n else if (e >= 0x3FF + 1) x = log(2 * x + 1 / (builtin_sqrt(x * x + 1) + x));\n else if (e >= 0x3FF - 26) x = log1p(x + x * x / (builtin_sqrt(x * x + 1) + 1));\n return s ? -x : x;\n }\n\n export function atan(x: f64): f64 { // see musl/src/math/atan.c and SUN COPYRIGHT NOTICE above\n const\n atanhi0 = reinterpret(0x3FDDAC670561BB4F), // 4.63647609000806093515e-01\n atanhi1 = reinterpret(0x3FE921FB54442D18), // 7.85398163397448278999e-01\n atanhi2 = reinterpret(0x3FEF730BD281F69B), // 9.82793723247329054082e-01\n atanhi3 = reinterpret(0x3FF921FB54442D18), // 1.57079632679489655800e+00\n atanlo0 = reinterpret(0x3C7A2B7F222F65E2), // 2.26987774529616870924e-17\n atanlo1 = reinterpret(0x3C81A62633145C07), // 3.06161699786838301793e-17\n atanlo2 = reinterpret(0x3C7007887AF0CBBD), // 1.39033110312309984516e-17\n atanlo3 = reinterpret(0x3C91A62633145C07), // 6.12323399573676603587e-17\n aT0 = reinterpret(0x3FD555555555550D), // 3.33333333333329318027e-01\n aT1 = reinterpret(0xBFC999999998EBC4), // -1.99999999998764832476e-01\n aT2 = reinterpret(0x3FC24924920083FF), // 1.42857142725034663711e-01\n aT3 = reinterpret(0xBFBC71C6FE231671), // -1.11111104054623557880e-01,\n aT4 = reinterpret(0x3FB745CDC54C206E), // 9.09088713343650656196e-02\n aT5 = reinterpret(0xBFB3B0F2AF749A6D), // -7.69187620504482999495e-02\n aT6 = reinterpret(0x3FB10D66A0D03D51), // 6.66107313738753120669e-02\n aT7 = reinterpret(0xBFADDE2D52DEFD9A), // -5.83357013379057348645e-02\n aT8 = reinterpret(0x3FA97B4B24760DEB), // 4.97687799461593236017e-02\n aT9 = reinterpret(0xBFA2B4442C6A6C2F), // -3.65315727442169155270e-02\n aT10 = reinterpret(0x3F90AD3AE322DA11), // 1.62858201153657823623e-02\n Ox1p_120f = reinterpret(0x03800000);\n var ix = (reinterpret(x) >> 32);\n var sign_ = ix >> 31;\n ix &= 0x7FFFFFFF;\n var z: f64;\n if (ix >= 0x44100000) {\n if (isNaN(x)) return x;\n z = atanhi3 + Ox1p_120f;\n return sign_ ? -z : z;\n }\n var id: i32;\n if (ix < 0x3FDC0000) {\n if (ix < 0x3E400000) return x;\n id = -1;\n } else {\n x = builtin_abs(x);\n if (ix < 0x3FF30000) {\n if (ix < 0x3FE60000) {\n id = 0;\n x = (2.0 * x - 1.0) / (2.0 + x);\n } else {\n id = 1;\n x = (x - 1.0) / (x + 1.0);\n }\n } else {\n if (ix < 0x40038000) {\n id = 2;\n x = (x - 1.5) / (1.0 + 1.5 * x);\n } else {\n id = 3;\n x = -1.0 / x;\n }\n }\n }\n z = x * x;\n var w = z * z;\n var s1 = z * (aT0 + w * (aT2 + w * (aT4 + w * (aT6 + w * (aT8 + w * aT10)))));\n var s2 = w * (aT1 + w * (aT3 + w * (aT5 + w * (aT7 + w * aT9))));\n if (id < 0) return x - x * (s1 + s2);\n switch (id) {\n case 0: { z = atanhi0 - (x * (s1 + s2) - atanlo0 - x); break; }\n case 1: { z = atanhi1 - (x * (s1 + s2) - atanlo1 - x); break; }\n case 2: { z = atanhi2 - (x * (s1 + s2) - atanlo2 - x); break; }\n case 3: { z = atanhi3 - (x * (s1 + s2) - atanlo3 - x); break; }\n default: unreachable();\n }\n return sign_ ? -z : z;\n }\n\n export function atanh(x: f64): f64 { // see: musl/src/math/atanh.c\n var u = reinterpret(x);\n var e = u >> 52 & 0x7FF;\n var s = u >> 63;\n u &= 0x7FFFFFFFFFFFFFFF;\n var y = reinterpret(u);\n if (e < 0x3FF - 1) {\n if (e >= 0x3FF - 32) y = 0.5 * log1p(2 * y + 2 * y * y / (1 - y));\n } else {\n y = 0.5 * log1p(2 * (y / (1 - y)));\n }\n return s ? -y : y;\n }\n\n export function atan2(y: f64, x: f64): f64 { // see: musl/src/math/atan2.c and SUN COPYRIGHT NOTICE above\n const\n pi = reinterpret(0x400921FB54442D18), // 3.1415926535897931160E+00\n pi_lo = reinterpret(0x3CA1A62633145C07); // 1.2246467991473531772E-16\n if (isNaN(x) || isNaN(y)) return x + y;\n var u = reinterpret(x);\n var ix = (u >> 32);\n var lx = u;\n u = reinterpret(y);\n var iy = (u >> 32);\n var ly = u;\n if ((ix - 0x3FF00000 | lx) == 0) return atan(y);\n var m = ((iy >> 31) & 1) | ((ix >> 30) & 2);\n ix = ix & 0x7FFFFFFF;\n iy = iy & 0x7FFFFFFF;\n if ((iy | ly) == 0) {\n switch (m) {\n case 0:\n case 1: return y;\n case 2: return PI;\n case 3: return -PI;\n }\n }\n if ((ix | lx) == 0) return m & 1 ? -pi / 2 : pi / 2;\n if (ix == 0x7FF00000) {\n if (iy == 0x7FF00000) {\n switch (m) {\n case 0: return pi / 4;\n case 1: return -pi / 4;\n case 2: return 3 * pi / 4;\n case 3: return -3 * pi / 4;\n }\n } else {\n switch (m) {\n case 0: return 0.0;\n case 1: return -0.0;\n case 2: return pi;\n case 3: return -pi;\n }\n }\n }\n var z: f64;\n if (ix + (64 << 20) < iy || iy == 0x7FF00000) return m & 1 ? -pi / 2 : pi / 2;\n if ((m & 2) && iy + (64 << 20) < ix) z = 0;\n else z = atan(builtin_abs(y / x));\n switch (m) {\n case 0: return z;\n case 1: return -z;\n case 2: return pi - (z - pi_lo);\n case 3: return (z - pi_lo) - pi;\n }\n unreachable();\n return 0;\n }\n\n export function cbrt(x: f64): f64 { // see: musl/src/math/cbrt.c and SUN COPYRIGHT NOTICE above\n const\n B1 = 715094163,\n B2 = 696219795,\n P0 = reinterpret(0x3FFE03E60F61E692), // 1.87595182427177009643\n P1 = reinterpret(0xBFFE28E092F02420), // -1.88497979543377169875\n P2 = reinterpret(0x3FF9F1604A49D6C2), // 1.621429720105354466140\n P3 = reinterpret(0xBFE844CBBEE751D9), // -0.758397934778766047437\n P4 = reinterpret(0x3FC2B000D4E4EDD7), // 0.145996192886612446982\n Ox1p54 = reinterpret(0x4350000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32) & 0x7FFFFFFF;\n if (hx >= 0x7FF00000) return x + x;\n if (hx < 0x00100000) {\n u = reinterpret(x * Ox1p54);\n hx = (u >> 32) & 0x7FFFFFFF;\n if (hx == 0) return x;\n hx = hx / 3 + B2;\n } else {\n hx = hx / 3 + B1;\n }\n u &= 1 << 63;\n u |= hx << 32;\n var t = reinterpret(u);\n var r = (t * t) * (t / x);\n t = t * ((P0 + r * (P1 + r * P2)) + ((r * r) * r) * (P3 + r * P4));\n t = reinterpret((reinterpret(t) + 0x80000000) & 0xFFFFFFFFC0000000);\n var s = t * t;\n r = x / s;\n var w = t + t;\n r = (r - t) / (w + r);\n t = t + t * r;\n return t;\n }\n\n @inline\n export function ceil(x: f64): f64 {\n return builtin_ceil(x);\n }\n\n @inline\n export function clz32(x: f64): f64 {\n return builtin_clz(x);\n }\n\n export function cos(x: f64): f64 { // TODO\n unreachable();\n return 0;\n }\n\n export function cosh(x: f64): f64 { // see: musl/src/math/cosh.c\n var u = reinterpret(x);\n u &= 0x7FFFFFFFFFFFFFFF;\n x = reinterpret(u);\n var w = (u >> 32);\n var t: f64;\n if (w < 0x3FE62E42) {\n if (w < 0x3FF00000 - (26 << 20)) return 1;\n t = expm1(x);\n return 1 + t * t / (2 * (1 + t));\n }\n if (w < 0x40862E42) {\n t = exp(x);\n return 0.5 * (t + 1 / t);\n }\n t = expo2(x);\n return t;\n }\n\n export function exp(x: f64): f64 { // see: musl/src/math/exp.c and SUN COPYRIGHT NOTICE above\n const\n ln2hi = reinterpret(0x3FE62E42FEE00000), // 6.93147180369123816490e-01\n ln2lo = reinterpret(0x3DEA39EF35793C76), // 1.90821492927058770002e-10\n invln2 = reinterpret(0x3FF71547652B82FE), // 1.44269504088896338700e+00\n P1 = reinterpret(0x3FC555555555553E), // 1.66666666666666019037e-01\n P2 = reinterpret(0xBF66C16C16BEBD93), // -2.77777777770155933842e-03\n P3 = reinterpret(0x3F11566AAF25DE2C), // 6.61375632143793436117e-05\n P4 = reinterpret(0xBEBBBD41C5D26BF1), // -1.65339022054652515390e-06\n P5 = reinterpret(0x3E66376972BEA4D0), // 4.13813679705723846039e-08\n overflow = reinterpret(0x40862E42FEFA39EF), // 709.782712893383973096\n underflow = reinterpret(0xC0874910D52D3051), // -745.13321910194110842\n Ox1p1023 = reinterpret(0x7FE0000000000000);\n var hx = (reinterpret(x) >> 32);\n var sign_ = (hx >> 31);\n hx &= 0x7FFFFFFF;\n if (hx >= 0x4086232B) {\n if (isNaN(x)) return x;\n if (x > overflow) {\n x *= Ox1p1023;\n return x;\n }\n if (x < underflow) return 0;\n }\n var hi: f64, lo: f64 = 0;\n var k: i32 = 0;\n if (hx > 0x3FD62E42) {\n if (hx >= 0x3FF0A2B2) {\n k = (invln2 * x + builtin_copysign(0.5, x));\n } else {\n k = 1 - sign_ - sign_;\n }\n hi = x - k * ln2hi;\n lo = k * ln2lo;\n x = hi - lo;\n } else if (hx > 0x3E300000) {\n hi = x;\n } else return 1.0 + x;\n var xx = x * x;\n var c = x - xx * (P1 + xx * (P2 + xx * (P3 + xx * (P4 + xx * P5))));\n var y = 1.0 + (x * c / (2 - c) - lo + hi);\n if (k == 0) return y;\n return scalbn(y, k);\n }\n\n export function expm1(x: f64): f64 { // see: musl/src/math/expm1.c and SUN COPYRIGHT NOTICE above\n const\n o_threshold = reinterpret(0x40862E42FEFA39EF), // 7.09782712893383973096e+02\n ln2_hi = reinterpret(0x3FE62E42FEE00000), // 6.93147180369123816490e-01\n ln2_lo = reinterpret(0x3DEA39EF35793C76), // 1.90821492927058770002e-10\n invln2 = reinterpret(0x3FF71547652B82FE), // 1.44269504088896338700e+00\n Q1 = reinterpret(0xBFA11111111110F4), // -3.33333333333331316428e-02\n Q2 = reinterpret(0x3F5A01A019FE5585), // 1.58730158725481460165e-03\n Q3 = reinterpret(0xBF14CE199EAADBB7), // -7.93650757867487942473e-05\n Q4 = reinterpret(0x3ED0CFCA86E65239), // 4.00821782732936239552e-06\n Q5 = reinterpret(0xBE8AFDB76E09C32D), // -2.01099218183624371326e-07\n Ox1p1023 = reinterpret(0x7FE0000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32 & 0x7FFFFFFF);\n var k = 0, sign_ = (u >> 63);\n if (hx >= 0x4043687A) {\n if (isNaN(x)) return x;\n if (sign_) return -1;\n if (x > o_threshold) {\n x *= Ox1p1023;\n return x;\n }\n }\n var c = 0.0, t: f64;\n if (hx > 0x3FD62E42) {\n let hi: f64, lo: f64;\n if (hx < 0x3FF0A2B2) {\n if (!sign_) {\n hi = x - ln2_hi;\n lo = ln2_lo;\n k = 1;\n } else {\n hi = x + ln2_hi;\n lo = -ln2_lo;\n k = -1;\n }\n } else {\n k = (invln2 * x + (sign_ ? -0.5 : 0.5));\n t = k;\n hi = x - t * ln2_hi;\n lo = t * ln2_lo;\n }\n x = hi - lo;\n c = (hi - x) - lo;\n } else if (hx < 0x3C900000) return x;\n var hfx = 0.5 * x;\n var hxs = x * hfx;\n var r1 = 1.0 + hxs * (Q1 + hxs * (Q2 + hxs * (Q3 + hxs * (Q4 + hxs * Q5))));\n t = 3.0 - r1 * hfx;\n var e = hxs * ((r1 - t) / (6.0 - x * t));\n if (k == 0) return x - (x * e - hxs);\n e = x * (e - c) - c;\n e -= hxs;\n if (k == -1) return 0.5 * (x - e) - 0.5;\n if (k == 1) {\n if (x < -0.25) return -2.0 * (e - (x + 0.5));\n return 1.0 + 2.0 * (x - e);\n }\n u = (0x3FF + k) << 52;\n var twopk = reinterpret(u);\n var y: f64;\n if (k < 0 || k > 56) {\n y = x - e + 1.0;\n if (k == 1024) y = y * 2.0 * Ox1p1023;\n else y = y * twopk;\n return y - 1.0;\n }\n u = (0x3FF - k) << 52;\n if (k < 20) y = (x - e + (1 - reinterpret(u))) * twopk;\n else y = (x - (e + reinterpret(u)) + 1) * twopk;\n return y;\n }\n\n @inline\n export function floor(x: f64): f64 {\n return builtin_floor(x);\n }\n\n @inline\n export function fround(x: f64): f32 {\n return x;\n }\n\n export function hypot(x: f64, y: f64): f64 { // see: musl/src/math/hypot.c\n const\n SPLIT = reinterpret(0x41A0000000000000) + 1, // 0x1p27 + 1\n Ox1p700 = reinterpret(0x6BB0000000000000),\n Ox1p_700 = reinterpret(0x1430000000000000);\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n ux &= 0x7FFFFFFFFFFFFFFF;\n uy &= 0x7FFFFFFFFFFFFFFF;\n if (ux < uy) {\n let ut = ux;\n ux = uy;\n uy = ut;\n }\n var ex = (ux >> 52);\n var ey = (uy >> 52);\n y = reinterpret(uy);\n if (ey == 0x7FF) return y;\n x = reinterpret(ux);\n if (ex == 0x7FF || uy == 0) return x;\n if (ex - ey > 64) return x + y;\n var z = 1.0;\n if (ex > 0x3FF + 510) {\n z = Ox1p700;\n x *= Ox1p_700;\n y *= Ox1p_700;\n } else if (ey < 0x3FF - 450) {\n z = Ox1p_700;\n x *= Ox1p700;\n y *= Ox1p700;\n }\n var c = x * SPLIT;\n var h = x - c + c;\n var l = x - h;\n var hx = x * x;\n var lx = h * h - hx + 2 * h * l + l * l;\n c = y * SPLIT;\n h = y - c + c;\n l = y - h;\n var hy = y * y;\n var ly = h * h - hy + 2 * h * l + l * l;\n return z * builtin_sqrt(ly + lx + hy + hx);\n }\n\n export function imul(x: f64, y: f64): f64 {\n return (x * y);\n }\n\n export function log(x: f64): f64 { // see: musl/src/math/log.c and SUN COPYRIGHT NOTICE above\n const\n ln2_hi = reinterpret(0x3FE62E42FEE00000), // 6.93147180369123816490e-01\n ln2_lo = reinterpret(0x3DEA39EF35793C76), // 1.90821492927058770002e-10\n Lg1 = reinterpret(0x3FE5555555555593), // 6.666666666666735130e-01\n Lg2 = reinterpret(0x3FD999999997FA04), // 3.999999999940941908e-01\n Lg3 = reinterpret(0x3FD2492494229359), // 2.857142874366239149e-01\n Lg4 = reinterpret(0x3FCC71C51D8E78AF), // 2.222219843214978396e-01\n Lg5 = reinterpret(0x3FC7466496CB03DE), // 1.818357216161805012e-01\n Lg6 = reinterpret(0x3FC39A09D078C69F), // 1.531383769920937332e-01\n Lg7 = reinterpret(0x3FC2F112DF3E5244), // 1.479819860511658591e-01\n Ox1p54 = reinterpret(0x4350000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32);\n var k = 0;\n if (hx < 0x00100000 || (hx >> 31)) {\n if (u << 1 == 0) return -1 / (x * x);\n if (hx >> 31) return (x - x) / 0.0;\n k -= 54;\n x *= Ox1p54;\n u = reinterpret(x);\n hx = (u >> 32);\n } else if (hx >= 0x7FF00000) return x;\n else if (hx == 0x3FF00000 && u << 32 == 0) return 0;\n hx += 0x3FF00000 - 0x3FE6A09E;\n k += (hx >> 20) - 0x3FF;\n hx = (hx & 0x000FFFFF) + 0x3FE6A09E;\n u = hx << 32 | (u & 0xFFFFFFFF);\n x = reinterpret(u);\n var f = x - 1.0;\n var hfsq = 0.5 * f * f;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * (Lg4 + w * Lg6));\n var t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));\n var r = t2 + t1;\n var dk = k;\n return s * (hfsq + r) + dk * ln2_lo - hfsq + f + dk * ln2_hi;\n }\n\n export function log10(x: f64): f64 { // see: musl/src/math/log10.c and SUN COPYRIGHT NOTICE above\n const\n ivln10hi = reinterpret(0x3FDBCB7B15200000), // 4.34294481878168880939e-01\n ivln10lo = reinterpret(0x3DBB9438CA9AADD5), // 2.50829467116452752298e-11\n log10_2hi = reinterpret(0x3FD34413509F6000), // 3.01029995663611771306e-01\n log10_2lo = reinterpret(0x3D59FEF311F12B36), // 3.69423907715893078616e-13\n Lg1 = reinterpret(0x3FE5555555555593), // 6.666666666666735130e-01\n Lg2 = reinterpret(0x3FD999999997FA04), // 3.999999999940941908e-01\n Lg3 = reinterpret(0x3FD2492494229359), // 2.857142874366239149e-01\n Lg4 = reinterpret(0x3FCC71C51D8E78AF), // 2.222219843214978396e-01\n Lg5 = reinterpret(0x3FC7466496CB03DE), // 1.818357216161805012e-01\n Lg6 = reinterpret(0x3FC39A09D078C69F), // 1.531383769920937332e-01\n Lg7 = reinterpret(0x3FC2F112DF3E5244), // 1.479819860511658591e-01\n Ox1p54 = reinterpret(0x4350000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32);\n var k = 0;\n if (hx < 0x00100000 || (hx >> 31)) {\n if (u << 1 == 0) return -1 / (x * x);\n if (hx >> 31) return (x - x) / 0.0;\n k -= 54;\n x *= Ox1p54;\n u = reinterpret(x);\n hx = (u >> 32);\n } else if (hx >= 0x7FF00000) return x;\n else if (hx == 0x3FF00000 && u << 32 == 0) return 0;\n hx += 0x3FF00000 - 0x3FE6A09E;\n k += (hx >> 20) - 0x3FF;\n hx = (hx & 0x000FFFFF) + 0x3FE6A09E;\n u = hx << 32 | (u & 0xFFFFFFFF);\n x = reinterpret(u);\n var f = x - 1.0;\n var hfsq = 0.5 * f * f;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * (Lg4 + w * Lg6));\n var t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));\n var r = t2 + t1;\n var hi = f - hfsq;\n u = reinterpret(hi);\n u &= 0xFFFFFFFF00000000;\n hi = reinterpret(u);\n var lo = f - hi - hfsq + s * (hfsq + r);\n var val_hi = hi * ivln10hi;\n var dk = k;\n var y = dk * log10_2hi;\n var val_lo = dk * log10_2lo + (lo + hi) * ivln10lo + lo * ivln10hi;\n w = y + val_hi;\n val_lo += (y - w) + val_hi;\n val_hi = w;\n return val_lo + val_hi;\n }\n\n export function log1p(x: f64): f64 { // see: musl/src/math/log1p.c and SUN COPYRIGHT NOTICE above\n const\n ln2_hi = reinterpret(0x3FE62E42FEE00000), // 6.93147180369123816490e-01\n ln2_lo = reinterpret(0x3DEA39EF35793C76), // 1.90821492927058770002e-10\n Lg1 = reinterpret(0x3FE5555555555593), // 6.666666666666735130e-01\n Lg2 = reinterpret(0x3FD999999997FA04), // 3.999999999940941908e-01\n Lg3 = reinterpret(0x3FD2492494229359), // 2.857142874366239149e-01\n Lg4 = reinterpret(0x3FCC71C51D8E78AF), // 2.222219843214978396e-01\n Lg5 = reinterpret(0x3FC7466496CB03DE), // 1.818357216161805012e-01\n Lg6 = reinterpret(0x3FC39A09D078C69F), // 1.531383769920937332e-01\n Lg7 = reinterpret(0x3FC2F112DF3E5244); // 1.479819860511658591e-01\n var u = reinterpret(x);\n var hx = (u >> 32);\n var k = 1;\n var c = 0.0, f = 0.0;\n if (hx < 0x3FDA827A || (hx >> 31)) {\n if (hx >= 0xBFF00000) {\n if (x == -1) return x / 0.0;\n return (x - x) / 0.0;\n }\n if (hx << 1 < 0x3CA00000 << 1) return x;\n if (hx <= 0xBFD2BEC4) {\n k = 0;\n c = 0;\n f = x;\n }\n } else if (hx >= 0x7FF00000) return x;\n if (k) {\n u = reinterpret(1 + x);\n let hu = (u >> 32);\n hu += 0x3FF00000 - 0x3FE6A09E;\n k = (hu >> 20) - 0x3FF;\n if (k < 54) {\n let uf = reinterpret(u);\n c = k >= 2 ? 1 - (uf - x) : x - (uf - 1);\n c /= uf;\n } else c = 0;\n hu = (hu & 0x000FFFFF) + 0x3FE6A09E;\n u = hu << 32 | (u & 0xFFFFFFFF);\n f = reinterpret(u) - 1;\n }\n var hfsq = 0.5 * f * f;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * (Lg4 + w * Lg6));\n var t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));\n var r = t2 + t1;\n var dk = k;\n return s * (hfsq + r) + (dk * ln2_lo + c) - hfsq + f + dk * ln2_hi;\n }\n\n export function log2(x: f64): f64 { // see: musl/src/math/log2.c and SUN COPYRIGHT NOTICE above\n const\n ivln2hi = reinterpret(0x3FF7154765200000), // 1.44269504072144627571e+00\n ivln2lo = reinterpret(0x3DE705FC2EEFA200), // 1.67517131648865118353e-10\n Lg1 = reinterpret(0x3FE5555555555593), // 6.666666666666735130e-01\n Lg2 = reinterpret(0x3FD999999997FA04), // 3.999999999940941908e-01\n Lg3 = reinterpret(0x3FD2492494229359), // 2.857142874366239149e-01\n Lg4 = reinterpret(0x3FCC71C51D8E78AF), // 2.222219843214978396e-01\n Lg5 = reinterpret(0x3FC7466496CB03DE), // 1.818357216161805012e-01\n Lg6 = reinterpret(0x3FC39A09D078C69F), // 1.531383769920937332e-01\n Lg7 = reinterpret(0x3FC2F112DF3E5244), // 1.479819860511658591e-01\n Ox1p54 = reinterpret(0x4350000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32);\n var k = 0;\n if (hx < 0x00100000 || (hx >> 31)) {\n if (u << 1 == 0) return -1 / (x * x);\n if (hx >> 31) return (x - x) / 0.0;\n k -= 54;\n x *= Ox1p54;\n u = reinterpret(x);\n hx = (u >> 32);\n } else if (hx >= 0x7FF00000) return x;\n else if (hx == 0x3FF00000 && u << 32 == 0) return 0;\n hx += 0x3FF00000 - 0x3FE6A09E;\n k += (hx >> 20) - 0x3FF;\n hx = (hx & 0x000FFFFF) + 0x3FE6A09E;\n u = hx << 32 | (u & 0xFFFFFFFF);\n x = reinterpret(u);\n var f = x - 1.0;\n var hfsq = 0.5 * f * f;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * (Lg4 + w * Lg6));\n var t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));\n var r = t2 + t1;\n var hi = f - hfsq;\n u = reinterpret(hi);\n u &= 0xFFFFFFFF00000000;\n hi = reinterpret(u);\n var lo = f - hi - hfsq + s * (hfsq + r);\n var val_hi = hi * ivln2hi;\n var val_lo = (lo + hi) * ivln2lo + lo * ivln2hi;\n var y = k;\n w = y + val_hi;\n val_lo += (y - w) + val_hi;\n val_hi = w;\n return val_lo + val_hi;\n }\n\n @inline\n export function max(value1: f64, value2: f64): f64 {\n return builtin_max(value1, value2);\n }\n\n @inline\n export function min(value1: f64, value2: f64): f64 {\n return builtin_min(value1, value2);\n }\n\n export function pow(x: f64, y: f64): f64 { // see: musl/src/math/pow.c and SUN COPYRIGHT NOTICE above\n const\n dp_h1 = reinterpret(0x3FE2B80340000000), // 5.84962487220764160156e-01\n dp_l1 = reinterpret(0x3E4CFDEB43CFD006), // 1.35003920212974897128e-08\n two53 = reinterpret(0x4340000000000000), // 9007199254740992.0\n huge = reinterpret(0x7E37E43C8800759C), // 1e+300\n tiny = reinterpret(0x01A56E1FC2F8F359), // 1e-300\n L1 = reinterpret(0x3FE3333333333303), // 5.99999999999994648725e-01\n L2 = reinterpret(0x3FDB6DB6DB6FABFF), // 4.28571428578550184252e-01\n L3 = reinterpret(0x3FD55555518F264D), // 3.33333329818377432918e-01\n L4 = reinterpret(0x3FD17460A91D4101), // 2.72728123808534006489e-01\n L5 = reinterpret(0x3FCD864A93C9DB65), // 2.30660745775561754067e-01\n L6 = reinterpret(0x3FCA7E284A454EEF), // 2.06975017800338417784e-01\n P1 = reinterpret(0x3FC555555555553E), // 1.66666666666666019037e-01\n P2 = reinterpret(0xBF66C16C16BEBD93), // -2.77777777770155933842e-03\n P3 = reinterpret(0x3F11566AAF25DE2C), // 6.61375632143793436117e-05\n P4 = reinterpret(0xBEBBBD41C5D26BF1), // -1.65339022054652515390e-06\n P5 = reinterpret(0x3E66376972BEA4D0), // 4.13813679705723846039e-08\n lg2 = reinterpret(0x3FE62E42FEFA39EF), // 6.93147180559945286227e-01\n lg2_h = reinterpret(0x3FE62E4300000000), // 6.93147182464599609375e-01\n lg2_l = reinterpret(0xBE205C610CA86C39), // -1.90465429995776804525e-09\n ovt = reinterpret(0x3C971547652B82FE), // 8.0085662595372944372e-017\n cp = reinterpret(0x3FEEC709DC3A03FD), // 9.61796693925975554329e-01\n cp_h = reinterpret(0x3FEEC709E0000000), // 9.61796700954437255859e-01\n cp_l = reinterpret(0xBE3E2FE0145B01F5), // -7.02846165095275826516e-09\n ivln2 = reinterpret(0x3FF71547652B82FE), // 1.44269504088896338700e+00\n ivln2_h = reinterpret(0x3FF7154760000000), // 1.44269502162933349609e+00\n ivln2_l = reinterpret(0x3E54AE0BF85DDF44); // 1.92596299112661746887e-08\n var u_ = reinterpret(x);\n var hx = (u_ >> 32);\n var lx = u_;\n u_ = reinterpret(y);\n var hy = (u_ >> 32);\n var ly = u_;\n var ix = hx & 0x7FFFFFFF;\n var iy = hy & 0x7FFFFFFF;\n if ((iy | ly) == 0) return 1.0; // x**0 = 1, even if x is NaN\n // if (hx == 0x3FF00000 && lx == 0) return 1.0; // C: 1**y = 1, even if y is NaN, JS: NaN\n if ( // NaN if either arg is NaN\n ix > 0x7FF00000 || (ix == 0x7FF00000 && lx != 0) ||\n iy > 0x7FF00000 || (iy == 0x7FF00000 && ly != 0)\n ) return x + y;\n var yisint = 0, k: i32;\n if (hx < 0) {\n if (iy >= 0x43400000) yisint = 2;\n else if (iy >= 0x3FF00000) {\n k = (iy >> 20) - 0x3FF;\n if (k > 20) {\n let jj = ly >> (52 - k);\n if ((jj << (52 - k)) == ly) yisint = 2 - (jj & 1);\n } else if (ly == 0) {\n let jj = iy >> (20 - k);\n if ((jj << (20 - k)) == iy) yisint = 2 - (jj & 1);\n }\n }\n }\n if (ly == 0) {\n if (iy == 0x7FF00000) { // y is +-inf\n if (((ix - 0x3FF00000) | lx) == 0) return NaN; // C: (-1)**+-inf is 1, JS: NaN\n else if (ix >= 0x3FF00000) return hy >= 0 ? y : 0.0; // (|x|>1)**+-inf = inf,0\n else return hy >= 0 ? 0.0 : -y; // (|x|<1)**+-inf = 0,inf\n }\n if (iy == 0x3FF00000) {\n if (hy >= 0) return x;\n return 1 / x;\n }\n if (hy == 0x40000000) return x * x;\n if (hy == 0x3FE00000) {\n if (hx >= 0) return builtin_sqrt(x);\n }\n }\n var ax = builtin_abs(x), z: f64;\n if (lx == 0) {\n if (ix == 0x7FF00000 || ix == 0 || ix == 0x3FF00000) {\n z = ax;\n if (hy < 0) z = 1.0 / z;\n if (hx < 0) {\n if (((ix - 0x3FF00000) | yisint) == 0) z = (z - z) / (z - z);\n else if (yisint == 1) z = -z;\n }\n return z;\n }\n }\n var s = 1.0;\n if (hx < 0) {\n if (yisint == 0) return (x - x) / (x - x);\n if (yisint == 1) s = -1.0;\n }\n var t1: f64, t2: f64, p_h: f64, p_l: f64, r: f64, t: f64, u: f64, v: f64, w: f64;\n var j: i32, n: i32;\n if (iy > 0x41E00000) {\n if (iy > 0x43F00000) {\n if (ix <= 0x3FEFFFFF) return hy < 0 ? huge * huge : tiny * tiny;\n if (ix >= 0x3FF00000) return hy > 0 ? huge * huge : tiny * tiny;\n }\n if (ix < 0x3FEFFFFF) return hy < 0 ? s * huge * huge : s * tiny * tiny;\n if (ix > 0x3FF00000) return hy > 0 ? s * huge * huge : s * tiny * tiny;\n t = ax - 1.0;\n w = (t * t) * (0.5 - t * (0.3333333333333333333333 - t * 0.25));\n u = ivln2_h * t;\n v = t * ivln2_l - w * ivln2;\n t1 = u + v;\n t1 = reinterpret(reinterpret(t1) & 0xFFFFFFFF00000000);\n t2 = v - (t1 - u);\n } else {\n let ss: f64, s2: f64, s_h: f64, s_l: f64, t_h: f64, t_l: f64;\n n = 0;\n if (ix < 0x00100000) {\n ax *= two53;\n n -= 53;\n ix = (reinterpret(ax) >> 32);\n }\n n += (ix >> 20) - 0x3FF;\n j = ix & 0x000FFFFF;\n ix = j | 0x3FF00000;\n if (j <= 0x3988E) k = 0;\n else if (j < 0xBB67A) k = 1;\n else {\n k = 0;\n n += 1;\n ix -= 0x00100000;\n }\n ax = reinterpret(reinterpret(ax) & 0xFFFFFFFF | (ix << 32));\n let bp = select(1.5, 1.0, k);\n u = ax - bp;\n v = 1.0 / (ax + bp);\n ss = u * v;\n s_h = ss;\n s_h = reinterpret(reinterpret(s_h) & 0xFFFFFFFF00000000);\n t_h = reinterpret((((ix >> 1) | 0x20000000) + 0x00080000 + (k << 18)) << 32);\n t_l = ax - (t_h - bp);\n s_l = v * ((u - s_h * t_h) - s_h * t_l);\n s2 = ss * ss;\n r = s2 * s2 * (L1 + s2 * (L2 + s2 * (L3 + s2 * (L4 + s2 * (L5 + s2 * L6)))));\n r += s_l * (s_h + ss);\n s2 = s_h * s_h;\n t_h = 3.0 + s2 + r;\n t_h = reinterpret(reinterpret(t_h) & 0xFFFFFFFF00000000);\n t_l = r - ((t_h - 3.0) - s2);\n u = s_h * t_h;\n v = s_l * t_h + t_l * ss;\n p_h = u + v;\n p_h = reinterpret(reinterpret(p_h) & 0xFFFFFFFF00000000);\n p_l = v - (p_h - u);\n let z_h = cp_h * p_h;\n let dp_l = select(dp_l1, 0.0, k);\n let z_l = cp_l * p_h + p_l * cp + dp_l;\n t = n;\n let dp_h = select(dp_h1, 0.0, k);\n t1 = ((z_h + z_l) + dp_h) + t;\n t1 = reinterpret(reinterpret(t1) & 0xFFFFFFFF00000000);\n t2 = z_l - (((t1 - t) - dp_h) - z_h);\n }\n var y1 = y;\n y1 = reinterpret(reinterpret(y1) & 0xFFFFFFFF00000000);\n p_l = (y - y1) * t1 + y * t2;\n p_h = y1 * t1;\n z = p_l + p_h;\n u_ = reinterpret(z);\n j = (u_ >> 32);\n var i = u_;\n if (j >= 0x40900000) {\n if (((j - 0x40900000) | i) != 0) return s * huge * huge;\n if (p_l + ovt > z - p_h) return s * huge * huge;\n } else if ((j & 0x7FFFFFFF) >= 0x4090CC00) {\n if (((j - 0xC090CC00) | i) != 0) return s * tiny * tiny;\n if (p_l <= z - p_h) return s * tiny * tiny;\n }\n i = j & 0x7FFFFFFF;\n k = (i >> 20) - 0x3FF;\n n = 0;\n if (i > 0x3FE00000) {\n n = j + (0x00100000 >> (k + 1));\n k = ((n & 0x7FFFFFFF) >> 20) - 0x3FF;\n t = 0.0;\n t = reinterpret((n & ~(0x000FFFFF >> k)) << 32);\n n = ((n & 0x000FFFFF) | 0x00100000) >> (20 - k);\n if (j < 0) n = -n;\n p_h -= t;\n }\n t = p_l + p_h;\n t = reinterpret(reinterpret(t) & 0xFFFFFFFF00000000);\n u = t * lg2_h;\n v = (p_l - (t - p_h)) * lg2 + t * lg2_l;\n z = u + v;\n w = v - (z - u);\n t = z * z;\n t1 = z - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));\n r = (z * t1) / (t1 - 2.0) - (w + z * w);\n z = 1.0 - (r - z);\n j = (reinterpret(z) >> 32);\n j += n << 20;\n if ((j >> 20) <= 0) z = scalbn(z, n);\n else z = reinterpret(reinterpret(z) & 0xFFFFFFFF | (j << 32));\n return s * z;\n }\n\n export function seedRandom(value: i64): void {\n assert(value);\n random_seeded = true;\n random_state0 = murmurHash3(value);\n random_state1 = murmurHash3(random_state0);\n }\n\n export function random(): f64 { // see: v8/src/base/random-number-generator.cc\n if (!random_seeded) throw new Error("PRNG must be seeded.");\n var s1 = random_state0;\n var s0 = random_state1;\n random_state0 = s0;\n s1 ^= s1 << 23;\n s1 ^= s1 >> 17;\n s1 ^= s0;\n s1 ^= s0 >> 26;\n random_state1 = s1;\n var r = ((s0 + s1) & 0x000FFFFFFFFFFFFF) | 0x3FF0000000000000;\n return reinterpret(r) - 1;\n }\n\n export function round(x: f64): f64 { // see: musl/src/math/round.c\n const toint = 1.0 / f64.EPSILON;\n var ux = reinterpret(x);\n var e = (ux >> 52 & 0x7FF);\n if (e >= 0x3FF + 52) return x;\n if (e < 0x3FF - 1) return 0 * x;\n var y: f64;\n if (ux >> 63) {\n // FIXME: JS always rounds fractional 0.5 towards +Infinity\n // and there certainly is a smarter way to do this.\n y = toint - x - toint + x;\n if (y >= 0.5) y = x - y + 1;\n else if (y < -0.5) y = x - y - 1;\n else y = x - y;\n } else {\n y = x + toint - toint - x;\n if (y > 0.5) y = y + x - 1;\n else if (y <= -0.5) y = y + x + 1;\n else y = y + x;\n }\n return y;\n }\n\n @inline\n export function sign(x: f64): f64 {\n // return x > 0 ? 1 : x < 0 ? -1 : x;\n return builtin_abs(x) > 0 ? builtin_copysign(1, x) : x;\n }\n\n export function sin(x: f64): f64 { // TODO\n unreachable();\n return 0;\n }\n\n export function sinh(x: f64): f64 { // see: musl/src/math/sinh.c\n var u = reinterpret(x);\n var h = 0.5;\n if (u >> 63) h = -h;\n u &= 0x7FFFFFFFFFFFFFFF;\n var absx = reinterpret(u);\n var w = (u >> 32);\n var t: f64;\n if (w < 0x40862E42) {\n t = expm1(absx);\n if (w < 0x3FF00000) {\n if (w < 0x3FF00000 - (26 << 20)) return x;\n return h * (2 * t - t * t / (t + 1));\n }\n return h * (t + t / (t + 1));\n }\n t = 2 * h * expo2(absx);\n return t;\n }\n\n @inline\n export function sqrt(x: f64): f64 {\n return builtin_sqrt(x);\n }\n\n export function tan(x: f64): f64 { // TODO\n unreachable();\n return 0;\n }\n\n export function tanh(x: f64): f64 { // see: musl/src/math/tanh.c\n var u = reinterpret(x);\n var sign_ = (u >> 63);\n u &= 0x7FFFFFFFFFFFFFFF;\n x = reinterpret(u);\n var w = (u >> 32);\n var t: f64;\n if (w > 0x3FE193EA) {\n if (w > 0x40340000) {\n t = 1 - 0 / x;\n } else {\n t = expm1(2 * x);\n t = 1 - 2 / (t + 2);\n }\n } else if (w > 0x3FD058AE) {\n t = expm1(2 * x);\n t = t / (t + 2);\n } else if (w >= 0x00100000) {\n t = expm1(-2 * x);\n t = -t / (t + 2);\n } else t = x;\n return sign_ ? -t : t;\n }\n\n @inline\n export function trunc(x: f64): f64 {\n return builtin_trunc(x);\n }\n\n /** @internal */\n export function scalbn(x: f64, n: i32): f64 { // see: musl/src/math/scalbn.c\n const\n Ox1p1023 = reinterpret(0x7FE0000000000000),\n Ox1p_1022 = reinterpret(0x0010000000000000);\n var y = x;\n if (n > 1023) {\n y *= Ox1p1023;\n n -= 1023;\n if (n > 1023) {\n y *= Ox1p1023;\n n -= 1023;\n if (n > 1023) n = 1023;\n }\n } else if (n < -1022) {\n y *= Ox1p_1022;\n n += 1022;\n if (n < -1022) {\n y *= Ox1p_1022;\n n += 1022;\n if (n < -1022) n = -1022;\n }\n }\n return y * reinterpret((0x3FF + n) << 52);\n }\n\n export function mod(x: f64, y: f64): f64 { // see: musl/src/math/fmod.c\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n var ex = (ux >> 52 & 0x7FF);\n var ey = (uy >> 52 & 0x7FF);\n var sx = (ux >> 63);\n if (uy << 1 == 0 || isNaN(y) || ex == 0x7FF) return (x * y) / (x * y);\n if (ux << 1 <= uy << 1) {\n if (ux << 1 == uy << 1) return 0 * x;\n return x;\n }\n var i: u64;\n if (!ex) {\n for (i = ux << 12; !(i >> 63); i <<= 1) --ex;\n ux <<= -ex + 1;\n } else {\n ux &= -1 >> 12;\n ux |= 1 << 52;\n }\n if (!ey) {\n for (i = uy << 12; !(i >> 63); i <<= 1) --ey;\n uy <<= -ey + 1;\n } else {\n uy &= -1 >> 12;\n uy |= 1 << 52;\n }\n for (; ex > ey; ex--) {\n i = ux - uy;\n if (!(i >> 63)) {\n if (!i) return 0 * x;\n ux = i;\n }\n ux <<= 1;\n }\n i = ux - uy;\n if (!(i >> 63)) {\n if (!i) return 0 * x;\n ux = i;\n }\n for (; !(ux >> 52); ux <<= 1) --ex;\n if (ex > 0) {\n ux -= 1 << 52;\n ux |= ex << 52;\n } else {\n ux >>= -ex + 1;\n }\n ux |= sx << 63;\n return reinterpret(ux);\n }\n\n export function rem(x: f64, y: f64): f64 { // see: musl/src/math/remquo.c\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n var ex = (ux >> 52 & 0x7FF);\n var ey = (uy >> 52 & 0x7FF);\n var sx = (ux >> 63);\n var sy = (uy >> 63);\n if (uy << 1 == 0 || isNaN(y) || ex == 0x7FF) return (x * y) / (x * y);\n if (ux << 1 == 0) return x;\n var uxi = ux;\n var i: u64;\n if (!ex) {\n for (i = uxi << 12; i >> 63 == 0; ex--, i <<= 1) {}\n uxi <<= -ex + 1;\n } else {\n uxi &= -1 >> 12;\n uxi |= 1 << 52;\n }\n if (!ey) {\n for (i = uy << 12; i >> 63 == 0; ey--, i <<= 1) {}\n uy <<= -ey + 1;\n } else {\n uy &= -1 >> 12;\n uy |= 1 << 52;\n }\n var q: u32 = 0;\n do {\n if (ex < ey) {\n if (ex + 1 == ey) break; // goto end\n return x;\n }\n for (; ex > ey; ex--) {\n i = uxi - uy;\n if (i >> 63 == 0) {\n uxi = i;\n ++q;\n }\n uxi <<= 1;\n q <<= 1;\n }\n i = uxi - uy;\n if (i >> 63 == 0) {\n uxi = i;\n ++q;\n }\n if (uxi == 0) ex = -60;\n else for (; uxi >> 52 == 0; uxi <<= 1, ex--) {}\n break;\n } while (false);\n // end:\n if (ex > 0) {\n uxi -= 1 << 52;\n uxi |= ex << 52;\n } else {\n uxi >>= -ex + 1;\n }\n x = reinterpret(uxi);\n if (sy) y = -y;\n if (ex == ey || (ex + 1 == ey && (2.0 * x > y || (2.0 * x == y && (q & 1))))) {\n x -= y;\n ++q;\n }\n return sx ? -x : x;\n }\n}\n\nfunction Rf(z: f32): f32 { // Rational approximation of (asin(x)-x)/x^3\n const // see: musl/src/math/asinf.c and SUN COPYRIGHT NOTICE above\n pS0 = reinterpret(0x3E2AAA75), // 1.6666586697e-01f\n pS1 = reinterpret(0xBD2F13BA), // -4.2743422091e-02f\n pS2 = reinterpret(0xBC0DD36B), // -8.6563630030e-03f\n qS1 = reinterpret(0xBF34E5AE); // -7.0662963390e-01f\n var p = z * (pS0 + z * (pS1 + z * pS2));\n var q: f32 = 1 + z * qS1;\n return p / q;\n}\n\nfunction expo2f(x: f32): f32 { // exp(x)/2 for x >= log(DBL_MAX)\n const // see: musl/src/math/__expo2f.c\n k = 235,\n kln2 = reinterpret(0x4322E3BC); // 0x1.45c778p+7f\n var scale = reinterpret((0x7F + k / 2) << 23);\n return NativeMathf.exp(x - kln2) * scale * scale;\n}\n\nexport namespace NativeMathf {\n\n export const E = NativeMath.E;\n export const LN2 = NativeMath.LN2;\n export const LN10 = NativeMath.LN10;\n export const LOG2E = NativeMath.LOG2E;\n export const LOG10E = NativeMath.LOG10E;\n export const PI = NativeMath.PI;\n export const SQRT1_2 = NativeMath.SQRT1_2;\n export const SQRT2 = NativeMath.SQRT2;\n\n @inline\n export function abs(x: f32): f32 {\n return builtin_abs(x);\n }\n\n export function acos(x: f32): f32 { // see: musl/src/math/acosf.c and SUN COPYRIGHT NOTICE above\n const\n pio2_hi = reinterpret(0x3FC90FDA), // 1.5707962513e+00f\n pio2_lo = reinterpret(0x33A22168), // 7.5497894159e-08f\n Ox1p_120f = reinterpret(0x03800000);\n var hx = reinterpret(x);\n var ix = hx & 0x7FFFFFFF;\n if (ix >= 0x3F800000) {\n if (ix == 0x3F800000) {\n if (hx >> 31) return 2 * pio2_hi + Ox1p_120f;\n return 0;\n }\n return 0 / (x - x);\n }\n if (ix < 0x3F000000) {\n if (ix <= 0x32800000) return pio2_hi + Ox1p_120f;\n return pio2_hi - (x - (pio2_lo - x * Rf(x * x)));\n }\n var z: f32, w: f32, s: f32;\n if (hx >> 31) {\n z = (1 + x) * 0.5;\n s = builtin_sqrt(z);\n w = Rf(z) * s - pio2_lo;\n return 2 * (pio2_hi - (s + w));\n }\n z = (1 - x) * 0.5;\n s = builtin_sqrt(z);\n hx = reinterpret(s);\n var df = reinterpret(hx & 0xFFFFF000);\n var c = (z - df * df) / (s + df);\n w = Rf(z) * s + c;\n return 2 * (df + w);\n }\n\n export function acosh(x: f32): f32 { // see: musl/src/math/acoshf.c\n const s = reinterpret(0x3F317218); // 0.693147180559945309417232121458176568f\n var u = reinterpret(x);\n var a = u & 0x7FFFFFFF;\n if (a < 0x3F800000 + (1 << 23)) return log1p(x - 1 + builtin_sqrt((x - 1) * (x - 1) + 2 * (x - 1)));\n if (a < 0x3F800000 + (12 << 23)) return log(2 * x - 1 / (x + builtin_sqrt(x * x - 1)));\n return log(x) + s;\n }\n\n export function asin(x: f32): f32 { // see: musl/src/math/asinf.c and SUN COPYRIGHT NOTICE above\n const\n pio2 = reinterpret(0x3FC90FDB), // 1.570796326794896558e+00f\n Ox1p_120f = reinterpret(0x03800000);\n var hx = reinterpret(x);\n var ix = hx & 0x7FFFFFFF;\n if (ix >= 0x3F800000) {\n if (ix == 0x3F800000) return x * pio2 + Ox1p_120f;\n return 0 / (x - x);\n }\n if (ix < 0x3F000000) {\n if (ix < 0x39800000 && ix >= 0x00800000) return x;\n return x + x * Rf(x * x);\n }\n var z: f32 = (1 - builtin_abs(x)) * 0.5;\n var s = builtin_sqrt(z); // sic\n x = (pio2 - 2 * (s + s * Rf(z)));\n if (hx >> 31) return -x;\n return x;\n }\n\n export function asinh(x: f32): f32 { // see: musl/src/math/asinhf.c\n const c = reinterpret(0x3F317218); // 0.693147180559945309417232121458176568f\n var u = reinterpret(x);\n var i = u & 0x7FFFFFFF;\n var s = (u >> 31);\n u = i;\n x = reinterpret(u);\n if (i >= 0x3F800000 + (12 << 23)) x = log(x) + c;\n else if (i >= 0x3F800000 + (1 << 23)) x = log(2 * x + 1 / (builtin_sqrt(x * x + 1) + x));\n else if (i >= 0x3F800000 - (12 << 23)) x = log1p(x + x * x / (builtin_sqrt(x * x + 1) + 1));\n return s ? -x : x;\n }\n\n export function atan(x: f32): f32 { // see: musl/src/math/atanf.c and SUN COPYRIGHT NOTICE above\n const\n atanhi0 = reinterpret(0x3EED6338), // 4.6364760399e-01f\n atanhi1 = reinterpret(0x3F490FDA), // 7.8539812565e-01f\n atanhi2 = reinterpret(0x3F7B985E), // 9.8279368877e-01f\n atanhi3 = reinterpret(0x3FC90FDA), // 1.5707962513e+00f\n atanlo0 = reinterpret(0x31AC3769), // 5.0121582440e-09f\n atanlo1 = reinterpret(0x33222168), // 3.7748947079e-08f\n atanlo2 = reinterpret(0x33140FB4), // 3.4473217170e-08f\n atanlo3 = reinterpret(0x33A22168), // 7.5497894159e-08f\n aT0 = reinterpret(0x3EAAAAA9), // 3.3333328366e-01f\n aT1 = reinterpret(0xBE4CCA98), // -1.9999158382e-01f\n aT2 = reinterpret(0x3E11F50D), // 1.4253635705e-01f\n aT3 = reinterpret(0xBDDA1247), // -1.0648017377e-01f\n aT4 = reinterpret(0x3D7CAC25), // 6.1687607318e-02f\n Ox1p_120f = reinterpret(0x03800000);\n var ix = reinterpret(x);\n var sig = (ix >> 31);\n ix &= 0x7FFFFFFF;\n var z: f32;\n if (ix >= 0x4C800000) {\n if (isNaN(x)) return x;\n z = atanhi3 + Ox1p_120f;\n return sig ? -z : z;\n }\n var id: i32;\n if (ix < 0x3EE00000) {\n if (ix < 0x39800000) return x;\n id = -1;\n } else {\n x = builtin_abs(x);\n if (ix < 0x3F980000) {\n if (ix < 0x3F300000) {\n id = 0;\n x = (2.0 * x - 1.0) / (2.0 + x);\n } else {\n id = 1;\n x = (x - 1.0) / (x + 1.0);\n }\n } else {\n if (ix < 0x401C0000) {\n id = 2;\n x = (x - 1.5) / (1.0 + 1.5 * x);\n } else {\n id = 3;\n x = -1.0 / x;\n }\n }\n }\n z = x * x;\n var w = z * z;\n var s1 = z * (aT0 + w * (aT2 + w * aT4));\n var s2 = w * (aT1 + w * aT3);\n if (id < 0) return x - x * (s1 + s2);\n switch (id) {\n case 0: { z = atanhi0 - ((x * (s1 + s2) - atanlo0) - x); break; }\n case 1: { z = atanhi1 - ((x * (s1 + s2) - atanlo1) - x); break; }\n case 2: { z = atanhi2 - ((x * (s1 + s2) - atanlo2) - x); break; }\n case 3: { z = atanhi3 - ((x * (s1 + s2) - atanlo3) - x); break; }\n default: unreachable();\n }\n return sig ? -z : z;\n }\n\n export function atanh(x: f32): f32 { // see: musl/src/math/atanhf.c\n var u = reinterpret(x);\n var s = (u >> 31);\n u &= 0x7FFFFFFF;\n var y = reinterpret(u);\n if (u < 0x3F800000 - (1 << 23)) {\n if (u >= 0x3F800000 - (32 << 23)) y = 0.5 * log1p(2 * y + 2 * y * y / (1 - y));\n } else y = 0.5 * log1p(2 * (y / (1 - y)));\n return s ? -y : y;\n }\n\n export function atan2(y: f32, x: f32): f32 { // see: musl/src/math/atan2f.c and SUN COPYRIGHT NOTICE above\n const\n pi = reinterpret(0x40490FDB), // 3.1415927410e+00f\n pi_lo = reinterpret(0xB3BBBD2E); // -8.7422776573e-08f\n if (isNaN(x) || isNaN(y)) return x + y;\n var ix = reinterpret(x);\n var iy = reinterpret(y);\n if (ix == 0x3F800000) return atan(y);\n var m = (((iy >> 31) & 1) | ((ix >> 30) & 2));\n ix &= 0x7FFFFFFF;\n iy &= 0x7FFFFFFF;\n if (iy == 0) {\n switch (m) {\n case 0:\n case 1: return y;\n case 2: return pi;\n case 3: return -pi;\n }\n }\n if (ix == 0) return m & 1 ? -pi / 2 : pi / 2;\n if (ix == 0x7F800000) {\n if (iy == 0x7F800000) {\n switch (m) {\n case 0: return pi / 4;\n case 1: return -pi / 4;\n case 2: return 3 * pi / 4;\n case 3: return -3 * pi / 4;\n }\n } else {\n switch (m) {\n case 0: return 0;\n case 1: return -0;\n case 2: return pi;\n case 3: return -pi;\n }\n }\n }\n if (ix + (26 << 23) < iy || iy == 0x7F800000) return m & 1 ? -pi / 2 : pi / 2;\n var z: f32;\n if ((m & 2) && iy + (26 << 23) < ix) z = 0.0;\n else z = atan(builtin_abs(y / x));\n switch (m) {\n case 0: return z;\n case 1: return -z;\n case 2: return pi - (z - pi_lo);\n case 3: return (z - pi_lo) - pi;\n }\n unreachable();\n return 0;\n }\n\n export function cbrt(x: f32): f32 { // see: musl/src/math/cbrtf.c and SUN COPYRIGHT NOTICE above\n const\n B1 = 709958130,\n B2 = 642849266,\n Ox1p24f = reinterpret(0x4B800000);\n var u = reinterpret(x);\n var hx = u & 0x7FFFFFFF;\n if (hx >= 0x7F800000) return x + x;\n if (hx < 0x00800000) {\n if (hx == 0) return x;\n u = reinterpret(x * Ox1p24f);\n hx = u & 0x7FFFFFFF;\n hx = hx / 3 + B2;\n } else {\n hx = hx / 3 + B1;\n }\n u &= 0x80000000;\n u |= hx;\n var T = reinterpret(u);\n var r = T * T * T;\n T = T * (x + x + r) / (x + r + r);\n r = T * T * T;\n T = T * (x + x + r) / (x + r + r);\n return T;\n }\n\n @inline\n export function ceil(x: f32): f32 {\n return builtin_ceil(x);\n }\n\n @inline\n export function clz32(x: f32): f32 {\n return builtin_clz(x);\n }\n\n export function cos(x: f32): f32 { // TODO\n unreachable();\n return 0;\n }\n\n export function cosh(x: f32): f32 { // see: musl/src/math/coshf.c\n var u = reinterpret(x);\n u &= 0x7FFFFFFF;\n x = reinterpret(u);\n if (u < 0x3F317217) {\n if (u < 0x3F800000 - (12 << 23)) return 1;\n let t = expm1(x);\n return 1 + t * t / (2 * (1 + t));\n }\n if (u < 0x42B17217) {\n let t = exp(x);\n return 0.5 * (t + 1 / t);\n }\n return expo2f(x);\n }\n\n @inline\n export function floor(x: f32): f32 {\n return builtin_floor(x);\n }\n\n export function exp(x: f32): f32 { // see: musl/src/math/expf.c and SUN COPYRIGHT NOTICE above\n const\n ln2hi = reinterpret(0x3F317200), // 6.9314575195e-1f\n ln2lo = reinterpret(0x35BFBE8E), // 1.4286067653e-6f\n invln2 = reinterpret(0x3FB8AA3B), // 1.4426950216e+0f\n P1 = reinterpret(0x3E2AAA8F), // 1.6666625440e-1f\n P2 = reinterpret(0xBB355215), // -2.7667332906e-3f\n Ox1p127f = reinterpret(0x7F000000);\n var hx = reinterpret(x);\n var sign_ = (hx >> 31);\n hx &= 0x7FFFFFFF;\n if (hx >= 0x42AEAC50) {\n if (hx >= 0x42B17218 && !sign_) {\n x *= Ox1p127f;\n return x;\n }\n if (sign_ && hx >= 0x42CFF1B5) return 0;\n }\n var hi: f32, lo: f32;\n var k: i32;\n if (hx > 0x3EB17218) {\n if (hx > 0x3F851592) {\n k = (invln2 * x + builtin_copysign(0.5, x));\n } else {\n k = 1 - sign_ - sign_;\n }\n hi = x - k * ln2hi;\n lo = k * ln2lo;\n x = hi - lo;\n } else if (hx > 0x39000000) {\n k = 0;\n hi = x;\n lo = 0;\n } else {\n return 1 + x;\n }\n var xx = x * x;\n var c = x - xx * (P1 + xx * P2);\n var y: f32 = 1 + (x * c / (2 - c) - lo + hi);\n if (k == 0) return y;\n return scalbn(y, k);\n }\n\n export function expm1(x: f32): f32 { // see: musl/src/math/expm1f.c and SUN COPYRIGHT NOTICE above\n const\n o_threshold = reinterpret(0x42B17180), // 8.8721679688e+01f\n ln2_hi = reinterpret(0x3F317180), // 6.9313812256e-01f\n ln2_lo = reinterpret(0x3717F7D1), // 9.0580006145e-06f\n invln2 = reinterpret(0x3FB8AA3B), // 1.4426950216e+00f\n Q1 = reinterpret(0xBD088868), // -3.3333212137e-02f\n Q2 = reinterpret(0x3ACF3010), // 1.5807170421e-03f\n Ox1p127f = reinterpret(0x7F000000);\n var u = reinterpret(x);\n var hx = u & 0x7FFFFFFF;\n var sign_ = (u >> 31);\n if (hx >= 0x4195B844) {\n if (hx > 0x7F800000) return x;\n if (sign_) return -1;\n if (x > o_threshold) {\n x *= Ox1p127f;\n return x;\n }\n }\n var c: f32 = 0.0, t: f32, k: i32;\n if (hx > 0x3EB17218) {\n let hi: f32, lo: f32;\n if (hx < 0x3F851592) {\n if (!sign_) {\n hi = x - ln2_hi;\n lo = ln2_lo;\n k = 1;\n } else {\n hi = x + ln2_hi;\n lo = -ln2_lo;\n k = -1;\n }\n } else {\n k = (invln2 * x + (sign_ ? -0.5 : 0.5));\n t = k;\n hi = x - t * ln2_hi;\n lo = t * ln2_lo;\n }\n x = hi - lo;\n c = (hi - x) - lo;\n } else if (hx < 0x33000000) {\n return x;\n } else k = 0;\n var hfx: f32 = 0.5 * x;\n var hxs: f32 = x * hfx;\n var r1: f32 = 1.0 + hxs * (Q1 + hxs * Q2);\n t = 3.0 - r1 * hfx;\n var e = hxs * ((r1 - t) / (6.0 - x * t));\n if (k == 0) return x - (x * e - hxs);\n e = x * (e - c) - c;\n e -= hxs;\n if (k == -1) return 0.5 * (x - e) - 0.5;\n if (k == 1) {\n if (x < -0.25) return -2.0 * (e - (x + 0.5));\n return 1.0 + 2.0 * (x - e);\n }\n u = (0x7F + k) << 23;\n var twopk = reinterpret(u);\n var y: f32;\n if (k < 0 || k > 56) {\n y = x - e + 1.0;\n if (k == 128) y = y * 2.0 * Ox1p127f;\n else y = y * twopk;\n return y - 1.0;\n }\n u = (0x7F - k) << 23;\n if (k < 23) y = (x - e + (1 - reinterpret(u))) * twopk;\n else y = (x - (e + reinterpret(u)) + 1) * twopk;\n return y;\n }\n\n @inline\n export function fround(x: f32): f32 {\n return x;\n }\n\n export function hypot(x: f32, y: f32): f32 { // see: musl/src/math/hypotf.c\n const\n Ox1p90f = reinterpret(0x6C800000),\n Ox1p_90f = reinterpret(0x12800000);\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n ux &= 0x7FFFFFFF;\n uy &= 0x7FFFFFFF;\n if (ux < uy) {\n let ut = ux;\n ux = uy;\n uy = ut;\n }\n x = reinterpret(ux);\n y = reinterpret(uy);\n if (uy == 0xFF << 23) return y;\n if (ux >= 0xFF << 23 || uy == 0 || ux - uy >= 25 << 23) return x + y;\n var z: f32 = 1;\n if (ux >= (0x7F + 60) << 23) {\n z = Ox1p90f;\n x *= Ox1p_90f;\n y *= Ox1p_90f;\n } else if (uy < (0x7F - 60) << 23) {\n z = Ox1p_90f;\n x *= Ox1p90f;\n y *= Ox1p90f;\n }\n return z * builtin_sqrt((x * x + y * y));\n }\n\n @inline\n export function imul(x: f32, y: f32): f32 {\n return (x * y);\n }\n\n export function log(x: f32): f32 { // see: musl/src/math/logf.c and SUN COPYRIGHT NOTICE above\n const\n ln2_hi = reinterpret(0x3F317180), // 6.9313812256e-01f\n ln2_lo = reinterpret(0x3717F7D1), // 9.0580006145e-06f\n Lg1 = reinterpret(0x3F2AAAAA), // 0xaaaaaa.0p-24f\n Lg2 = reinterpret(0x3ECCCE13), // 0xccce13.0p-25f\n Lg3 = reinterpret(0x3E91E9EE), // 0x91e9ee.0p-25f\n Lg4 = reinterpret(0x3E789E26), // 0xf89e26.0p-26f\n Ox1p25f = reinterpret(0x4C000000);\n var u = reinterpret(x);\n var k = 0;\n if (u < 0x00800000 || (u >> 31)) {\n if (u << 1 == 0) return -1 / (x * x);\n if (u >> 31) return (x - x) / 0;\n k -= 25;\n x *= Ox1p25f;\n u = reinterpret(x);\n } else if (u >= 0x7F800000) return x;\n else if (u == 0x3F800000) return 0;\n u += 0x3F800000 - 0x3F3504F3;\n k += (u >> 23) - 0x7F;\n u = (u & 0x007FFFFF) + 0x3F3504F3;\n x = reinterpret(u);\n var f = x - 1.0;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * Lg4);\n var t2 = z * (Lg1 + w * Lg3);\n var r = t2 + t1;\n var hfsq = 0.5 * f * f;\n var dk = k;\n return s * (hfsq + r) + dk * ln2_lo - hfsq + f + dk * ln2_hi;\n }\n\n export function log10(x: f32): f32 { // see: musl/src/math/log10f.c and SUN COPYRIGHT NOTICE above\n const\n ivln10hi = reinterpret(0x3EDE6000), // 4.3432617188e-01f\n ivln10lo = reinterpret(0xB804EAD9), // -3.1689971365e-05f\n log10_2hi = reinterpret(0x3E9A2080), // 3.0102920532e-01f\n log10_2lo = reinterpret(0x355427DB), // 7.9034151668e-07f\n Lg1 = reinterpret(0x3F2AAAAA), // 0xaaaaaa.0p-24f, 0.66666662693f\n Lg2 = reinterpret(0x3ECCCE13), // 0xccce13.0p-25f, 0.40000972152f\n Lg3 = reinterpret(0x3E91E9EE), // 0x91e9ee.0p-25f, 0.28498786688f\n Lg4 = reinterpret(0x3E789E26), // 0xf89e26.0p-26f, 0.24279078841f\n Ox1p25f = reinterpret(0x4C000000);\n var ix = reinterpret(x);\n var k = 0;\n if (ix < 0x00800000 || (ix >> 31)) {\n if (ix << 1 == 0) return -1 / (x * x);\n if (ix >> 31) return (x - x) / 0.0;\n k -= 25;\n x *= Ox1p25f;\n ix = reinterpret(x);\n } else if (ix >= 0x7F800000) return x;\n else if (ix == 0x3F800000) return 0;\n ix += 0x3F800000 - 0x3F3504F3;\n k += (ix >> 23) - 0x7F;\n ix = (ix & 0x007FFFFF) + 0x3F3504F3;\n x = reinterpret(ix);\n var f = x - 1.0;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * Lg4);\n var t2 = z * (Lg1 + w * Lg3);\n var r = t2 + t1;\n var hfsq: f32 = 0.5 * f * f;\n var hi = f - hfsq;\n ix = reinterpret(hi);\n ix &= 0xFFFFF000;\n hi = reinterpret(ix);\n var lo = f - hi - hfsq + s * (hfsq + r);\n var dk = k;\n return dk * log10_2lo + (lo + hi) * ivln10lo + lo * ivln10hi + hi * ivln10hi + dk * log10_2hi;\n }\n\n export function log1p(x: f32): f32 { // see: musl/src/math/log1pf.c and SUN COPYRIGHT NOTICE above\n const\n ln2_hi = reinterpret(0x3F317180), // 6.9313812256e-01\n ln2_lo = reinterpret(0x3717F7D1), // 9.0580006145e-06\n Lg1 = reinterpret(0x3F2AAAAA), // 0xaaaaaa.0p-24f, 0.66666662693f\n Lg2 = reinterpret(0x3ECCCE13), // 0xccce13.0p-25f, 0.40000972152f\n Lg3 = reinterpret(0x3E91E9EE), // 0x91e9ee.0p-25f, 0.28498786688f\n Lg4 = reinterpret(0x3E789E26); // 0xf89e26.0p-26f, 0.24279078841f\n var ix = reinterpret(x);\n var c: f32 = 0, f: f32 = 0;\n var k: i32 = 1;\n if (ix < 0x3ED413D0 || (ix >> 31)) {\n if (ix >= 0xBF800000) {\n if (x == -1) return x / 0.0;\n return (x - x) / 0.0;\n }\n if (ix << 1 < 0x33800000 << 1) return x;\n if (ix <= 0xBE95F619) {\n k = 0;\n c = 0;\n f = x;\n }\n } else if (ix >= 0x7F800000) return x;\n if (k) {\n let uf: f32 = 1 + x;\n let iu = reinterpret(uf);\n iu += 0x3F800000 - 0x3F3504F3;\n k = (iu >> 23) - 0x7F;\n if (k < 25) {\n c = k >= 2 ? 1 - (uf - x) : x - (uf - 1);\n c /= uf;\n } else c = 0;\n iu = (iu & 0x007FFFFF) + 0x3F3504F3;\n f = reinterpret(iu) - 1;\n }\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * Lg4);\n var t2 = z * (Lg1 + w * Lg3);\n var r = t2 + t1;\n var hfsq: f32 = 0.5 * f * f;\n var dk = k;\n return s * (hfsq + r) + (dk * ln2_lo + c) - hfsq + f + dk * ln2_hi;\n }\n\n export function log2(x: f32): f32 { // see: musl/src/math/log2f.c and SUN COPYRIGHT NOTICE above\n const\n ivln2hi = reinterpret(0x3FB8B000), // 1.4428710938e+00f\n ivln2lo = reinterpret(0xB9389AD4), // -1.7605285393e-04\n Lg1 = reinterpret(0x3F2AAAAA), // 0xaaaaaa.0p-24f, 0.66666662693f\n Lg2 = reinterpret(0x3ECCCE13), // 0xccce13.0p-25f, 0.40000972152f\n Lg3 = reinterpret(0x3E91E9EE), // 0x91e9ee.0p-25f, 0.28498786688f\n Lg4 = reinterpret(0x3E789E26), // 0xf89e26.0p-26f, 0.24279078841f\n Ox1p25f = reinterpret(0x4C000000);\n var ix = reinterpret(x);\n var k: i32 = 0;\n if (ix < 0x00800000 || (ix >> 31)) {\n if (ix << 1 == 0) return -1 / (x * x);\n if (ix >> 31) return (x - x) / 0.0;\n k -= 25;\n x *= Ox1p25f;\n ix = reinterpret(x);\n } else if (ix >= 0x7F800000) return x;\n else if (ix == 0x3F800000) return 0;\n ix += 0x3F800000 - 0x3F3504F3;\n k += (ix >> 23) - 0x7F;\n ix = (ix & 0x007FFFFF) + 0x3F3504F3;\n x = reinterpret(ix);\n var f = x - 1.0;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * Lg4);\n var t2 = z * (Lg1 + w * Lg3);\n var r = t2 + t1;\n var hfsq: f32 = 0.5 * f * f;\n var hi = f - hfsq;\n var u = reinterpret(hi);\n u &= 0xFFFFF000;\n hi = reinterpret(u);\n var lo: f32 = f - hi - hfsq + s * (hfsq + r);\n var dk = k;\n return (lo + hi) * ivln2lo + lo * ivln2hi + hi * ivln2hi + dk;\n }\n\n @inline\n export function max(value1: f32, value2: f32): f32 {\n return builtin_max(value1, value2);\n }\n\n @inline\n export function min(value1: f32, value2: f32): f32 {\n return builtin_min(value1, value2);\n }\n\n export function pow(x: f32, y: f32): f32 { // see: musl/src/math/powf.c and SUN COPYRIGHT NOTICE above\n const\n dp_h1 = reinterpret(0x3F15C000), // 5.84960938e-01f\n dp_l1 = reinterpret(0x35D1CFDC), // 1.56322085e-06f\n two24 = reinterpret(0x4B800000), // 16777216f\n huge = reinterpret(0x7149F2CA), // 1.0e+30f\n tiny = reinterpret(0x0DA24260), // 1.0e-30f\n L1 = reinterpret(0x3F19999A), // 6.0000002384e-01f\n L2 = reinterpret(0x3EDB6DB7), // 4.2857143283e-01f\n L3 = reinterpret(0x3EAAAAAB), // 3.3333334327e-01f\n L4 = reinterpret(0x3E8BA305), // 2.7272811532e-01f\n L5 = reinterpret(0x3E6C3255), // 2.3066075146e-01f\n L6 = reinterpret(0x3E53F142), // 2.0697501302e-01f\n P1 = reinterpret(0x3E2AAAAB), // 1.6666667163e-01f\n P2 = reinterpret(0xBB360B61), // -2.7777778450e-03f\n P3 = reinterpret(0x388AB355), // 6.6137559770e-05f\n P4 = reinterpret(0xB5DDEA0E), // -1.6533901999e-06f\n P5 = reinterpret(0x3331BB4C), // 4.1381369442e-08f\n lg2 = reinterpret(0x3F317218), // 6.9314718246e-01f\n lg2_h = reinterpret(0x3F317200), // 6.93145752e-01f\n lg2_l = reinterpret(0x35BFBE8C), // 1.42860654e-06f\n ovt = reinterpret(0x3338AA3C), // 4.2995665694e-08f\n cp = reinterpret(0x3F76384F), // 9.6179670095e-01\n cp_h = reinterpret(0x3F764000), // 9.6191406250e-01\n cp_l = reinterpret(0xB8F623C6), // -1.1736857402e-04\n ivln2 = reinterpret(0x3FB8AA3B), // 1.4426950216e+00\n ivln2_h = reinterpret(0x3FB8AA00), // 1.4426879883e+00\n ivln2_l = reinterpret(0x36ECA570); // 7.0526075433e-06\n var hx = reinterpret(x);\n var hy = reinterpret(y);\n var ix = hx & 0x7FFFFFFF;\n var iy = hy & 0x7FFFFFFF;\n if (iy == 0) return 1.0; // x**0 = 1, even if x is NaN\n // if (hx == 0x3F800000) return 1.0; // C: 1**y = 1, even if y is NaN, JS: NaN\n if (ix > 0x7F800000 || iy > 0x7F800000) return x + y; // NaN if either arg is NaN\n var yisint = 0, j: i32, k: i32;\n if (hx < 0) {\n if (iy >= 0x4B800000) yisint = 2;\n else if (iy >= 0x3F800000) {\n k = (iy >> 23) - 0x7F;\n j = iy >> (23 - k);\n if ((j << (23 - k)) == iy) yisint = 2 - (j & 1);\n }\n }\n if (iy == 0x7F800000) { // y is +-inf\n if (ix == 0x3F800000) return NaN; // C: (-1)**+-inf is 1, JS: NaN\n else if (ix > 0x3F800000) return hy >= 0 ? y : 0.0; // (|x|>1)**+-inf = inf,0\n else return hy >= 0 ? 0.0 : -y; // (|x|<1)**+-inf = 0,inf\n }\n if (iy == 0x3F800000) return hy >= 0 ? x : 1.0 / x;\n if (hy == 0x40000000) return x * x;\n if (hy == 0x3F000000) {\n if (hx >= 0) return builtin_sqrt(x);\n }\n var ax = builtin_abs(x);\n var z: f32;\n if (ix == 0x7F800000 || ix == 0 || ix == 0x3F800000) {\n z = ax;\n if (hy < 0) z = 1.0 / z;\n if (hx < 0) {\n if (((ix - 0x3F800000) | yisint) == 0) z = (z - z) / (z - z);\n else if (yisint == 1) z = -z;\n }\n return z;\n }\n var sn = 1.0;\n if (hx < 0) {\n if (yisint == 0) return (x - x) / (x - x);\n if (yisint == 1) sn = -1.0;\n }\n var t1: f32, t2: f32, r: f32, s: f32, t: f32, u: f32, v: f32, w: f32, p_h: f32, p_l: f32;\n var n: i32, is: i32;\n if (iy > 0x4D000000) {\n if (ix < 0x3F7FFFF8) return hy < 0 ? sn * huge * huge : sn * tiny * tiny;\n if (ix > 0x3F800007) return hy > 0 ? sn * huge * huge : sn * tiny * tiny;\n t = ax - 1;\n w = (t * t) * (0.5 - t * (0.333333333333 - t * 0.25));\n u = ivln2_h * t;\n v = t * ivln2_l - w * ivln2;\n t1 = u + v;\n is = reinterpret(t1);\n t1 = reinterpret(is & 0xFFFFF000);\n t2 = v - (t1 - u);\n } else {\n let s2: f32, s_h: f32, s_l: f32, t_h: f32, t_l: f32;\n n = 0;\n if (ix < 0x00800000) {\n ax *= two24;\n n -= 24;\n ix = reinterpret(ax);\n }\n n += (ix >> 23) - 0x7F;\n j = ix & 0x007FFFFF;\n ix = j | 0x3F800000;\n if (j <= 0x1CC471) k = 0;\n else if (j < 0x5DB3D7) k = 1;\n else {\n k = 0;\n n += 1;\n ix -= 0x00800000;\n }\n ax = reinterpret(ix);\n let bp = select(1.5, 1.0, k);\n u = ax - bp;\n v = 1.0 / (ax + bp);\n s = u * v;\n s_h = s;\n is = reinterpret(s_h);\n s_h = reinterpret(is & 0xFFFFF000);\n is = ((ix >> 1) & 0xFFFFF000) | 0x20000000;\n t_h = reinterpret(is + 0x00400000 + (k << 21));\n t_l = ax - (t_h - bp);\n s_l = v * ((u - s_h * t_h) - s_h * t_l);\n s2 = s * s;\n r = s2 * s2 * (L1 + s2 * (L2 + s2 * (L3 + s2 * (L4 + s2 * (L5 + s2 * L6)))));\n r += s_l * (s_h + s);\n s2 = s_h * s_h;\n t_h = 3.0 + s2 + r;\n is = reinterpret(t_h);\n t_h = reinterpret(is & 0xFFFFF000);\n t_l = r - ((t_h - 3.0) - s2);\n u = s_h * t_h;\n v = s_l * t_h + t_l * s;\n p_h = u + v;\n is = reinterpret(p_h);\n p_h = reinterpret(is & 0xFFFFF000);\n p_l = v - (p_h - u);\n let z_h = cp_h * p_h;\n let dp_l = select(dp_l1, 0.0, k);\n let z_l = cp_l * p_h + p_l * cp + dp_l;\n t = n;\n let dp_h = select(dp_h1, 0.0, k);\n t1 = (((z_h + z_l) + dp_h) + t);\n is = reinterpret(t1);\n t1 = reinterpret(is & 0xFFFFF000);\n t2 = z_l - (((t1 - t) - dp_h) - z_h);\n }\n is = reinterpret(y);\n var y1 = reinterpret(is & 0xFFFFF000);\n p_l = (y - y1) * t1 + y * t2;\n p_h = y1 * t1;\n z = p_l + p_h;\n j = reinterpret(z);\n if (j > 0x43000000) {\n return sn * huge * huge;\n } else if (j == 0x43000000) {\n if (p_l + ovt > z - p_h) return sn * huge * huge;\n } else if ((j & 0x7FFFFFFF) > 0x43160000) {\n return sn * tiny * tiny;\n } else if (j == 0xC3160000) {\n if (p_l <= z - p_h) return sn * tiny * tiny;\n }\n var i = j & 0x7FFFFFFF;\n k = (i >> 23) - 0x7F;\n n = 0;\n if (i > 0x3F000000) {\n n = j + (0x00800000 >> (k + 1));\n k = ((n & 0x7FFFFFFF) >> 23) - 0x7F;\n t = reinterpret(n & ~(0x007FFFFF >> k));\n n = ((n & 0x007FFFFF) | 0x00800000) >> (23 - k);\n if (j < 0) n = -n;\n p_h -= t;\n }\n t = p_l + p_h;\n is = reinterpret(t);\n t = reinterpret(is & 0xFFFF8000);\n u = t * lg2_h;\n v = (p_l - (t - p_h)) * lg2 + t * lg2_l;\n z = u + v;\n w = v - (z - u);\n t = z * z;\n t1 = z - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));\n r = (z * t1) / (t1 - 2.0) - (w + z * w);\n z = 1.0 - (r - z);\n j = reinterpret(z);\n j += n << 23;\n if ((j >> 23) <= 0) z = scalbn(z, n);\n else z = reinterpret(j);\n return sn * z;\n }\n\n @inline\n export function seedRandom(value: i64): void {\n NativeMath.seedRandom(value);\n }\n\n export function random(): f32 {\n var f: f32; // FIXME: demoting from f64 to f32 might yield 1.0f\n do f = NativeMath.random(); while (f == 1.0);\n return f;\n }\n\n export function round(x: f32): f32 { // see: musl/src/math/roundf.c\n const toint = 1.0 / f32.EPSILON;\n var ux = reinterpret(x);\n var e = (ux >> 23 & 0xFF);\n if (e >= 0x7F + 23) return x;\n if (e < 0x7F - 1) return 0 * x;\n var y: f32;\n if (ux >> 31) {\n // FIXME: JS always rounds fractional 0.5 towards +Infinity\n // and there certainly is a smarter way to do this.\n y = toint - x - toint + x;\n if (y >= 0.5) y = x - y + 1;\n else if (y < -0.5) y = x - y - 1;\n else y = x - y;\n } else {\n y = x + toint - toint - x;\n if (y > 0.5) y = y + x - 1;\n else if (y <= -0.5) y = y + x + 1;\n else y = y + x;\n }\n return y;\n }\n\n @inline\n export function sign(x: f32): f32 {\n // return x > 0 ? 1 : x < 0 ? -1 : x;\n return builtin_abs(x) > 0 ? builtin_copysign(1, x) : x;\n }\n\n export function sin(x: f32): f32 { // TODO\n unreachable();\n return 0;\n }\n\n export function sinh(x: f32): f32 { // see: musl/src/math/sinhf.c\n var u = reinterpret(x);\n var h: f32 = 0.5;\n if (u >> 31) h = -h;\n u &= 0x7FFFFFFF;\n var absx = reinterpret(u);\n var t: f32;\n if (u < 0x42B17217) {\n t = expm1(absx);\n if (u < 0x3F800000) {\n if (u < 0x3F800000 - (12 << 23)) return x;\n return h * (2 * t - t * t / (t + 1));\n }\n return h * (t + t / (t + 1));\n }\n t = 2 * h * expo2f(absx);\n return t;\n }\n\n @inline\n export function sqrt(x: f32): f32 {\n return builtin_sqrt(x);\n }\n\n export function tan(x: f32): f32 { // TODO\n unreachable();\n return 0;\n }\n\n export function tanh(x: f32): f32 { // see: musl/src/math/tanhf.c\n var u = reinterpret(x);\n var sig = u >> 31;\n u &= 0x7FFFFFFF;\n x = reinterpret(u);\n var t: f32;\n if (u > 0x3F0C9F54) {\n if (u > 0x41200000) t = 1 + 0 / x;\n else {\n t = expm1(2 * x);\n t = 1 - 2 / (t + 2);\n }\n } else if (u > 0x3E82C578) {\n t = expm1(2 * x);\n t = t / (t + 2);\n } else if (u >= 0x00800000) {\n t = expm1(-2 * x);\n t = -t / (t + 2);\n } else t = x;\n return sig ? -t : t;\n }\n\n @inline\n export function trunc(x: f32): f32 {\n return builtin_trunc(x);\n }\n\n /** @internal */\n export function scalbn(x: f32, n: i32): f32 { // see: musl/src/math/scalbnf.c\n const\n Ox1p127f = reinterpret(0x7F000000),\n Ox1p_126f = reinterpret(0x00800000);\n var y = x;\n if (n > 127) {\n y *= Ox1p127f;\n n -= 127;\n if (n > 127) {\n y *= Ox1p127f;\n n -= 127;\n if (n > 127) n = 127;\n }\n } else if (n < -126) {\n y *= Ox1p_126f;\n n += 126;\n if (n < -126) {\n y *= Ox1p_126f;\n n += 126;\n if (n < -126) n = -126;\n }\n }\n return y * reinterpret((0x7F + n) << 23);\n }\n\n export function mod(x: f32, y: f32): f32 { // see: musl/src/math/fmodf.c\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n var ex = (ux >> 23 & 0xFF);\n var ey = (uy >> 23 & 0xFF);\n var sx = ux & 0x80000000;\n if (uy << 1 == 0 || isNaN(y) || ex == 0xFF) return (x * y) / (x * y);\n if (ux << 1 <= uy << 1) {\n if (ux << 1 == uy << 1) return 0 * x;\n return x;\n }\n var i: u32;\n if (!ex) {\n for (i = ux << 9; !(i >> 31); i <<= 1) --ex;\n ux <<= -ex + 1;\n } else {\n ux &= -1 >> 9;\n ux |= 1 << 23;\n }\n if (!ey) {\n for (i = uy << 9; !(i >> 31); i <<= 1) --ey;\n uy <<= -ey + 1;\n } else {\n uy &= -1 >> 9;\n uy |= 1 << 23;\n }\n for (; ex > ey; --ex) {\n i = ux - uy;\n if (!(i >> 31)) {\n if (!i) return 0 * x;\n ux = i;\n }\n ux <<= 1;\n }\n i = ux - uy;\n if (!(i >> 31)) {\n if (!i) return 0 * x;\n ux = i;\n }\n for (; !(ux >> 23); ux <<= 1) --ex;\n if (ex > 0) {\n ux -= 1 << 23;\n ux |= ex << 23;\n } else {\n ux >>= -ex + 1;\n }\n ux |= sx;\n return reinterpret(ux);\n }\n\n export function rem(x: f32, y: f32): f32 { // see: musl/src/math/remquof.c\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n var ex = (ux >> 23 & 0xFF);\n var ey = (uy >> 23 & 0xFF);\n var sx = (ux >> 31);\n var sy = (uy >> 31);\n var i: u32;\n var uxi = ux;\n if (uy << 1 == 0 || isNaN(y) || ex == 0xFF) return (x * y) / (x * y);\n if (ux << 1 == 0) return x;\n if (!ex) {\n for (i = uxi << 9; i >> 31 == 0; ex--, i <<= 1) {}\n uxi <<= -ex + 1;\n } else {\n uxi &= -1 >> 9;\n uxi |= 1 << 23;\n }\n if (!ey) {\n for (i = uy << 9; i >> 31 == 0; ey--, i <<= 1) {}\n uy <<= -ey + 1;\n } else {\n uy &= -1 >> 9;\n uy |= 1 << 23;\n }\n var q = 0;\n do {\n if (ex < ey) {\n if (ex + 1 == ey) break; // goto end\n return x;\n }\n for (; ex > ey; ex--) {\n i = uxi - uy;\n if (i >> 31 == 0) {\n uxi = i;\n q++;\n }\n uxi <<= 1;\n q <<= 1;\n }\n i = uxi - uy;\n if (i >> 31 == 0) {\n uxi = i;\n q++;\n }\n if (uxi == 0) ex = -30;\n else for (; uxi >> 23 == 0; uxi <<= 1, ex--) {}\n break;\n } while (false);\n // end\n if (ex > 0) {\n uxi -= 1 << 23;\n uxi |= ex << 23;\n } else {\n uxi >>= -ex + 1;\n }\n x = reinterpret(uxi);\n if (sy) y = -y;\n if (ex == ey || (ex + 1 == ey && (2 * x > y || (2 * x == y && (q & 1))))) {\n x -= y;\n q++;\n }\n return sx ? -x : x;\n }\n}\n',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 }\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 }\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\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",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 }\n if (sizeof() == 4) {\n return (\n rotl(value & 0xFF00FF00, 8) |\n rotr(value & 0x00FF00FF, 8)\n );\n }\n if (sizeof() == 8) {\n let a: u64 = (value >> 8) & 0x00FF00FF00FF00FF;\n let b: u64 = (value & 0x00FF00FF00FF00FF) << 8;\n let 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",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',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 (let 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 let newCapacity = max(this.__capacity << 1, 8);\n let 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 (let 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',string:'import {\n HEADER_SIZE,\n MAX_LENGTH,\n EMPTY,\n allocate,\n isWhiteSpaceOrLineTerminator,\n CharCode,\n parse\n} from "./internal/string";\n\n@sealed\nexport class String {\n\n readonly length: i32; // capped to [0, MAX_LENGTH]\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 HEADER_SIZE\n ),\n HEADER_SIZE\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 HEADER_SIZE\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 HEADER_SIZE\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 HEADER_SIZE\n );\n if (second < 0xDC00 || second > 0xDFFF) return first;\n return ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n }\n\n @operator("+")\n private static __concat(left: String, right: String): String {\n if (!changetype(left)) left = changetype("null");\n return left.concat(right);\n }\n\n concat(other: String): String {\n assert(this !== null);\n if (other === null) other = changetype("null");\n var thisLen: isize = this.length;\n var otherLen: isize = other.length;\n var outLen: usize = thisLen + otherLen;\n if (outLen == 0) return EMPTY;\n var out = allocate(outLen);\n\n move_memory(\n changetype(out) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE,\n thisLen << 1\n );\n\n move_memory(\n changetype(out) + HEADER_SIZE + (thisLen << 1),\n changetype(other) + HEADER_SIZE,\n otherLen << 1\n );\n\n return out;\n }\n\n endsWith(searchString: String, endPosition: i32 = MAX_LENGTH): bool {\n assert(this !== null);\n if (searchString === null) return false;\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) return false;\n return !compare_memory(\n changetype(this) + HEADER_SIZE + (start << 1),\n changetype(searchString) + HEADER_SIZE,\n searchLength << 1\n );\n }\n\n @operator("==")\n private static __eq(left: String, right: String): bool {\n if (left === right) return true;\n if (left === null || right === null) return false;\n\n var leftLength = left.length;\n if (leftLength != right.length) return false;\n\n return !compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n (leftLength << 1)\n );\n }\n\n @operator("!=")\n private static __ne(left: String, right: String): bool {\n return !this.__eq(left, right);\n }\n\n @operator(">")\n private static __gt(left: String, right: String): bool {\n if (left === right || left === null || right === null) return false;\n\n var leftLength = left.length;\n var rightLength = right.length;\n\n if (!leftLength) return false;\n if (!rightLength) return true;\n\n var length = min(leftLength, rightLength);\n return compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n length << 1\n ) > 0;\n }\n\n @operator(">=")\n private static __gte(left: String, right: String): bool {\n if (left === right) return true;\n if (left === null || right === null) return false;\n\n var leftLength = left.length;\n var rightLength = right.length;\n\n if (!leftLength) return !rightLength;\n if (!rightLength) return true;\n\n var length = min(leftLength, rightLength);\n return compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n length << 1\n ) >= 0;\n }\n\n @operator("<")\n private static __lt(left: String, right: String): bool {\n if (left === right || left === null || right === null) return false;\n\n var leftLength = left.length;\n var rightLength = right.length;\n\n if (!rightLength) return false;\n if (!leftLength) return true;\n\n var length = min(leftLength, rightLength);\n return compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n length << 1\n ) < 0;\n }\n\n @operator("<=")\n private static __lte(left: String, right: String): bool {\n if (left === right) return true;\n if (left === null || right === null) return false;\n\n var leftLength = left.length;\n var rightLength = right.length;\n\n if (!rightLength) return !leftLength;\n if (!leftLength) return true;\n\n var length = min(leftLength, rightLength);\n return compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n length << 1\n ) <= 0;\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) searchString = changetype("null");\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 (let k: usize = start; k + searchLen <= len; ++k) {\n if (!compare_memory(\n changetype(this) + HEADER_SIZE + (k << 1),\n changetype(searchString) + HEADER_SIZE,\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) 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) + HEADER_SIZE + (start << 1),\n changetype(searchString) + HEADER_SIZE,\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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE + (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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE + (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\n while (\n length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (length << 1), HEADER_SIZE)\n )\n ) {\n --length;\n }\n var start: usize = 0;\n while (\n start < length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEADER_SIZE)\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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE + (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), HEADER_SIZE)\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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE + (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), HEADER_SIZE)\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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE,\n len << 1\n );\n return out;\n }\n\n repeat(count: i32 = 0): String {\n assert(this !== null);\n var length = this.length;\n\n // Most browsers can\'t handle strings 1 << 28 chars or longer\n if (count < 0 || length * count > (1 << 28)) {\n throw new RangeError("Invalid count value");\n }\n\n if (count === 0 || !length) return EMPTY;\n if (count === 1) return this;\n\n var result = allocate(length * count);\n var strLen = length << 1;\n\n /*\n * TODO possible improvments: reuse existing result for exponentially concats like:\n * \'a\' + \'a\' => \'aa\' + \'aa\' => \'aaaa\' + \'aaaa\' etc\n */\n for (let offset = 0, len = strLen * count; offset < len; offset += strLen) {\n move_memory(\n changetype(result) + HEADER_SIZE + offset,\n changetype(this) + HEADER_SIZE,\n strLen\n );\n }\n\n return result;\n }\n\n toString(): String {\n return this;\n }\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\n// FIXME: naive implementation\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, HEADER_SIZE);\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, HEADER_SIZE);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEADER_SIZE);\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, HEADER_SIZE);\n if (code == CharCode.DOT) {\n ptr += 2;\n let fac: f64 = 0.1; // precision :(\n while (len--) {\n code = load(ptr, HEADER_SIZE);\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',typedarray:'import {\n TypedArray\n} from "./internal/typedarray";\n\nexport class Int8Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Int8Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint8Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint8Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint8ClampedArray extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n @operator("[]=")\n protected __set(index: i32, value: i32): void {\n super.__set(index, max(min(value, 255), 0));\n }\n\n @operator("{}=")\n protected __unchecked_set(index: i32, value: i32): void {\n super.__unchecked_set(index, max(min(value, 255), 0));\n }\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint8ClampedArray {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Int16Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Int16Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint16Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint16Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Int32Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Int32Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint32Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint32Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Int64Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Int64Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint64Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint64Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Float32Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Float32Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Float64Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Float64Array {\n return changetype(super.subarray(begin, end));\n }\n}\n'}):(()=>{const e=path.join(".","..","std","assembly"),n={};return __webpack_require__(!function(){var e=new Error('Cannot find module "glob"');throw e.code="MODULE_NOT_FOUND",e}()).sync("**/*.ts",{cwd:e}).forEach(t=>n[t.replace(/\.ts$/,"")]=fs.readFileSync(path.join(e,t),"utf8")),n})(),exports.definitionFiles=exports.isBundle?Object({assembly:"/**\n * Environment definitions for compiling AssemblyScript to WebAssembly using asc.\n * @module std/assembly\n *//***/\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 = boolean | number;\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 /** Smallest representable value. */\n export const MIN_VALUE: i8;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: i16;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: i32;\n /** Largest representable value. */\n export const MAX_VALUE: i32;\n /** Loads an 8-bit signed integer from memory and returns it as a 32-bit integer. */\n export function load8_s(offset: usize, constantOffset?: usize): i32;\n /** Loads an 8-bit unsigned integer from memory and returns it as a 32-bit integer. */\n export function load8_u(offset: usize, constantOffset?: usize): i32;\n /** Loads a 16-bit signed integer from memory and returns it as a 32-bit integer. */\n export function load16_s(offset: usize, constantOffset?: usize): i32;\n /** Loads a 16-bit unsigned integer from memory and returns it as a 32-bit integer. */\n export function load16_u(offset: usize, constantOffset?: usize): i32;\n /** Loads a 32-bit integer from memory. */\n export function load(offset: usize, constantOffset?: usize): i32;\n /** Stores a 32-bit integer to memory as an 8-bit integer. */\n export function store8(offset: usize, value: i32, constantOffset?: usize): void;\n /** Stores a 32-bit integer to memory as a 16-bit integer. */\n export function store16(offset: usize, value: i32, constantOffset?: usize): void;\n /** Stores a 32-bit integer to memory. */\n export function store(offset: usize, value: i32, constantOffset?: usize): void;\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 /** Smallest representable value. */\n export const MIN_VALUE: i64;\n /** Largest representable value. */\n export const MAX_VALUE: i64;\n /** Loads an 8-bit signed integer from memory and returns it as a 64-bit signed integer. */\n export function load8_s(offset: usize, constantOffset?: usize): i64;\n /** Loads an 8-bit unsigned integer from memory and returns it as a 64-bit unsigned integer. */\n export function load8_u(offset: usize, constantOffset?: usize): u64;\n /** Loads a 16-bit signed integer from memory and returns it as a 64-bit signed integer. */\n export function load16_s(offset: usize, constantOffset?: usize): i64;\n /** Loads a 16-bit unsigned integer from memory and returns it as a 64-bit unsigned integer. */\n export function load16_u(offset: usize, constantOffset?: usize): u64;\n /** Loads a 32-bit signed integer from memory and returns it as a 64-bit signed integer. */\n export function load32_s(offset: usize, constantOffset?: usize): i64;\n /** Loads a 32-bit unsigned integer from memory and returns it as a 64-bit unsigned integer. */\n export function load32_u(offset: usize, constantOffset?: usize): u64;\n /** Loads a 64-bit unsigned integer from memory. */\n export function load(offset: usize, constantOffset?: usize): i64;\n /** Stores a 64-bit integer to memory as an 8-bit integer. */\n export function store8(offset: usize, value: i64, constantOffset?: usize): void;\n /** Stores a 64-bit integer to memory as a 16-bit integer. */\n export function store16(offset: usize, value: i64, constantOffset?: usize): void;\n /** Stores a 64-bit integer to memory as a 32-bit integer. */\n export function store32(offset: usize, value: i64, constantOffset?: usize): void;\n /** Stores a 64-bit integer to memory. */\n export function store(offset: usize, value: i64, constantOffset?: usize): void;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare var isize: i32 | i64;\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 /** Smallest representable value. */\n export const MIN_VALUE: u8;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u16;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u32;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u64;\n /** Largest representable value. */\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 var usize: u32 | u64;\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 /** Smallest representable value. */\n export const MIN_VALUE: bool;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: f32;\n /** Largest representable value. */\n export const MAX_VALUE: f32;\n /** Smallest normalized positive value. */\n export const MIN_POSITIVE_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 /** Returns the floating-point remainder of `x / y` (rounded towards zero). */\n export function mod(x: f32, y: f32): f32;\n /** Returns the floating-point remainder of `x / y` (rounded to nearest). */\n export function rem(x: f32, y: f32): f32;\n /** Loads a 32-bit float from memory. */\n export function load(offset: usize, constantOffset?: usize): f32;\n /** Stores a 32-bit float to memory. */\n export function store(offset: usize, value: f32, constantOffset?: usize): void;\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 /** Smallest representable value. */\n export const MIN_VALUE: f64;\n /** Largest representable value. */\n export const MAX_VALUE: f64;\n /** Smallest normalized positive value. */\n export const MIN_POSITIVE_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 /** Loads a 64-bit float from memory. */\n export function load(offset: usize, constantOffset?: usize): f64;\n /** Stores a 64-bit float to memory. */\n export function store(offset: usize, value: f64, constantOffset?: usize): void;\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 underlying core type. Compiles to a constant. */\ndeclare function sizeof(): usize;\n/** Determines the alignment (log2) of the specified underlying core type. Compiles to a constant. */\ndeclare function alignof(): usize;\n/** Determines the offset of the specified field within the given class type. Returns the class type's end offset if field name has been omitted. Compiles to a constant. */\ndeclare function offsetof(fieldName?: string): 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/** Explicitly requests no bounds checks on the provided expression. Useful for array accesses. */\ndeclare function unchecked(value: T): 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/** Tests if the specified type *or* expression is of an integer type and not a reference. Compiles to a constant. */\ndeclare function isInteger(value?: any): value is number;\n/** Tests if the specified type *or* expression is of a float type. Compiles to a constant. */\ndeclare function isFloat(value?: any): value is number;\n/** Tests if the specified type *or* expression can represent negative numbers. Compiles to a constant. */\ndeclare function isSigned(value?: any): value is number;\n/** Tests if the specified type *or* expression is of a reference type. Compiles to a constant. */\ndeclare function isReference(value?: any): value is object | string;\n/** Tests if the specified type *or* expression can be used as a string. Compiles to a constant. */\ndeclare function isString(value?: any): value is string | String;\n/** Tests if the specified type *or* expression can be used as an array. Compiles to a constant. */\ndeclare function isArray(value?: any): value is Array;\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/** Returns the 64-bit floating-point remainder of `x/y`. */\ndeclare function fmod(x: f64, y: f64): f64;\n/** Returns the 32-bit floating-point remainder of `x/y`. */\ndeclare function fmodf(x: f32, y: f32): f32;\n\n// Standard library\n\n/** Class representing a generic, fixed-length raw binary data buffer. */\ndeclare class ArrayBuffer {\n /** The size, in bytes, of the array. */\n readonly byteLength: i32;\n /** Constructs a new array buffer of the given length in bytes. */\n constructor(length: i32);\n /** Returns a copy of this array buffer's bytes from begin, inclusive, up to end, exclusive. */\n slice(begin?: i32, end?: i32): ArrayBuffer;\n}\n\n/** Interface for a typed view on an array buffer. */\ninterface ArrayBufferView {\n [key: number]: T;\n /** The {@link ArrayBuffer} referenced by this view. */\n readonly buffer: ArrayBuffer;\n /** The offset in bytes from the start of the referenced {@link ArrayBuffer}. */\n readonly byteOffset: i32;\n /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */\n readonly byteLength: i32;\n}\n\n/* @internal */\ndeclare abstract class TypedArray implements ArrayBufferView {\n [key: number]: T;\n /** Number of bytes per element. */\n static readonly BYTES_PER_ELEMENT: usize;\n /** Constructs a new typed array. */\n constructor(length: i32);\n /** The {@link ArrayBuffer} referenced by this view. */\n readonly buffer: ArrayBuffer;\n /** The offset in bytes from the start of the referenced {@link ArrayBuffer}. */\n readonly byteOffset: i32;\n /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */\n readonly byteLength: i32;\n /** The length (in elements). */\n readonly length: i32;\n /** Returns a new TypedArray of this type on the same ArrayBuffer from begin inclusive to end exclusive. */\n subarray(begin?: i32, end?: i32): this;\n}\n\n/** An array of twos-complement 8-bit signed integers. */\ndeclare class Int8Array extends TypedArray {}\n/** An array of 8-bit unsigned integers. */\ndeclare class Uint8Array extends TypedArray {}\n/** An array of twos-complement 16-bit signed integers. */\ndeclare class Int16Array extends TypedArray {}\n/** An array of 16-bit unsigned integers. */\ndeclare class Uint16Array extends TypedArray {}\n/** An array of twos-complement 32-bit signed integers. */\ndeclare class Int32Array extends TypedArray {}\n/** An array of 32-bit unsigned integers. */\ndeclare class Uint32Array extends TypedArray {}\n/** An array of twos-complement 64-bit signed integers. */\ndeclare class Int64Array extends TypedArray {}\n/** An array of 64-bit unsigned integers. */\ndeclare class Uint64Array extends TypedArray {}\n/** An array of 32-bit floating point numbers. */\ndeclare class Float32Array extends TypedArray {}\n/** An array of 64-bit floating point numbers. */\ndeclare class Float64Array extends TypedArray {}\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 every(callbackfn: (element: T, index: i32, array?: Array) => bool): bool;\n findIndex(predicate: (element: T, index: i32, array?: Array) => bool): i32;\n includes(searchElement: T, fromIndex?: i32): bool;\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n forEach(callbackfn: (value: T, index: i32, array: Array) => void): void;\n map(callbackfn: (value: T, index: i32, array: Array) => U): Array;\n filter(callbackfn: (value: T, index: i32, array: Array) => bool): Array;\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U;\n reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U;\n shift(): T;\n some(callbackfn: (element: T, index: i32, array?: Array) => bool): bool;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n sort(comparator?: (a: T, b: T) => i32): this;\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 repeat(count?: i32): string;\n toString(): 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\ninterface IMath {\n /** The base of natural logarithms, e, approximately 2.718. */\n readonly E: T;\n /** The natural logarithm of 2, approximately 0.693. */\n readonly LN2: T;\n /** The natural logarithm of 10, approximately 2.302. */\n readonly LN10: T;\n /** The base 2 logarithm of e, approximately 1.442. */\n readonly LOG2E: T;\n /** The base 10 logarithm of e, approximately 0.434. */\n readonly LOG10E: T;\n /** The ratio of the circumference of a circle to its diameter, approximately 3.14159. */\n readonly PI: T;\n /** The square root of 1/2, approximately 0.707. */\n readonly SQRT1_2: T;\n /** The square root of 2, approximately 1.414. */\n readonly SQRT2: T;\n /** Returns the absolute value of `x`. */\n abs(x: T): T;\n /** Returns the arccosine (in radians) of `x`. */\n acos(x: T): T;\n /** Returns the hyperbolic arc-cosine of `x`. */\n acosh(x: T): T;\n /** Returns the arcsine (in radians) of `x` */\n asin(x: T): T;\n /** Returns the hyperbolic arcsine of `x`. */\n asinh(x: T): T;\n /** Returns the arctangent (in radians) of `x`. */\n atan(x: T): T;\n /** Returns the arctangent of the quotient of its arguments. */\n atan2(y: T, x: T): T;\n /** Returns the hyperbolic arctangent of `x`. */\n atanh(x: T): T;\n /** Returns the cube root of `x`. */\n cbrt(x: T): T;\n /** Returns the smallest integer greater than or equal to `x`. */\n ceil(x: T): T;\n /** Returns the number of leading zero bits in the 32-bit binary representation of `x`. */\n clz32(x: T): T;\n /** Returns the cosine (in radians) of `x`. */\n cos(x: T): T;\n /** Returns the hyperbolic cosine of `x`. */\n cosh(x: T): T;\n /** Returns e to the power of `x`. */\n exp(x: T): T;\n /** Returns e to the power of `x`, minus 1. */\n expm1(x: T): T;\n /** Returns the largest integer less than or equal to `x`. */\n floor(x: T): T;\n /** Returns the nearest 32-bit single precision float representation of `x`. */\n fround(x: T): f32;\n /** Returns the square root of the sum of squares of its arguments. */\n hypot(value1: T, value2: T): T; // TODO: rest\n /** Returns the result of the C-like 32-bit multiplication of `a` and `b`. */\n imul(a: T, b: T): T;\n /** Returns the natural logarithm (base e) of `x`. */\n log(x: T): T;\n /** Returns the base 10 logarithm of `x`. */\n log10(x: T): T;\n /** Returns the natural logarithm (base e) of 1 + `x`. */\n log1p(x: T): T;\n /** Returns the base 2 logarithm of `x`. */\n log2(x: T): T;\n /** Returns the largest-valued number of its arguments. */\n max(value1: T, value2: T): T; // TODO: rest\n /** Returns the lowest-valued number of its arguments. */\n min(value1: T, value2: T): T; // TODO: rest\n /** Returns `base` to the power of `exponent`. */\n pow(base: T, exponent: T): T;\n /** Returns a pseudo-random number in the range from 0.0 inclusive up to but not including 1.0. */\n random(): T;\n /** Returns the value of `x` rounded to the nearest integer. */\n round(x: T): T;\n /** Returns the sign of `x`, indicating whether the number is positive, negative or zero. */\n sign(x: T): T;\n /** Returns the sine of `x`. */\n sin(x: T): T;\n /** Returns the hyperbolic sine of `x`. */\n sinh(x: T): T;\n /** Returns the square root of `x`. */\n sqrt(x: T): T;\n /** Returns the tangent of `x`. */\n tan(x: T): T;\n /** Returns the hyperbolic tangent of `x`. */\n tanh(x: T): T;\n /** Returns the integer part of `x` by removing any fractional digits. */\n trunc(x: T): T;\n}\n\ninterface INativeMath extends IMath {\n /** Seeds the random number generator. */\n seedRandom(value: i64): void;\n /** Returns the floating-point remainder of `x / y` (rounded towards zero). */\n mod(x: T, y: T): T;\n /** Returns the floating-point remainder of `x / y` (rounded to nearest). */\n rem(x: T, y: T): T;\n}\n\n/** Double precision math imported from JavaScript. */\ndeclare const JSMath: IMath;\n/** Double precision math implemented natively. */\ndeclare const NativeMath: INativeMath;\n/** Single precision math implemented natively. */\ndeclare const NativeMathf: INativeMath;\n/** Alias of {@link NativeMath} or {@link JSMath} respectively. Defaults to `NativeMath`. */\ndeclare const Math: IMath;\n/** Alias of {@link NativeMathf} or {@link JSMath} respectively. Defaults to `NativeMathf`. */\ndeclare const Mathf: IMath;\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 for the specified `token`. */\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 as being sealed / non-derivable. */\ndeclare function sealed(target: Function): any;\n\n/** Annotates a method or function as always inlined. */\ndeclare function inline(target: any, propertyKey: any, descriptor: any): any;\n",portable:"/**\n * Environment definitions for compiling AssemblyScript to JavaScript using tsc.\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\n * value of 2^53-1) and instead require a compatibility layer to work in JS as well, as for example\n * {@link glue/js/i64} respectively {@link glue/wasm/i64}.\n *\n * @module std/portable\n *//***/\n\n// Portable types\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 /** Smallest representable value. */\n export const MIN_VALUE: i8;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: i16;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: i32;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: isize;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u8;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u16;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u32;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: usize;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: bool;\n /** Largest representable value. */\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 representable value. */\n export const MIN_VALUE: f32;\n /** Largest representable value. */\n export const MAX_VALUE: f32;\n /** Smallest normalized positive value. */\n export const MIN_POSITIVE_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 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n /** Smallest representable value. */\n export const MIN_VALUE: f64;\n /** Largest representable value. */\n export const MAX_VALUE: f64;\n /** Smallest normalized positive value. */\n export const MIN_POSITIVE_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// 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/** Performs the sign-agnostic count tailing zero bits operation on a 32-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 integer. */\ndeclare function popcnt(value: T): T;\n/** Performs the sign-agnostic rotate left operation on a 32-bit integer. */\ndeclare function rotl(value: T, shift: T): T;\n/** Performs the sign-agnostic rotate right operation on a 32-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/** 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 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/** Rounds to the nearest integer tied to even of a 32-bit or 64-bit float. */\ndeclare function nearest(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/** Explicitly requests no bounds checks on the provided expression. Useful for array accesses. */\ndeclare function unchecked(value: T): 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/** Tests if the specified value is a valid integer. Can't distinguish an integer from an integral float. */\ndeclare function isInteger(value: any): value is number;\n/** Tests if the specified value is a valid float. Can't distinguish a float from an integer. */\ndeclare function isFloat(value: any): value is number;\n/** Tests if the specified value is of a reference type. */\ndeclare function isReference(value: any): value is object | string;\n/** Tests if the specified value can be used as a string. */\ndeclare function isString(value: any): value is string | String;\n/** Tests if the specified value can be used as an array. */\ndeclare function isArray(value: any): value is Array;\n/** Traps if the specified value is not true-ish, otherwise returns the value. */\ndeclare function assert(isTrueish: T | null, message?: string): T;\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/** Returns the 64-bit floating-point remainder of `x/y`. */\ndeclare function fmod(x: f64, y: f64): f64;\n/** Returns the 32-bit floating-point remainder of `x/y`. */\ndeclare function fmodf(x: f32, y: f32): f32;\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\n/** Class representing a generic, fixed-length raw binary data buffer. */\ndeclare class ArrayBuffer {\n /** The size, in bytes, of the array. */\n readonly byteLength: i32;\n /** Constructs a new array buffer of the given length in bytes. */\n constructor(length: i32);\n /** Returns a copy of this array buffer's bytes from begin, inclusive, up to end, exclusive. */\n slice(begin?: i32, end?: i32): ArrayBuffer;\n}\n\ndeclare class Array {\n [key: number]: T;\n length: i32;\n constructor(capacity?: i32);\n every(callbackfn: (element: T, index: i32, array?: Array) => bool): bool;\n findIndex(predicate: (element: T, index: i32, array?: Array) => bool): i32;\n includes(searchElement: T, fromIndex?: i32): bool;\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n forEach(callbackfn: (value: T, index: i32, array: Array) => void): void;\n map(callbackfn: (value: T, index: i32, array: Array) => U): Array;\n filter(callbackfn: (value: T, index: i32, array: Array) => bool): Array;\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U;\n reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U;\n shift(): T;\n some(callbackfn: (element: T, index: i32, array?: Array) => bool): bool;\n unshift(element: T): i32;\n slice(from?: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n sort(comparator?: (a: T, b: T) => i32): this;\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\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: i32;\n\n private constructor();\n\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 repeat(count?: i32): 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\ninterface IMath {\n readonly E: f64;\n readonly LN2: f64;\n readonly LN10: f64;\n readonly LOG2E: f64;\n readonly LOG10E: f64;\n readonly PI: f64;\n readonly SQRT1_2: f64;\n readonly SQRT2: f64;\n abs(x: f64): f64;\n acos(x: f64): f64;\n acosh(x: f64): f64;\n asin(x: f64): f64;\n asinh(x: f64): f64;\n atan(x: f64): f64;\n atan2(y: f64, x: f64): f64;\n atanh(x: f64): f64;\n cbrt(x: f64): f64;\n ceil(x: f64): f64;\n clz32(x: f64): i32;\n cos(x: f64): f64;\n cosh(x: f64): f64;\n exp(x: f64): f64;\n expm1(x: f64): f64;\n floor(x: f64): f64;\n fround(x: f64): f32;\n hypot(value1: f64, value2: f64): f64; // TODO: see std/math\n imul(a: f64, b: f64): i32;\n log(x: f64): f64;\n log10(x: f64): f64;\n log1p(x: f64): f64;\n log2(x: f64): f64;\n max(value1: f64, value2: f64): f64; // TODO: see std/math\n min(value1: f64, value2: f64): f64; // TODO: see std/math\n pow(base: f64, exponent: f64): f64;\n random(): f64;\n round(x: f64): f64;\n sign(x: f64): f64;\n sin(x: f64): f64;\n sinh(x: f64): f64;\n sqrt(x: f64): f64;\n tan(x: f64): f64;\n tanh(x: f64): f64;\n trunc(x: f64): f64;\n}\n\ndeclare const Math: IMath;\ndeclare const Mathf: IMath;\ndeclare const JSMath: IMath;\n\ndeclare namespace console {\n /** @deprecated */\n function log(message: string): void;\n}\n"}):(()=>{const e=path.join(".","..","std");return{assembly:fs.readFileSync(path.join(e,"assembly.d.ts"),"utf8"),portable:fs.readFileSync(path.join(e,"portable.d.ts"),"utf8")}})(),exports.compileString=((e,n)=>{"string"==typeof e&&(e={"input.ts":e});const t=Object.create({stdout:createMemoryStream(),stderr:createMemoryStream(),binary:null,text:null});return exports.main(["--binaryFile","binary","--textFile","text",...Object.keys(n||{}).map(e=>`--${e}=${n[e]}`),...Object.keys(e)],{stdout:t.stdout,stderr:t.stderr,readFile:n=>e.hasOwnProperty(n)?e[n]:null,writeFile:(e,n)=>t[e]=n,listFiles:()=>[]}),t}),exports.main=function(e,n,t){"function"==typeof n?(t=n,n={}):n||(n={});const r=n.stdout||process.stdout,i=n.stderr||process.stderr,s=n.readFile||_,a=n.writeFile||T,o=n.listFiles||E,l=n.stats||createStats();if(!r)throw Error("'options.stdout' must be specified");if(!i)throw Error("'options.stderr' must be specified");if(!fs.readFileSync){if(s===_)throw Error("'options.readFile' must be specified");if(a===T)throw Error("'options.writeFile' must be specified");if(o===E)throw Error("'options.listFiles' must be specified")}const f=parseArguments(e);if(t||(t=function(e){var n=0;return e&&(i.write(e.stack+EOL),n=1),n}),f.version)return r.write("Version "+exports.version+(isDev?"-dev":"")+EOL),t(null);if(f.help||f._.length<1){const e=[];return Object.keys(exports.options).forEach(n=>{var t=exports.options[n],r=" ";for(r+="--"+n,t.aliases&&1===t.aliases[0].length&&(r+=", -"+t.aliases[0]);r.length<24;)r+=" ";Array.isArray(t.desc)?e.push(r+t.desc[0]+t.desc.slice(1).map(e=>{for(let n=0;n<24;++n)e=" "+e;return EOL+e}).join("")):e.push(r+t.desc)}),(f.help?r:i).write(["Version "+exports.version+(isDev?"-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(EOL)+EOL),t(null)}const u=f.baseDir?path.resolve(f.baseDir):".";var c=null;f.noLib||Object.keys(exports.libraryFiles).forEach(e=>{e.indexOf("/")>=0||(l.parseCount++,l.parseTime+=measure(()=>{c=assemblyscript.parseFile(exports.libraryFiles[e],exports.libraryPrefix+e+".ts",!1,c)}))});const x=[];if(f.lib){"string"==typeof f.lib&&(f.lib=f.lib.split(",")),Array.prototype.push.apply(x,f.lib.map(e=>e.trim()));for(let e=0,n=x.length;e{c=assemblyscript.parseFile(a,exports.libraryPrefix+i,!1,c)})}}}for(let e=0,n=f._.length;e{c=assemblyscript.parseFile(r,n,!0,c)});null!=(n=c.nextFile());){if(n.startsWith(exports.libraryPrefix)){const e=n.substring(exports.libraryPrefix.length),t=n.substring(exports.libraryPrefix.length)+"/index";if(exports.libraryFiles.hasOwnProperty(e))r=exports.libraryFiles[e],n=exports.libraryPrefix+e+".ts";else if(exports.libraryFiles.hasOwnProperty(t))r=exports.libraryFiles[t],n=exports.libraryPrefix+t+".ts";else for(let i=0,a=x.length;i{assemblyscript.parseFile(r,n,!1,c)})}if(checkDiagnostics(c,i))return t(Error("Parse error"))}const p=assemblyscript.finishParsing(c),h=assemblyscript.createOptions();assemblyscript.setTarget(h,0),assemblyscript.setNoTreeShaking(h,!!f.noTreeShaking),assemblyscript.setNoAssert(h,!!f.noAssert),assemblyscript.setNoMemory(h,!!f.noMemory),assemblyscript.setImportMemory(h,!!f.importMemory),assemblyscript.setImportTable(h,!!f.importTable),assemblyscript.setMemoryBase(h,f.memoryBase>>>0),assemblyscript.setSourceMap(h,null!=f.sourceMap),assemblyscript.setGlobalAlias(h,"Math","NativeMath"),assemblyscript.setGlobalAlias(h,"Mathf","NativeMathf");var d=f.use;if(null!=d){"string"==typeof d&&(d=d.split(","));for(let e=0,n=d.length;e{try{l.compileTime+=measure(()=>{g=assemblyscript.compileProgram(p,h)})}catch(e){return t(e)}})(),checkDiagnostics(c,i))return g&&g.dispose(),t(Error("Compile error"));if(f.validate&&(l.validateCount++,l.validateTime+=measure(()=>{if(!g.validate())return g.dispose(),t(Error("Validate error"))})),"clamp"===f.trapMode)l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(["trap-mode-clamp"])});else if("js"===f.trapMode)l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(["trap-mode-js"])});else if("allow"!==f.trapMode)return g.dispose(),t(Error("Unsupported trap mode"));var m=-1,y=0,v=!f.noDebug;!1!==f.optimize&&("number"==typeof f.optimize?m=f.optimize:f[0]?m=0:f[1]?m=1:f[2]?m=2:f[3]?m=3:!0===f.optimize?(m=exports.defaultOptimizeLevel,y=exports.defaultShrinkLevel):m=0),f.s?y=1:f.z&&(y=2),"number"==typeof f.optimizeLevel&&(m=f.optimizeLevel),"number"==typeof f.shrinkLevel?y=f.shrinkLevel:"s"===f.shrinkLevel?y=1:"z"===f.shrinkLevel&&(y=2),g.setOptimizeLevel(m>0?m:0),g.setShrinkLevel(y),g.setDebugInfo(v);var F=[];if(f.runPasses&&("string"==typeof f.runPasses&&(f.runPasses=f.runPasses.split(",")),f.runPasses.length&&f.runPasses.forEach(e=>{F.indexOf(e)<0&&F.push(e)})),m>=0&&(l.optimizeCount++,l.optimizeTime+=measure(()=>{g.optimize()})),F.length&&(l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(F.map(e=>e.trim()))})),!f.noEmit){let e=!1,n=!1;if(null!=f.outFile&&(/\.was?t$/.test(f.outFile)&&null==f.textFile?f.textFile=f.outFile:/\.js$/.test(f.outFile)&&null==f.asmjsFile?f.asmjsFile=f.outFile:null==f.binaryFile&&(f.binaryFile=f.outFile)),null!=f.binaryFile){let r,o=null!=f.sourceMap?f.sourceMap.length?f.sourceMap:path.basename(f.binaryFile)+".map":null;if(l.emitCount++,l.emitTime+=measure(()=>{r=g.toBinary(o)}),f.binaryFile.length?a(path.join(u,f.binaryFile),r.output):(z(r.output),e=!0),n=!0,null!=r.sourceMap)if(f.binaryFile.length){let e=JSON.parse(r.sourceMap);e.sourceRoot=exports.sourceMapRoot,e.sources.forEach((n,r)=>{let i=null;if(n.startsWith(exports.libraryPrefix)){let e=n.substring(exports.libraryPrefix.length).replace(/\.ts$/,"");if(exports.libraryFiles.hasOwnProperty(e))i=exports.libraryFiles[e];else for(let e=0,t=x.length;e{t=g.toAsmjs()}),a(path.join(u,f.asmjsFile),t)):e||(l.emitCount++,l.emitTime+=measure(()=>{t=g.toAsmjs()}),z(t),e=!0),n=!0}if(null!=f.idlFile){let t;f.idlFile.length?(l.emitCount++,l.emitTime+=measure(()=>{t=assemblyscript.buildIDL(p)}),a(path.join(u,f.idlFile),t)):e||(l.emitCount++,l.emitTime+=measure(()=>{t=assemblyscript.buildIDL(p)}),z(t),e=!0),n=!0}if(null!=f.tsdFile){let t;f.tsdFile.length?(l.emitCount++,l.emitTime+=measure(()=>{t=assemblyscript.buildTSD(p)}),a(path.join(u,f.tsdFile),t)):e||(l.emitCount++,l.emitTime+=measure(()=>{t=assemblyscript.buildTSD(p)}),z(t),e=!0),n=!0}if(null!=f.textFile||!n){let n;f.textFile&&f.textFile.length?(l.emitCount++,l.emitTime+=measure(()=>{n=g.toText()}),a(path.join(u,f.textFile),n)):e||(l.emitCount++,l.emitTime+=measure(()=>{n=g.toText()}),z(n))}}return g.dispose(),f.measure&&printStats(l,i),t(null);function _(e){try{let n;return l.readCount++,l.readTime+=measure(()=>{n=fs.readFileSync(e,{encoding:"utf8"})}),n}catch(e){return null}}function T(e,n){try{return l.writeCount++,l.writeTime+=measure(()=>{"string"==typeof n?fs.writeFileSync(e,n,{encoding:"utf8"}):fs.writeFileSync(e,n)}),!0}catch(e){return!1}}function E(e){var n;try{return l.readTime+=measure(()=>{n=__webpack_require__(!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 z(e){z.used||(l.writeCount++,z.used=!0),l.writeTime+=measure(()=>{"string"==typeof e?r.write(e,{encoding:"utf8"}):r.write(e)})}},exports.parseArguments=parseArguments,exports.checkDiagnostics=checkDiagnostics,exports.createStats=createStats,process.hrtime||(process.hrtime=__webpack_require__(3)),exports.measure=measure,exports.formatTime=formatTime,exports.printStats=printStats;var allocBuffer=void 0!==global&&global.Buffer?global.Buffer.allocUnsafe||function(e){return new global.Buffer(e)}:function(e){return new Uint8Array(e)};function createMemoryStream(e){var n=[];return n.write=function(n){if(e&&e(n),"string"==typeof n){let e=allocBuffer(utf8.length(n));utf8.write(n,e,0),n=e}this.push(n)},n.toBuffer=function(){for(var e=0,n=0,t=this.length;n=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 s(e,n){if(e.filter)return e.filter(n);for(var t=[],r=0;r=-1&&!r;i--){var a=i>=0?arguments[i]:e.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(n=a+"/"+n,r="/"===a.charAt(0))}return n=t(s(n.split("/"),function(e){return!!e}),!r).join("/"),(r?"/":"")+n||"."},n.normalize=function(e){var r=n.isAbsolute(e),i="/"===a(e,-1);return(e=t(s(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(s(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("/")),s=r(t.split("/")),a=Math.min(i.length,s.length),o=a,l=0;l191&&r<224?s[a++]=(31&r)<<6|63&e[n++]:r>239&&r<365?(r=((7&r)<<18|(63&e[n++])<<12|(63&e[n++])<<6|63&e[n++])-65536,s[a++]=55296+(r>>10),s[a++]=56320+(1023&r)):s[a++]=(15&r)<<12|(63&e[n++])<<6|63&e[n++],a>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,s)),a=0);return i?(a&&i.push(String.fromCharCode.apply(String,s.slice(0,a))),i.join("")):String.fromCharCode.apply(String,s.slice(0,a))},r.write=function(e,n,t){for(var r,i,s=t,a=0;a>6|192,n[t++]=63&r|128):55296==(64512&r)&&56320==(64512&(i=e.charCodeAt(a+1)))?(r=65536+((1023&r)<<10)+(1023&i),++a,n[t++]=r>>18|240,n[t++]=r>>12&63|128,n[t++]=r>>6&63|128,n[t++]=63&r|128):(n[t++]=r>>12|224,n[t++]=r>>6&63|128,n[t++]=63&r|128);return t-s}},function(e,n){},function(module,exports,__webpack_require__){(function(process,global){const fs=__webpack_require__(8),path=__webpack_require__(2),utf8=__webpack_require__(7),EOL="win32"===process.platform?"\r\n":"\n";var assemblyscript,isDev;function parseArguments(e){const n={};return Object.keys(exports.options).forEach(e=>{const t=exports.options[e];t.aliases&&((n.alias||(n.alias={}))[e]=t.aliases),void 0!==t.default&&((n.default||(n.default={}))[e]=t.default),"string"===t.type?(n.string||(n.string=[])).push(e):"boolean"===t.type&&(n.boolean||(n.boolean=[])).push(e)}),__webpack_require__(4)(e,n)}function checkDiagnostics(e,n){for(var t,r=!1;null!=(t=assemblyscript.nextDiagnostic(e));)n.write(assemblyscript.formatDiagnostic(t,n.isTTY,!0)+EOL+EOL),assemblyscript.isError(t)&&(r=!0);return r}function createStats(){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 measure(e){const n=process.hrtime();e();const t=process.hrtime(n);return 1e9*t[0]+t[1]}function formatTime(e){return e?(e/1e6).toFixed(3)+" ms":"N/A"}function printStats(e,n){function t(e,n){return formatTime(e)}(n||process.stdout).write(["I/O Read : "+t(e.readTime,e.readCount),"I/O Write : "+t(e.writeTime,e.writeCount),"Parse : "+t(e.parseTime,e.parseCount),"Compile : "+t(e.compileTime,e.compileCount),"Emit : "+t(e.emitTime,e.emitCount),"Validate : "+t(e.validateTime,e.validateCount),"Optimize : "+t(e.optimizeTime,e.optimizeCount)].join(EOL)+EOL)}(()=>{try{assemblyscript=__webpack_require__(6),isDev=!1;try{__webpack_require__(!function(){var e=new Error('Cannot find module "source-map-support"');throw e.code="MODULE_NOT_FOUND",e}()).install()}catch(e){}}catch(e){try{__webpack_require__(!function(){var e=new Error('Cannot find module "ts-node"');throw e.code="MODULE_NOT_FOUND",e}()).register({project:path.join(".","..","src","tsconfig.json")}),__webpack_require__(!function(){var e=new Error('Cannot find module "../src/glue/js"');throw e.code="MODULE_NOT_FOUND",e}()),assemblyscript=__webpack_require__(!function(){var e=new Error('Cannot find module "../src"');throw e.code="MODULE_NOT_FOUND",e}()),isDev=!0}catch(e){assemblyscript=eval("require('./assemblyscript')"),isDev=!1}}})(),exports.isBundle=!0,exports.isDev=isDev,exports.version=exports.isBundle?"0.5.0":__webpack_require__(!function(){var e=new Error('Cannot find module "../package.json"');throw e.code="MODULE_NOT_FOUND",e}()).version,exports.options=__webpack_require__(5),exports.sourceMapRoot="assemblyscript:///",exports.libraryPrefix=assemblyscript.LIBRARY_PREFIX,exports.defaultOptimizeLevel=2,exports.defaultShrinkLevel=1,exports.libraryFiles=exports.isBundle?Object({"allocator/arena":'/**\n * Arena Memory Allocator\n *\n * Provides a `reset_memory` function to reset the heap to its initial state. A user has to make\n * sure that there are no more references to cleared memory afterwards. Always aligns to 8 bytes.\n *\n * @module std/assembly/allocator/arena\n *//***/\n\nimport { AL_MASK, MAX_SIZE_32 } from "../internal/allocator";\n\nvar startOffset: usize = (HEAP_BASE + AL_MASK) & ~AL_MASK;\nvar offset: usize = startOffset;\n\n@global\nexport function allocate_memory(size: usize): usize {\n if (size) {\n if (size > MAX_SIZE_32) unreachable();\n let ptr = offset;\n let newPtr = (ptr + size + AL_MASK) & ~AL_MASK;\n let pagesBefore = current_memory();\n if (newPtr > pagesBefore << 16) {\n let pagesNeeded = ((newPtr - ptr + 0xffff) & ~0xffff) >>> 16;\n let 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 }\n offset = newPtr;\n return ptr;\n }\n return 0;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n // nop\n}\n\n@global\nexport function reset_memory(): void {\n offset = startOffset;\n}\n',"allocator/buddy":'/**\n * Buddy Memory Allocator.\n * @module std/assembly/allocator/buddy\n *//***/\n\n/*\n Copyright 2018 Evan Wallace\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the "Software"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n*/// see: https://github.com/evanw/buddy-malloc\n\n/*\n * This file implements a buddy memory allocator, which is an allocator that\n * allocates memory within a fixed linear address range. It spans the address\n * range with a binary tree that tracks free space. Both "malloc" and "free"\n * are O(log N) time where N is the maximum possible number of allocations.\n *\n * The "buddy" term comes from how the tree is used. When memory is allocated,\n * nodes in the tree are split recursively until a node of the appropriate size\n * is reached. Every split results in two child nodes, each of which is the\n * buddy of the other. When a node is freed, the node and its buddy can be\n * merged again if the buddy is also free. This makes the memory available\n * for larger allocations again.\n */\n\n/*\n * Every allocation needs an 8-byte header to store the allocation size while\n * staying 8-byte aligned. The address returned by "malloc" is the address\n * right after this header (i.e. the size occupies the 8 bytes before the\n * returned address).\n */\nconst HEADER_SIZE: usize = 8;\n\n/*\n * The minimum allocation size is 16 bytes because we have an 8-byte header and\n * we need to stay 8-byte aligned.\n */\nconst MIN_ALLOC_LOG2: usize = 4;\nconst MIN_ALLOC: usize = 1 << MIN_ALLOC_LOG2;\n\n/*\n * The maximum allocation size is currently set to 2gb. This is the total size\n * of the heap. It\'s technically also the maximum allocation size because the\n * heap could consist of a single allocation of this size. But of course real\n * heaps will have multiple allocations, so the real maximum allocation limit\n * is at most 1gb.\n */\nconst MAX_ALLOC_LOG2: usize = 30; // 31;\nconst MAX_ALLOC: usize = 1 << MAX_ALLOC_LOG2;\n\n/*\n * Allocations are done in powers of two starting from MIN_ALLOC and ending at\n * MAX_ALLOC inclusive. Each allocation size has a bucket that stores the free\n * list for that allocation size.\n *\n * Given a bucket index, the size of the allocations in that bucket can be\n * found with "(size_t)1 << (MAX_ALLOC_LOG2 - bucket)".\n */\nconst BUCKET_COUNT: usize = MAX_ALLOC_LOG2 - MIN_ALLOC_LOG2 + 1;\n\n/*\n * Free lists are stored as circular doubly-linked lists. Every possible\n * allocation size has an associated free list that is threaded through all\n * currently free blocks of that size. That means MIN_ALLOC must be at least\n * "sizeof(list_t)". MIN_ALLOC is currently 16 bytes, so this will be true for\n * both 32-bit and 64-bit.\n */\n@unmanaged\nclass List {\n prev: List;\n next: List;\n static readonly SIZE: usize = 2 * sizeof();\n}\n\n/*\n * Each bucket corresponds to a certain allocation size and stores a free list\n * for that size. The bucket at index 0 corresponds to an allocation size of\n * MAX_ALLOC (i.e. the whole address space).\n */\nvar BUCKETS_START: usize = HEAP_BASE;\nvar BUCKETS_END: usize = BUCKETS_START + BUCKET_COUNT * List.SIZE;\n\nfunction buckets$get(index: usize): List {\n assert(index < BUCKET_COUNT);\n return changetype(BUCKETS_START + index * List.SIZE);\n}\n\n/*\n * We could initialize the allocator by giving it one free block the size of\n * the entire address space. However, this would cause us to instantly reserve\n * half of the entire address space on the first allocation, since the first\n * split would store a free list entry at the start of the right child of the\n * root. Instead, we have the tree start out small and grow the size of the\n * tree as we use more memory. The size of the tree is tracked by this value.\n */\nvar bucket_limit: usize;\n\n/*\n * This array represents a linearized binary tree of bits. Every possible\n * allocation larger than MIN_ALLOC has a node in this tree (and therefore a\n * bit in this array).\n *\n * Given the index for a node, lineraized binary trees allow you to traverse to\n * the parent node or the child nodes just by doing simple arithmetic on the\n * index:\n *\n * - Move to parent: index = (index - 1) / 2;\n * - Move to left child: index = index * 2 + 1;\n * - Move to right child: index = index * 2 + 2;\n * - Move to sibling: index = ((index - 1) ^ 1) + 1;\n *\n * Each node in this tree can be in one of several states:\n *\n * - UNUSED (both children are UNUSED)\n * - SPLIT (one child is UNUSED and the other child isn\'t)\n * - USED (neither children are UNUSED)\n *\n * These states take two bits to store. However, it turns out we have enough\n * information to distinguish between UNUSED and USED from context, so we only\n * need to store SPLIT or not, which only takes a single bit.\n *\n * Note that we don\'t need to store any nodes for allocations of size MIN_ALLOC\n * since we only ever care about parent nodes.\n */\nconst SPLIT_COUNT: usize = (1 << (BUCKET_COUNT - 1)) / 8;\nvar NODE_IS_SPLIT_START: usize = BUCKETS_END;\nvar NODE_IS_SPLIT_END: usize = NODE_IS_SPLIT_START + SPLIT_COUNT * sizeof();\n\nfunction node_is_split$get(index: usize): i32 {\n assert(index < SPLIT_COUNT);\n return load(NODE_IS_SPLIT_START + index);\n}\n\nfunction node_is_split$set(index: usize, state: i32): void {\n assert(index < SPLIT_COUNT);\n store(NODE_IS_SPLIT_START + index, state);\n}\n\n/*\n * This is the starting address of the address range for this allocator. Every\n * returned allocation will be an offset of this pointer from 0 to MAX_ALLOC.\n */\nvar base_ptr: usize;\n\n/*\n * This is the maximum address that has ever been used by the allocator. It\'s\n * used to know when to call "brk" to request more memory from the kernel.\n */\nvar max_ptr: usize;\n\n/*\n * Make sure all addresses before "new_value" are valid and can be used. Memory\n * is allocated in a 2gb address range but that memory is not reserved up\n * front. It\'s only reserved when it\'s needed by calling this function. This\n * will return false if the memory could not be reserved.\n */\nfunction update_max_ptr(new_value: usize): i32 {\n if (new_value > max_ptr) {\n // if (brk(new_value)) {\n // return 0;\n // }\n let oldPages = current_memory();\n let newPages = (((new_value + 0xffff) & ~0xffff) >> 16);\n assert(newPages > oldPages);\n if (grow_memory(newPages - oldPages) < 0) {\n return 0;\n }\n // max_ptr = new_value;\n max_ptr = newPages << 16;\n }\n return 1;\n}\n\n/*\n * Initialize a list to empty. Because these are circular lists, an "empty"\n * list is an entry where both links point to itself. This makes insertion\n * and removal simpler because they don\'t need any branches.\n */\nfunction list_init(list: List): void {\n list.prev = list;\n list.next = list;\n}\n\n/*\n * Append the provided entry to the end of the list. This assumes the entry\n * isn\'t in a list already because it overwrites the linked list pointers.\n */\nfunction list_push(list: List, entry: List): void {\n var prev = list.prev;\n entry.prev = prev;\n entry.next = list;\n prev.next = entry;\n list.prev = entry;\n}\n\n/*\n * Remove the provided entry from whichever list it\'s currently in. This\n * assumes that the entry is in a list. You don\'t need to provide the list\n * because the lists are circular, so the list\'s pointers will automatically\n * be updated if the first or last entries are removed.\n */\nfunction list_remove(entry: List): void {\n var prev = entry.prev;\n var next = entry.next;\n prev.next = next;\n next.prev = prev;\n}\n\n/*\n * Remove and return the first entry in the list or NULL if the list is empty.\n */\nfunction list_pop(list: List): List | null {\n var back = list.prev;\n if (back == list) return null;\n list_remove(back);\n return back;\n}\n\n/*\n * This maps from the index of a node to the address of memory that node\n * represents. The bucket can be derived from the index using a loop but is\n * required to be provided here since having them means we can avoid the loop\n * and have this function return in constant time.\n */\nfunction ptr_for_node(index: usize, bucket: usize): usize {\n return base_ptr + ((index - (1 << bucket) + 1) << (MAX_ALLOC_LOG2 - bucket));\n}\n\n/*\n * This maps from an address of memory to the node that represents that\n * address. There are often many nodes that all map to the same address, so\n * the bucket is needed to uniquely identify a node.\n */\nfunction node_for_ptr(ptr: usize, bucket: usize): usize {\n return ((ptr - base_ptr) >> (MAX_ALLOC_LOG2 - bucket)) + (1 << bucket) - 1;\n}\n\n/*\n * Given the index of a node, this returns the "is split" flag of the parent.\n */\nfunction parent_is_split(index: usize): bool {\n index = (index - 1) / 2;\n return ((node_is_split$get(index / 8) >>> (index % 8)) & 1) == 1;\n}\n\n/*\n * Given the index of a node, this flips the "is split" flag of the parent.\n */\nfunction flip_parent_is_split(index: usize): void {\n index = (index - 1) / 2;\n var indexDiv8 = index / 8;\n node_is_split$set(indexDiv8,\n node_is_split$get(indexDiv8) ^ (1 << (index % 8))\n );\n}\n\n/*\n * Given the requested size passed to "malloc", this function returns the index\n * of the smallest bucket that can fit that size.\n */\nfunction bucket_for_request(request: usize): usize {\n var bucket = BUCKET_COUNT - 1;\n var size = MIN_ALLOC;\n\n while (size < request) {\n bucket--;\n size *= 2;\n }\n\n return bucket;\n}\n\n/*\n * The tree is always rooted at the current bucket limit. This call grows the\n * tree by repeatedly doubling it in size until the root lies at the provided\n * bucket index. Each doubling lowers the bucket limit by 1.\n */\nfunction lower_bucket_limit(bucket: usize): u32 {\n while (bucket < bucket_limit) {\n let root = node_for_ptr(base_ptr, bucket_limit);\n let right_child: usize;\n\n /*\n * If the parent isn\'t SPLIT, that means the node at the current bucket\n * limit is UNUSED and our address space is entirely free. In that case,\n * clear the root free list, increase the bucket limit, and add a single\n * block with the newly-expanded address space to the new root free list.\n */\n if (!parent_is_split(root)) {\n list_remove(changetype(base_ptr));\n list_init(buckets$get(--bucket_limit));\n list_push(buckets$get(bucket_limit), changetype(base_ptr));\n continue;\n }\n\n /*\n * Otherwise, the tree is currently in use. Create a parent node for the\n * current root node in the SPLIT state with a right child on the free\n * list. Make sure to reserve the memory for the free list entry before\n * writing to it. Note that we do not need to flip the "is split" flag for\n * our current parent because it\'s already on (we know because we just\n * checked it above).\n */\n right_child = ptr_for_node(root + 1, bucket_limit);\n if (!update_max_ptr(right_child + List.SIZE)) {\n return 0;\n }\n list_push(buckets$get(bucket_limit), changetype(right_child));\n list_init(buckets$get(--bucket_limit));\n\n /*\n * Set the grandparent\'s SPLIT flag so if we need to lower the bucket limit\n * again, we\'ll know that the new root node we just added is in use.\n */\n root = (root - 1) / 2;\n if (root != 0) {\n flip_parent_is_split(root);\n }\n }\n\n return 1;\n}\n\n@global\nexport function allocate_memory(request: usize): usize {\n var original_bucket: usize, bucket: usize;\n\n /*\n * Make sure it\'s possible for an allocation of this size to succeed. There\'s\n * a hard-coded limit on the maximum allocation size because of the way this\n * allocator works.\n */\n if (request > MAX_ALLOC - HEADER_SIZE) unreachable();\n\n /*\n * Initialize our global state if this is the first call to "malloc". At the\n * beginning, the tree has a single node that represents the smallest\n * possible allocation size. More memory will be reserved later as needed.\n */\n if (base_ptr == 0) {\n // base_ptr = max_ptr = (uint8_t *)sbrk(0);\n base_ptr = (NODE_IS_SPLIT_END + 7) & ~7; // must be aligned\n max_ptr = current_memory() << 16; // must grow first\n bucket_limit = BUCKET_COUNT - 1;\n if (!update_max_ptr(base_ptr + List.SIZE)) {\n return 0;\n }\n list_init(buckets$get(BUCKET_COUNT - 1));\n list_push(buckets$get(BUCKET_COUNT - 1), changetype(base_ptr));\n }\n\n /*\n * Find the smallest bucket that will fit this request. This doesn\'t check\n * that there\'s space for the request yet.\n */\n bucket = bucket_for_request(request + HEADER_SIZE);\n original_bucket = bucket;\n\n /*\n * Search for a bucket with a non-empty free list that\'s as large or larger\n * than what we need. If there isn\'t an exact match, we\'ll need to split a\n * larger one to get a match.\n */\n while (bucket + 1 != 0) {\n let size: usize, bytes_needed: usize, i: usize;\n let ptr: usize;\n\n /*\n * We may need to grow the tree to be able to fit an allocation of this\n * size. Try to grow the tree and stop here if we can\'t.\n */\n if (!lower_bucket_limit(bucket)) {\n return 0;\n }\n\n /*\n * Try to pop a block off the free list for this bucket. If the free list\n * is empty, we\'re going to have to split a larger block instead.\n */\n ptr = changetype(list_pop(buckets$get(bucket)));\n if (!ptr) {\n /*\n * If we\'re not at the root of the tree or it\'s impossible to grow the\n * tree any more, continue on to the next bucket.\n */\n if (bucket != bucket_limit || bucket == 0) {\n bucket--;\n continue;\n }\n\n /*\n * Otherwise, grow the tree one more level and then pop a block off the\n * free list again. Since we know the root of the tree is used (because\n * the free list was empty), this will add a parent above this node in\n * the SPLIT state and then add the new right child node to the free list\n * for this bucket. Popping the free list will give us this right child.\n */\n if (!lower_bucket_limit(bucket - 1)) {\n return 0;\n }\n ptr = changetype(list_pop(buckets$get(bucket)));\n }\n\n /*\n * Try to expand the address space first before going any further. If we\n * have run out of space, put this block back on the free list and fail.\n */\n size = 1 << (MAX_ALLOC_LOG2 - bucket);\n bytes_needed = bucket < original_bucket ? size / 2 + List.SIZE : size;\n if (!update_max_ptr(ptr + bytes_needed)) {\n list_push(buckets$get(bucket), changetype(ptr));\n return 0;\n }\n\n /*\n * If we got a node off the free list, change the node from UNUSED to USED.\n * This involves flipping our parent\'s "is split" bit because that bit is\n * the exclusive-or of the UNUSED flags of both children, and our UNUSED\n * flag (which isn\'t ever stored explicitly) has just changed.\n *\n * Note that we shouldn\'t ever need to flip the "is split" bit of our\n * grandparent because we know our buddy is USED so it\'s impossible for our\n * grandparent to be UNUSED (if our buddy chunk was UNUSED, our parent\n * wouldn\'t ever have been split in the first place).\n */\n i = node_for_ptr(ptr, bucket);\n if (i != 0) {\n flip_parent_is_split(i);\n }\n\n /*\n * If the node we got is larger than we need, split it down to the correct\n * size and put the new unused child nodes on the free list in the\n * corresponding bucket. This is done by repeatedly moving to the left\n * child, splitting the parent, and then adding the right child to the free\n * list.\n */\n while (bucket < original_bucket) {\n i = i * 2 + 1;\n bucket++;\n flip_parent_is_split(i);\n list_push(\n buckets$get(bucket),\n changetype(ptr_for_node(i + 1, bucket))\n );\n }\n\n /*\n * Now that we have a memory address, write the block header (just the size\n * of the allocation) and return the address immediately after the header.\n */\n store(ptr, request);\n return ptr + HEADER_SIZE;\n }\n\n return 0;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n var bucket: usize, i: usize;\n\n /*\n * Ignore any attempts to free a NULL pointer.\n */\n if (!ptr) {\n return;\n }\n\n /*\n * We were given the address returned by "malloc" so get back to the actual\n * address of the node by subtracting off the size of the block header. Then\n * look up the index of the node corresponding to this address.\n */\n ptr = ptr - HEADER_SIZE;\n bucket = bucket_for_request(load(ptr) + HEADER_SIZE);\n i = node_for_ptr(ptr, bucket);\n\n /*\n * Traverse up to the root node, flipping USED blocks to UNUSED and merging\n * UNUSED buddies together into a single UNUSED parent.\n */\n while (i != 0) {\n /*\n * Change this node from UNUSED to USED. This involves flipping our\n * parent\'s "is split" bit because that bit is the exclusive-or of the\n * UNUSED flags of both children, and our UNUSED flag (which isn\'t ever\n * stored explicitly) has just changed.\n */\n flip_parent_is_split(i);\n\n /*\n * If the parent is now SPLIT, that means our buddy is USED, so don\'t merge\n * with it. Instead, stop the iteration here and add ourselves to the free\n * list for our bucket.\n *\n * Also stop here if we\'re at the current root node, even if that root node\n * is now UNUSED. Root nodes don\'t have a buddy so we can\'t merge with one.\n */\n if (parent_is_split(i) || bucket == bucket_limit) {\n break;\n }\n\n /*\n * If we get here, we know our buddy is UNUSED. In this case we should\n * merge with that buddy and continue traversing up to the root node. We\n * need to remove the buddy from its free list here but we don\'t need to\n * add the merged parent to its free list yet. That will be done once after\n * this loop is finished.\n */\n list_remove(changetype(ptr_for_node(((i - 1) ^ 1) + 1, bucket)));\n i = (i - 1) / 2;\n bucket--;\n }\n\n /*\n * Add ourselves to the free list for our bucket. We add to the back of the\n * list because "malloc" takes from the back of the list and we want a "free"\n * followed by a "malloc" of the same size to ideally use the same address\n * for better memory locality.\n */\n list_push(buckets$get(bucket), changetype(ptr_for_node(i, bucket)));\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n',"allocator/emscripten":"/**\n * Emscripten Memory Allocator.\n *\n * Uses Emscripten's exported _malloc and _free implementations, i.e., when linking with\n * Emscripten-compiled programs that already provide these. Differs from 'system' in that their\n * names are prefixed with an underscore.\n *\n * @module std/assembly/allocator/emscripten\n *//***/\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 function reset_memory(): void {\n unreachable();\n}\n","allocator/system":"/**\n * System Memory Allocator.\n *\n * Uses the environment's malloc and free implementations, i.e., when linking with other C-like\n * programs that already provide these.\n *\n * @module std/assembly/allocator/system\n *//***/\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 function reset_memory(): void {\n unreachable();\n}\n","allocator/tlsf":"/**\n * Two-Level Segregate Fit Memory Allocator.\n *\n * A general purpose dynamic memory allocator specifically designed to meet real-time requirements.\n * Always aligns to 8 bytes.\n *\n * @module std/assembly/allocator/tlsf\n *//***/\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\nimport {\n AL_BITS,\n AL_SIZE,\n AL_MASK\n} from \"../internal/allocator\";\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│ ◄─┐ info\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\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() + AL_MASK) & ~AL_MASK;\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() + AL_MASK) & ~AL_MASK;// 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 let left: Block = assert(block.left); // can't be null\n let 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 let 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 let 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 let 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 let 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 let rootOffset = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n ROOT = root = changetype(rootOffset);\n root.tailRef = 0;\n root.flMap = 0;\n for (let fl: usize = 0; fl < FL_BITS; ++fl) {\n root.setSLMap(fl, 0);\n for (let sl: u32 = 0; sl < SL_SIZE; ++sl) {\n root.setHead(fl, sl, null);\n }\n }\n root.addMemory((rootOffset + Root.SIZE + AL_MASK) & ~AL_MASK, current_memory() << 16);\n }\n\n // search for a suitable block\n var data: usize = 0;\n if (size) {\n if (size > Block.MAX_SIZE) unreachable();\n // 32-bit MAX_SIZE is 1 << 30 and itself aligned, hence the following can't overflow MAX_SIZE\n size = max((size + AL_MASK) & ~AL_MASK, Block.MIN_SIZE);\n\n let block = root.search(size);\n if (!block) {\n\n // request more memory\n let pagesBefore = current_memory();\n let pagesNeeded = ((size + 0xffff) & ~0xffff) >>> 16;\n let 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 let 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 let root = ROOT;\n if (root) {\n let block = changetype(data - Block.INFO);\n let 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\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n",array:'import {\n MAX_BLENGTH,\n HEADER_SIZE as HEADER_SIZE_AB,\n allocUnsafe,\n reallocUnsafe,\n loadUnsafe,\n storeUnsafe\n} from "./internal/arraybuffer";\n\nimport {\n defaultComparator,\n insertionSort,\n weakHeapSort\n} from "./internal/array";\n\nexport class Array {\n\n /* @internal */ buffer_: ArrayBuffer;\n /* @internal */ length_: i32;\n\n constructor(length: i32 = 0) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (length > MAX_LENGTH) throw new RangeError("Invalid array length");\n var byteLength = length << alignof();\n var buffer = allocUnsafe(byteLength);\n this.buffer_ = buffer;\n this.length_ = length;\n set_memory(\n changetype(buffer) + HEADER_SIZE_AB,\n 0,\n byteLength\n );\n }\n\n get length(): i32 {\n return this.length_;\n }\n\n set length(length: i32) {\n var buffer = this.buffer_;\n var capacity = buffer.byteLength >>> alignof();\n if (length > capacity) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (length > MAX_LENGTH) throw new RangeError("Invalid array length");\n buffer = reallocUnsafe(buffer, length << alignof());\n this.buffer_ = buffer;\n }\n this.length_ = length;\n }\n\n every(callbackfn: (element: T, index: i32, array: Array) => bool): bool {\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n if (!callbackfn(loadUnsafe(buffer, index), index, this)) return false;\n }\n return true;\n }\n\n findIndex(predicate: (element: T, index: i32, array: Array) => bool): i32 {\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n if (predicate(loadUnsafe(buffer, index), index, this)) return index;\n }\n return -1;\n }\n\n @operator("[]")\n private __get(index: i32): T {\n var buffer = this.buffer_;\n return index < (buffer.byteLength >>> alignof())\n ? loadUnsafe(buffer, index)\n : unreachable();\n }\n\n @operator("{}")\n private __unchecked_get(index: i32): T {\n return loadUnsafe(this.buffer_, index);\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n var buffer = this.buffer_;\n var capacity = buffer.byteLength >>> alignof();\n if (index >= capacity) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (index >= MAX_LENGTH) throw new Error("Invalid array length");\n buffer = reallocUnsafe(buffer, (index + 1) << alignof());\n this.buffer_ = buffer;\n this.length_ = index + 1;\n }\n storeUnsafe(buffer, index, value);\n }\n\n @operator("{}=")\n private __unchecked_set(index: i32, value: T): void {\n storeUnsafe(this.buffer_, index, value);\n }\n\n includes(searchElement: T, fromIndex: i32 = 0): bool {\n var length = this.length_;\n if (length == 0 || fromIndex >= length) return false;\n if (fromIndex < 0) fromIndex = max(length + fromIndex, 0);\n var buffer = this.buffer_;\n while (fromIndex < length) {\n if (loadUnsafe(buffer, fromIndex) == searchElement) return true;\n ++fromIndex;\n }\n return false;\n }\n\n indexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n var length = this.length_;\n if (length == 0 || fromIndex >= length) return -1;\n if (fromIndex < 0) fromIndex = max(length + fromIndex, 0);\n var buffer = this.buffer_;\n while (fromIndex < length) {\n if (loadUnsafe(buffer, fromIndex) == searchElement) return fromIndex;\n ++fromIndex;\n }\n return -1;\n }\n\n lastIndexOf(searchElement: T, fromIndex: i32 = this.length_): i32 {\n var length = this.length_;\n if (length == 0) return -1;\n if (fromIndex < 0) fromIndex = length + fromIndex; // no need to clamp\n else if (fromIndex >= length) fromIndex = length - 1;\n var buffer = this.buffer_;\n while (fromIndex >= 0) { // ^\n if (loadUnsafe(buffer, fromIndex) == searchElement) return fromIndex;\n --fromIndex;\n }\n return -1;\n }\n\n push(element: T): i32 {\n var length = this.length_;\n var buffer = this.buffer_;\n var capacity = buffer.byteLength >>> alignof();\n var newLength = length + 1; // safe only if length is checked\n if (length >= capacity) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (length >= MAX_LENGTH) throw new Error("Invalid array length");\n buffer = reallocUnsafe(buffer, newLength << alignof());\n this.buffer_ = buffer;\n }\n this.length_ = newLength;\n storeUnsafe(buffer, length, element);\n return newLength;\n }\n\n pop(): T {\n var length = this.length_;\n if (length < 1) throw new RangeError("Array is empty");\n var element = loadUnsafe(this.buffer_, --length);\n this.length_ = length;\n return element;\n }\n\n forEach(callbackfn: (value: T, index: i32, array: Array) => void): void {\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n callbackfn(loadUnsafe(buffer, index), index, this);\n }\n }\n\n map(callbackfn: (value: T, index: i32, array: Array) => U): Array {\n var buffer = this.buffer_;\n var length = this.length_;\n var result = new Array(length);\n var resultBuffer = result.buffer_;\n for (let index = 0; index < length && index < this.length_; ++index) {\n storeUnsafe(resultBuffer, index, callbackfn(loadUnsafe(buffer, index), index, this));\n }\n return result;\n }\n\n filter(callbackfn: (value: T, index: i32, array: Array) => bool): Array {\n var buffer = this.buffer_;\n var length = this.length_;\n var result = new Array();\n for (let index = 0; index < length && index < this.length_; ++index) {\n let value = loadUnsafe(buffer, index);\n if (callbackfn(value, index, this)) result.push(value);\n }\n return result;\n }\n\n reduce(\n callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U,\n initialValue: U\n ): U {\n var accum = initialValue;\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n accum = callbackfn(accum, loadUnsafe(buffer, index), index, this);\n }\n return accum;\n }\n\n reduceRight(\n callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U,\n initialValue: U\n ): U {\n var accum = initialValue;\n var buffer = this.buffer_;\n for (let index: i32 = this.length_ - 1; index >= 0; --index) {\n accum = callbackfn(accum, loadUnsafe(buffer, index), index, this);\n }\n return accum;\n }\n\n shift(): T {\n var length = this.length_;\n if (length < 1) throw new RangeError("Array is empty");\n var buffer = this.buffer_;\n var element = loadUnsafe(buffer, 0);\n var lastIndex = length - 1;\n move_memory(\n changetype(buffer) + HEADER_SIZE_AB,\n changetype(buffer) + HEADER_SIZE_AB + sizeof(),\n lastIndex << alignof()\n );\n storeUnsafe(buffer, lastIndex, null);\n this.length_ = lastIndex;\n return element;\n }\n\n some(callbackfn: (element: T, index: i32, array: Array) => bool): bool {\n var buffer = this.buffer_;\n for (let index = 0, toIndex = this.length_; index < toIndex && index < this.length_; ++index) {\n if (callbackfn(loadUnsafe(buffer, index), index, this)) return true;\n }\n return false;\n }\n\n unshift(element: T): i32 {\n var buffer = this.buffer_;\n var capacity = buffer.byteLength >>> alignof();\n var length = this.length_;\n var newLength = length + 1; // safe only if length is checked\n if (length >= capacity) {\n const MAX_LENGTH = MAX_BLENGTH >>> alignof();\n if (length >= MAX_LENGTH) throw new Error("Invalid array length");\n buffer = reallocUnsafe(buffer, newLength << alignof());\n capacity = buffer.byteLength >>> alignof();\n this.buffer_ = buffer;\n }\n move_memory(\n changetype(buffer) + HEADER_SIZE_AB + sizeof(),\n changetype(buffer) + HEADER_SIZE_AB,\n (capacity - 1) << alignof()\n );\n storeUnsafe(buffer, 0, element);\n this.length_ = newLength;\n return newLength;\n }\n\n slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Array {\n var length = this.length_;\n if (begin < 0) begin = max(length + begin, 0);\n else if (begin > length) begin = length;\n if (end < 0) end = length + end; // no need to clamp\n else if (end > length) end = length;\n if (end < begin) end = begin; // ^\n var newLength = end - begin;\n assert(newLength >= 0);\n var sliced = new Array(newLength);\n if (newLength) {\n move_memory(\n changetype(sliced.buffer_) + HEADER_SIZE_AB,\n changetype(this.buffer_) + HEADER_SIZE_AB + (begin << alignof()),\n newLength << alignof()\n );\n }\n return sliced;\n }\n\n splice(start: i32, deleteCount: i32 = i32.MAX_VALUE): void {\n if (deleteCount < 1) return;\n var length = this.length_;\n if (start < 0) start = max(length + start, 0);\n if (start >= length) return;\n deleteCount = min(deleteCount, length - start);\n var buffer = this.buffer_;\n move_memory(\n changetype(buffer) + HEADER_SIZE_AB + (start << alignof()),\n changetype(buffer) + HEADER_SIZE_AB + ((start + deleteCount) << alignof()),\n deleteCount << alignof()\n );\n this.length_ = length - deleteCount;\n }\n\n reverse(): Array {\n var buffer = this.buffer_;\n for (let front = 0, back = this.length_ - 1; front < back; ++front, --back) {\n let temp = loadUnsafe(buffer, front);\n storeUnsafe(buffer, front, loadUnsafe(buffer, back));\n storeUnsafe(buffer, back, temp);\n }\n return this;\n }\n\n sort(comparator: (a: T, b: T) => i32 = defaultComparator()): this {\n var length = this.length_;\n if (length <= 1) return this;\n var buffer = this.buffer_;\n if (length == 2) {\n let a = loadUnsafe(buffer, 1); // a = arr[1]\n let b = loadUnsafe(buffer, 0); // b = arr[0]\n if (comparator(a, b) < 0) {\n storeUnsafe(buffer, 1, b); // arr[1] = b;\n storeUnsafe(buffer, 0, a); // arr[0] = a;\n }\n return this;\n }\n\n if (isReference()) {\n // TODO replace this to stable sort when it implemented\n return changetype(insertionSort(this, comparator));\n } else {\n return changetype(length < 256\n ? insertionSort(this, comparator)\n : weakHeapSort(this, comparator)\n );\n }\n }\n}\n',arraybuffer:'import {\n HEADER_SIZE,\n MAX_BLENGTH,\n allocUnsafe\n} from "./internal/arraybuffer";\n\n@sealed\nexport class ArrayBuffer {\n\n readonly byteLength: i32; // capped to [0, MAX_LENGTH]\n\n constructor(length: i32) {\n if (length > MAX_BLENGTH) throw new RangeError("Invalid array buffer length");\n var buffer = allocUnsafe(length);\n set_memory(changetype(buffer) + HEADER_SIZE, 0, length);\n return buffer;\n }\n\n slice(begin: i32 = 0, end: i32 = MAX_BLENGTH): ArrayBuffer {\n var len = this.byteLength;\n if (begin < 0) begin = max(len + begin, 0);\n else begin = min(begin, len);\n if (end < 0) end = max(len + end, 0);\n else end = min(end, len);\n var newLen = max(end - begin, 0);\n var buffer = allocUnsafe(newLen);\n move_memory(changetype(buffer) + HEADER_SIZE, changetype(this) + HEADER_SIZE + begin, newLen);\n return buffer;\n }\n}\n',builtins:"export declare function isInteger(value?: T): bool;\n\nexport declare function isFloat(value?: T): bool;\n\nexport declare function isSigned(value?: T): bool;\n\nexport declare function isReference(value?: T): bool;\n\nexport declare function isString(value?: T): bool;\n\nexport declare function isArray(value?: T): bool;\n\nexport const NaN: f64 = 0 / 0;\n\nexport const Infinity: f64 = 1 / 0;\n\nexport function isNaN(value: T): bool {\n return value != value;\n}\n\nexport function isFinite(value: T): bool {\n return value - value == 0;\n}\n\nexport declare function clz(value: T): T;\n\nexport declare function ctz(value: T): T;\n\nexport declare function popcnt(value: T): T;\n\nexport declare function rotl(value: T, shift: T): T;\n\nexport declare function rotr(value: T, shift: T): T;\n\nexport declare function abs(value: T): T;\n\nexport declare function max(left: T, right: T): T;\n\nexport declare function min(left: T, right: T): T;\n\nexport declare function ceil(value: T): T;\n\nexport declare function floor(value: T): T;\n\nexport declare function copysign(left: T, right: T): T;\n\nexport declare function nearest(value: T): T;\n\nexport declare function reinterpret(value: void): T;\n\nexport declare function sqrt(value: T): T;\n\nexport declare function trunc(value: T): T;\n\nexport declare function load(offset: usize, constantOffset?: usize): T;\n\nexport declare function store(offset: usize, value: void, constantOffset?: usize): void;\n\nexport declare function sizeof(): usize; // | u32 / u64\n\nexport declare function alignof(): usize; // | u32 / u64\n\nexport declare function offsetof(fieldName?: string): usize; // | u32 / u64\n\nexport declare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n\nexport declare function unreachable(): void;\n\nexport declare function current_memory(): i32;\n\nexport declare function grow_memory(pages: i32): i32;\n\n// export declare function move_memory(dest: usize, src: usize: n: usize): void;\n\n// export declare function set_memory(dest: usize, value: u32, n: usize): void;\n\nexport declare function changetype(value: void): T;\n\nexport declare function assert(isTrueish: T, message?: string): T;\n\nexport declare function unchecked(expr: T): T;\n\nexport declare function i8(value: void): i8;\nexport namespace i8 {\n export const MIN_VALUE: i8 = -128;\n export const MAX_VALUE: i8 = 127;\n}\n\nexport declare function i16(value: void): i16;\nexport namespace i16 {\n export const MIN_VALUE: i16 = -32768;\n export const MAX_VALUE: i16 = 32767;\n}\n\nexport declare function i32(value: void): i32;\nexport namespace i32 {\n export const MIN_VALUE: i32 = -2147483648;\n export const MAX_VALUE: i32 = 2147483647;\n export declare function clz(value: i32): i32;\n export declare function ctz(value: i32): i32;\n export declare function popcnt(value: i32): i32;\n export declare function rotl(value: i32, shift: i32): i32;\n export declare function rotr(value: i32, shift: i32): i32;\n export declare function reinterpret_f32(value: f32): i32;\n export declare function load8_s(offset: usize, constantOffset?: usize): i32;\n export declare function load8_u(offset: usize, constantOffset?: usize): i32;\n export declare function load16_s(offset: usize, constantOffset?: usize): i32;\n export declare function load16_u(offset: usize, constantOffset?: usize): i32;\n export declare function load(offset: usize, constantOffset?: usize): i32;\n export declare function store8(offset: usize, value: i32, constantOffset?: usize): void;\n export declare function store16(offset: usize, value: i32, constantOffset?: usize): void;\n export declare function store(offset: usize, value: i32, constantOffset?: usize): void;\n}\n\nexport declare function i64(value: void): i64;\nexport namespace i64 {\n export const MIN_VALUE: i64 = -9223372036854775808;\n export const MAX_VALUE: i64 = 9223372036854775807;\n export declare function clz(value: i64): i64;\n export declare function ctz(value: i64): i64;\n export declare function load8_s(offset: usize, constantOffset?: usize): i64;\n export declare function load8_u(offset: usize, constantOffset?: usize): u64;\n export declare function load16_s(offset: usize, constantOffset?: usize): i64;\n export declare function load16_u(offset: usize, constantOffset?: usize): u64;\n export declare function load32_s(offset: usize, constantOffset?: usize): i64;\n export declare function load32_u(offset: usize, constantOffset?: usize): u64;\n export declare function load(offset: usize, constantOffset?: usize): i64;\n export declare function popcnt(value: i64): i64;\n export declare function rotl(value: i64, shift: i64): i64;\n export declare function rotr(value: i64, shift: i64): i64;\n export declare function reinterpret_f64(value: f64): i64;\n export declare function store8(offset: usize, value: i64, constantOffset?: usize): void;\n export declare function store16(offset: usize, value: i64, constantOffset?: usize): void;\n export declare function store32(offset: usize, value: i64, constantOffset?: usize): void;\n export declare function store(offset: usize, value: i64, constantOffset?: usize): void;\n}\n\nexport declare function isize(value: void): isize;\nexport namespace 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}\n\nexport declare function u8(value: void): u8;\nexport namespace u8 {\n export const MIN_VALUE: u8 = 0;\n export const MAX_VALUE: u8 = 255;\n}\n\nexport declare function u16(value: void): u16;\nexport namespace u16 {\n export const MIN_VALUE: u16 = 0;\n export const MAX_VALUE: u16 = 65535;\n}\n\nexport declare function u32(value: void): u32;\nexport namespace u32 {\n export const MIN_VALUE: u32 = 0;\n export const MAX_VALUE: u32 = 4294967295;\n}\n\nexport declare function u64(value: void): u64;\nexport namespace u64 {\n export const MIN_VALUE: u64 = 0;\n export const MAX_VALUE: u64 = 18446744073709551615;\n}\n\nexport declare function usize(value: void): usize;\nexport namespace usize {\n export const MIN_VALUE: usize = 0;\n export const MAX_VALUE: usize = sizeof() == sizeof()\n ? 4294967295\n : 18446744073709551615;\n}\n\nexport declare function bool(value: void): bool;\nexport namespace bool {\n export const MIN_VALUE: bool = false;\n export const MAX_VALUE: bool = true;\n}\n\nexport declare function f32(value: void): f32;\nexport namespace f32 {\n export const MIN_VALUE = reinterpret(0xFF7FFFFF); // -0x1.fffffep+127f\n export const MAX_VALUE = reinterpret(0x7F7FFFFF); // 0x1.fffffep+127f\n export const MIN_POSITIVE_VALUE = reinterpret(0x00800000); // 0x1p-126f\n export const MIN_SAFE_INTEGER: f32 = -16777215;\n export const MAX_SAFE_INTEGER: f32 = 16777215;\n export const EPSILON = reinterpret(0x34000000); // 0x1p-23f\n export declare function abs(value: f32): f32;\n export declare function ceil(value: f32): f32;\n export declare function copysign(x: f32, y: f32): f32;\n export declare function floor(value: f32): f32;\n export declare function load(offset: usize, constantOffset?: usize): f32;\n export declare function max(left: f32, right: f32): f32;\n export declare function min(left: f32, right: f32): f32;\n export declare function nearest(value: f32): f32;\n export declare function reinterpret_i32(value: i32): f32;\n export declare function sqrt(value: f32): f32;\n export declare function store(offset: usize, value: f32, constantOffset?: usize): void;\n export declare function trunc(value: f32): f32;\n}\n\nexport declare function f64(value: void): f64;\nexport namespace f64 {\n export const MIN_VALUE = reinterpret(0xFFEFFFFFFFFFFFFF); // -0x1.fffffffffffffp+1023\n export const MAX_VALUE = reinterpret(0x7FEFFFFFFFFFFFFF); // 0x1.fffffffffffffp+1023\n export const MIN_POSITIVE_VALUE = reinterpret(0x0010000000000000); // 0x1p-1022\n export const MIN_SAFE_INTEGER: f64 = -9007199254740991;\n export const MAX_SAFE_INTEGER: f64 = 9007199254740991;\n export const EPSILON = reinterpret(0x3CB0000000000000); // 0x1p-52\n export declare function abs(value: f64): f64;\n export declare function ceil(value: f64): f64;\n export declare function copysign(x: f64, y: f64): f64;\n export declare function floor(value: f64): f64;\n export declare function load(offset: usize, constantOffset?: usize): f64;\n export declare function max(left: f64, right: f64): f64;\n export declare function min(left: f64, right: f64): f64;\n export declare function nearest(value: f64): f64;\n export declare function reinterpret_i64(value: i64): f64;\n export declare function sqrt(value: f64): f64;\n export declare function store(offset: usize, value: f64, constantOffset?: usize): void;\n export declare function trunc(value: f64): f64;\n}\n\nexport declare const HEAP_BASE: usize;\n\nexport declare function start(): void;\n","collector/itcm":"/**\n * Incremental Tri-Color-Marking Garbage Collector.\n *\n * @module std/assembly/collector/itcm\n *//***/\n\n// Based on the concepts of Bach Le's μgc, see: https://github.com/bullno1/ugc\n\nimport {\n AL_MASK,\n MAX_SIZE_32\n} from \"../internal/allocator\";\n\n// ╒═══════════════ Managed object 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// │ next │ F │ ◄─┐ = nextWithFlags\n// ├─────────────────────────────────────────────────────────┴─────┤ │ usize\n// │ prev │ ◄─┘\n// ╞═══════════════════════════════════════════════════════════════╡ SIZE ┘\n// │ ... data ... │\n// └───────────────────────────────────────────────────────────────┘\n// F: flags\n\n/** Managed object flags. */\nnamespace Flags {\n /** Object is unreachable (so far). */\n export var WHITE = 0;\n /** Object is reachable. */\n export var BLACK = 1;\n /** Object is reachable but its children have not yet been scanned. */\n export const GRAY = 2;\n /** Mask to obtain just the flag bits. */\n export const MASK = AL_MASK;\n}\n\n/** Represents a managed object in memory, consisting of a header followed by the object's data. */\n@unmanaged\nclass ManagedObject {\n\n /** Pointer to the next object with additional flags stored in the alignment bits. */\n nextWithFlags: usize;\n\n /** Pointer to the previous object. */\n prev: ManagedObject;\n\n /** Visitor function called with the data pointer (excl. header). */\n visitFn: (obj: usize) => void;\n\n /** Size of a managed object after alignment. */\n static readonly SIZE: usize = (offsetof() + AL_MASK) & ~AL_MASK;\n\n /** Gets the pointer to the next object in the list. */\n get next(): ManagedObject {\n return changetype(this.nextWithFlags & ~Flags.MASK);\n }\n\n /** Sets the pointer to the next object in the list. */\n set next(obj: ManagedObject) {\n this.nextWithFlags = changetype(obj) | (this.nextWithFlags & Flags.MASK);\n }\n\n /** Inserts an object to this list. */\n insert(obj: ManagedObject): void {\n var prev = this.prev;\n obj.next = this;\n obj.prev = prev;\n prev.next = obj;\n this.prev = obj;\n }\n\n /** Removes this object from its list. */\n remove(): void {\n var next = this.next;\n var prev = this.prev;\n next.prev = prev;\n prev.next = next;\n }\n\n /** Tests if this object is white, that is unreachable (so far). */\n get isWhite(): bool {\n return (this.nextWithFlags & Flags.MASK) == Flags.WHITE;\n }\n\n /** Marks this object as white, that is unreachable (so far). */\n makeWhite(): void {\n this.nextWithFlags = (this.nextWithFlags & ~Flags.MASK) | Flags.WHITE;\n }\n\n /** Tests if this object is black, that is reachable. Root objects are always reachable. */\n get isBlack(): bool {\n return (this.nextWithFlags & Flags.MASK) == Flags.BLACK;\n }\n\n /** Marks this object as black, that is reachable. */\n makeBlack(): void {\n this.nextWithFlags = (this.nextWithFlags & ~Flags.MASK) | Flags.BLACK;\n }\n\n /** Tests if this object is gray, that is reachable with unscanned children. */\n get isGray(): bool {\n return (this.nextWithFlags & Flags.MASK) == Flags.GRAY;\n }\n\n /** Marks this object as gray, that is reachable with unscanned children. */\n makeGray(): void {\n if (this != iter) {\n this.remove();\n to.insert(this);\n } else {\n iter = iter.prev;\n }\n this.nextWithFlags = (this.nextWithFlags & ~Flags.MASK) | Flags.GRAY;\n }\n}\n\n/** Collector states. */\nconst enum State {\n /** Not yet initialized. */\n INIT = 0,\n /** Currently transitioning from SWEEP to MARK state. */\n IDLE = 1,\n /** Currently marking reachable objects. */\n MARK = 2,\n /** Currently sweeping unreachable objects. */\n SWEEP = 3\n}\n\n/** Current collector state. */\nvar state = State.INIT;\n\n// From and to spaces\nvar from: ManagedObject;\nvar to: ManagedObject;\nvar iter: ManagedObject;\n\n/** Performs a single step according to the current state. */\nfunction gc_step(): void {\n var obj: ManagedObject;\n switch (state) {\n case State.INIT: {\n from = changetype(allocate_memory(ManagedObject.SIZE));\n from.nextWithFlags = changetype(from);\n from.prev = from;\n to = changetype(allocate_memory(ManagedObject.SIZE));\n to.nextWithFlags = changetype(to);\n to.prev = to;\n iter = to;\n // fall-through\n }\n case State.IDLE: {\n state = State.MARK;\n break;\n }\n case State.MARK: {\n obj = iter.next;\n if (obj != to) {\n iter = obj;\n obj.makeBlack();\n obj.visitFn(changetype(obj) + ManagedObject.SIZE);\n } else {\n obj = iter.next;\n if (obj == to) {\n let temp = from;\n from = to;\n to = temp;\n Flags.WHITE ^= 1;\n Flags.BLACK ^= 1;\n iter = from.next;\n state = State.SWEEP;\n }\n }\n break;\n }\n case State.SWEEP: {\n obj = iter;\n if (obj != to) {\n iter = obj.next;\n free_memory(changetype(obj));\n } else {\n to.nextWithFlags = changetype(to);\n to.prev = to;\n state = State.IDLE;\n }\n break;\n }\n }\n}\n\n/** Allocates a managed object. */\n@global\nexport function gc_allocate(\n size: usize,\n visitFn: (obj: usize) => void\n): usize {\n assert(size <= MAX_SIZE_32 - ManagedObject.SIZE);\n var obj = changetype(allocate_memory(ManagedObject.SIZE + size));\n obj.makeWhite();\n obj.visitFn = visitFn;\n from.insert(obj);\n return changetype(obj) + ManagedObject.SIZE;\n}\n\n/** Visits a reachable object. Called from the visitFn functions. */\n@global\nexport function gc_visit(obj: ManagedObject): void {\n if (state == State.SWEEP) return;\n if (obj.isWhite) obj.makeGray();\n}\n\n/** Registers a managed child object with its parent object. */\n@global\nexport function gc_register(parent: ManagedObject, child: ManagedObject): void {\n if (parent.isBlack && child.isWhite) parent.makeGray();\n}\n\n/** Iterates the root set. Provided by the compiler according to the program. */\n@global\nexport declare function gc_roots(): void;\n\n/** Performs a full garbage collection cycle. */\n@global\nexport function gc_collect(): void {\n // begin collecting if not yet collecting\n switch (state) {\n case State.INIT:\n case State.IDLE: gc_step();\n }\n // finish the cycle\n while (state != State.IDLE) gc_step();\n}\n\ndeclare function allocate_memory(size: usize): usize;\ndeclare function free_memory(ptr: usize): void;\n\n// Considerations\n//\n// - An API that consists mostly of just replacing `allocate_memory` would be ideal, possibly taking\n// any additional number of parameters that are necessary, like the parent and the visitor.\n//\n// - Not having to generate a helper function for iterating globals but instead marking specific\n// nodes as roots could simplify the embedding, but whether this is feasible or not depends on its\n// performance characteristics and the possibility of tracking root status accross assignments.\n// For example, root status could be implemented as some sort of referenced-by-globals counting\n// and a dedicated list of root objects.\n//\n// - In 32-bit specifically, there is some free space in TLSF object headers due to alignment that\n// could be repurposed to store some GC information, like a class id. Certainly, this somewhat\n// depends on the efficiency of the used mechanism to detect this at compile time, including when\n// a different allocator is used.\n//\n// - Think about generations.\n",env:"/** Environment abort function called where assertions evaluate to false / on throw. */\ndeclare function abort(\n message?: string | null,\n fileName?: string | null,\n lineNumber?: u32,\n columnNumber?: u32\n): void;\n",error:'export class Error {\n\n message: string;\n stack: string = ""; // TODO\n\n constructor(message: string = "") {\n this.message = message;\n }\n}\n\nexport class RangeError extends Error {}\nexport class TypeError extends Error {}\n',"internal/allocator":"/** Number of alignment bits. */\nexport const AL_BITS: u32 = 3;\n\n/** Number of possible alignment values. */\nexport const AL_SIZE: usize = 1 << AL_BITS;\n\n/** Mask to obtain just the alignment bits. */\nexport const AL_MASK: usize = AL_SIZE - 1;\n\n/** Maximum 32-bit allocation size. */\nexport const MAX_SIZE_32: usize = 1 << 30; // 1GB\n","internal/array":"import {\n loadUnsafe,\n storeUnsafe\n} from \"./arraybuffer\";\n\nimport {\n Array\n} from \"../array\";\n\n/** Obtains the default comparator for the specified type. */\n@inline\nexport function defaultComparator(): (a: T, b: T) => i32 {\n return (a: T, b: T): i32 => ((a > b) - (a < b)); // compiles to a constant table index\n}\n\n/** Sorts an Array with the 'Insertion Sort' algorithm. */\nexport function insertionSort(arr: Array, comparator: (a: T, b: T) => i32): Array {\n var buffer = arr.buffer_;\n for (let i: i32 = 0, length: i32 = arr.length; i < length; i++) {\n let a = loadUnsafe(buffer, i); // a = arr[i]\n let j = i - 1;\n while (j >= 0) {\n let b = loadUnsafe(buffer, j); // b = arr[j]\n if (comparator(a, b) < 0) {\n storeUnsafe(buffer, j-- + 1, b); // arr[j + 1] = b\n } else break;\n }\n storeUnsafe(buffer, j + 1, a); // arr[j + 1] = a\n }\n return arr;\n}\n\n/** Sorts an Array with the 'Weak Heap Sort' algorithm. */\nexport function weakHeapSort(arr: Array, comparator: (a: T, b: T) => i32): Array {\n const shift32 = alignof();\n\n var length = arr.length;\n var bitsetSize = (length + 31) >> 5 << shift32;\n var bitset = allocate_memory(bitsetSize); // indexed in 32-bit chunks below\n set_memory(bitset, 0, bitsetSize);\n\n // see: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.21.1863&rep=rep1&type=pdf\n\n var buffer = arr.buffer_;\n for (let i = length - 1; i > 0; i--) {\n let j = i;\n while ((j & 1) == (load(bitset + (j >> 6 << shift32)) >> (j >> 1 & 31) & 1)) j >>= 1;\n\n let p = j >> 1;\n let a = loadUnsafe(buffer, p); // a = arr[p]\n let b = loadUnsafe(buffer, i); // b = arr[i]\n if (comparator(a, b) < 0) {\n store(\n bitset + (i >> 5 << shift32),\n load(bitset + (i >> 5 << shift32)) ^ (1 << (i & 31))\n );\n storeUnsafe(buffer, i, a); // arr[i] = a\n storeUnsafe(buffer, p, b); // arr[p] = b\n }\n }\n\n for (let i = length - 1; i >= 2; i--) {\n let a = loadUnsafe(buffer, 0); // a = arr[0]\n storeUnsafe(buffer, 0, loadUnsafe(buffer, i)); // arr[0] = arr[i]\n storeUnsafe(buffer, i, a); // arr[i] = a\n\n let x = 1, y: i32;\n while ((y = (x << 1) + ((load(bitset + (x >> 5 << shift32)) >> (x & 31)) & 1)) < i) x = y;\n\n while (x > 0) {\n a = loadUnsafe(buffer, 0); // a = arr[0]\n let b = loadUnsafe(buffer, x); // b = arr[x]\n\n if (comparator(a, b) < 0) {\n store(\n bitset + (x >> 5 << shift32),\n load(bitset + (x >> 5 << shift32)) ^ (1 << (x & 31))\n );\n storeUnsafe(buffer, x, a); // arr[x] = a\n storeUnsafe(buffer, 0, b); // arr[0] = b\n }\n x >>= 1;\n }\n }\n\n free_memory(bitset);\n\n var t = loadUnsafe(buffer, 1); // t = arr[1]\n storeUnsafe(buffer, 1, loadUnsafe(buffer, 0)); // arr[1] = arr[0]\n storeUnsafe(buffer, 0, t); // arr[0] = t\n return arr;\n}\n","internal/arraybuffer":'import { AL_MASK, MAX_SIZE_32 } from "./allocator";\n\n/** Size of an ArrayBuffer header. */\nexport const HEADER_SIZE: usize = (offsetof() + AL_MASK) & ~AL_MASK;\n\n/** Maximum byte length of an ArrayBuffer. */\nexport const MAX_BLENGTH: i32 = MAX_SIZE_32 - HEADER_SIZE;\n\n/** Computes an ArrayBuffer\'s size in memory. */\nexport function computeSize(byteLength: i32): usize {\n // round up to power of 2, with HEADER_SIZE=8:\n // 0 -> 2^3 = 8\n // 1..8 -> 2^4 = 16\n // 9..24 -> 2^5 = 32\n // ...\n // MAX_LENGTH -> 2^30 = 0x40000000 (MAX_SIZE_32)\n return 1 << (32 - clz(byteLength + HEADER_SIZE - 1));\n}\n\n/** Allocates a raw ArrayBuffer. Contents remain uninitialized. */\nexport function allocUnsafe(byteLength: i32): ArrayBuffer {\n assert(byteLength <= MAX_BLENGTH);\n var buffer = allocate_memory(computeSize(byteLength));\n store(buffer, byteLength, offsetof("byteLength"));\n return changetype(buffer);\n}\n\n/** Reallocates an ArrayBuffer, resizing it as requested. Tries to modify the buffer in place. */\nexport function reallocUnsafe(buffer: ArrayBuffer, newByteLength: i32): ArrayBuffer {\n var oldByteLength = buffer.byteLength;\n if (newByteLength > oldByteLength) {\n assert(newByteLength <= MAX_BLENGTH);\n if (newByteLength <= (computeSize(oldByteLength) - HEADER_SIZE)) { // fast path: zero out additional space\n store(changetype(buffer), newByteLength, offsetof("byteLength"));\n set_memory(\n changetype(buffer) + HEADER_SIZE + oldByteLength,\n 0,\n (newByteLength - oldByteLength)\n );\n } else { // slow path: copy to new buffer\n let newBuffer = allocUnsafe(newByteLength);\n move_memory(\n changetype(newBuffer) + HEADER_SIZE,\n changetype(buffer) + HEADER_SIZE,\n oldByteLength\n );\n set_memory(\n changetype(newBuffer) + HEADER_SIZE + oldByteLength,\n 0,\n (newByteLength - oldByteLength)\n );\n return newBuffer;\n }\n } else if (newByteLength < oldByteLength) { // fast path: override size\n // TBD: worth to copy and release if size is significantly less than before?\n assert(newByteLength >= 0);\n store(changetype(buffer), newByteLength, offsetof("byteLength"));\n }\n return buffer;\n}\n\n@inline\nexport function loadUnsafe(buffer: ArrayBuffer, index: i32): V {\n return load(changetype(buffer) + (index << alignof()), HEADER_SIZE);\n}\n\n@inline\nexport function storeUnsafe(buffer: ArrayBuffer, index: i32, value: V): void {\n store(changetype(buffer) + (index << alignof()), value, HEADER_SIZE);\n}\n\n@inline\nexport function loadUnsafeWithOffset(buffer: ArrayBuffer, index: i32, byteOffset: i32): V {\n return load(changetype(buffer) + byteOffset + (index << alignof()), HEADER_SIZE);\n}\n\n@inline\nexport function storeUnsafeWithOffset(buffer: ArrayBuffer, index: i32, value: V, byteOffset: i32): void {\n store(changetype(buffer) + byteOffset + (index << alignof()), value, HEADER_SIZE);\n}\n',"internal/hash":'import {\n HEADER_SIZE as HEADER_SIZE_STR\n} from "./string";\n\n/** Computes the 32-bit hash of a value of any type. */\n@inline\nexport function hash(key: T): u32 {\n // branch-level tree-shaking makes this a `(return (call ...))`\n if (isString(key)) {\n return hashStr(key);\n } else if (isReference()) {\n if (sizeof() == 4) return hash32(changetype(key));\n if (sizeof() == 8) return hash64(changetype(key));\n } else if (isFloat()) {\n if (sizeof() == 4) return hash32(reinterpret(key));\n if (sizeof() == 8) return hash64(reinterpret(key));\n } else {\n if (sizeof() == 1) return hash8 (key);\n if (sizeof() == 2) return hash16(key);\n if (sizeof() == 4) return hash32(key);\n if (sizeof() == 8) return hash64(key);\n }\n unreachable();\n}\n\n// FNV-1a 32-bit as a starting point, see: http://isthe.com/chongo/tech/comp/fnv/\n\nconst FNV_OFFSET: u32 = 2166136261;\nconst FNV_PRIME: u32 = 16777619;\n\nfunction hash8(key: u32): u32 {\n return (FNV_OFFSET ^ key) * FNV_PRIME;\n}\n\nfunction hash16(key: u32): u32 {\n var v = FNV_OFFSET;\n v = (v ^ ( key & 0xff)) * FNV_PRIME;\n v = (v ^ ( key >> 8 )) * FNV_PRIME;\n return v;\n}\n\nfunction hash32(key: u32): u32 {\n var v = FNV_OFFSET;\n v = (v ^ ( key & 0xff)) * FNV_PRIME;\n v = (v ^ ((key >> 8) & 0xff)) * FNV_PRIME;\n v = (v ^ ((key >> 16) & 0xff)) * FNV_PRIME;\n v = (v ^ ( key >> 24 )) * FNV_PRIME;\n return v;\n}\n\nfunction hash64(key: u64): u32 {\n var l = key;\n var h = (key >>> 32);\n var v = FNV_OFFSET;\n v = (v ^ ( l & 0xff)) * FNV_PRIME;\n v = (v ^ ((l >> 8) & 0xff)) * FNV_PRIME;\n v = (v ^ ((l >> 16) & 0xff)) * FNV_PRIME;\n v = (v ^ ( l >> 24 )) * FNV_PRIME;\n v = (v ^ ( h & 0xff)) * FNV_PRIME;\n v = (v ^ ((h >> 8) & 0xff)) * FNV_PRIME;\n v = (v ^ ((h >> 16) & 0xff)) * FNV_PRIME;\n v = (v ^ ( h >> 24 )) * FNV_PRIME;\n return v;\n}\n\nfunction hashStr(key: string): u32 {\n var v = FNV_OFFSET;\n for (let i: usize = 0, k: usize = key.length << 1; i < k; ++i) {\n v = (v ^ load(changetype(key) + i, HEADER_SIZE_STR)) * FNV_PRIME;\n }\n return v;\n}\n',"internal/string":'import {\n MAX_SIZE_32\n} from "./allocator";\n\nimport {\n String\n} from "../string";\n\n/** Size of a String header. */\nexport const HEADER_SIZE = (offsetof() + 1) & ~1; // 2 byte aligned\n\n/** Maximum length of a String. */\nexport const MAX_LENGTH = (MAX_SIZE_32 - HEADER_SIZE) >>> 1;\n\n/** Singleton empty String. */\nexport const EMPTY = changetype(""); // TODO: is this a bad idea with \'===\' in place?\n\n/** Allocates a raw String with uninitialized contents. */\nexport function allocate(length: i32): String {\n assert(length > 0 && length <= MAX_LENGTH);\n var buffer = allocate_memory(HEADER_SIZE + (length << 1));\n store(buffer, length);\n return changetype(buffer);\n}\n\nexport function 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 }\n default: return false;\n }\n}\n\nexport const 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 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, HEADER_SIZE);\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, HEADER_SIZE);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEADER_SIZE);\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, HEADER_SIZE)) {\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 }\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, HEADER_SIZE);\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',"internal/typedarray":'import {\n HEADER_SIZE as HEADER_SIZE_AB,\n MAX_BLENGTH,\n allocUnsafe,\n loadUnsafeWithOffset,\n storeUnsafeWithOffset\n} from "./arraybuffer";\n\n/** Typed array base class. Not a global object. */\nexport abstract class TypedArray {\n\n readonly buffer: ArrayBuffer;\n readonly byteOffset: i32;\n readonly byteLength: i32;\n\n constructor(length: i32) {\n const MAX_LENGTH = MAX_BLENGTH / sizeof();\n if (length > MAX_LENGTH) throw new RangeError("Invalid typed array length");\n var byteLength = length << alignof();\n var buffer = allocUnsafe(byteLength);\n set_memory(changetype(buffer) + HEADER_SIZE_AB, 0, byteLength);\n this.buffer = buffer;\n this.byteOffset = 0;\n this.byteLength = byteLength;\n }\n\n get length(): i32 {\n return (this.byteLength - this.byteOffset) >> alignof();\n }\n\n @operator("[]")\n protected __get(index: i32): T {\n var byteOffset = this.byteOffset;\n var elementLength = (this.byteLength - byteOffset) >>> alignof();\n if (index >= elementLength) throw new Error("Index out of bounds");\n return loadUnsafeWithOffset(this.buffer, index, byteOffset);\n }\n\n @operator("{}")\n protected __unchecked_get(index: i32): T {\n return loadUnsafeWithOffset(this.buffer, index, this.byteOffset);\n }\n\n @operator("[]=")\n protected __set(index: i32, value: V): void {\n var byteOffset = this.byteOffset;\n var elementLength = (this.byteLength - byteOffset) >>> alignof();\n if (index >= elementLength) throw new Error("Index out of bounds");\n storeUnsafeWithOffset(this.buffer, index, value, byteOffset);\n }\n\n @operator("{}=")\n protected __unchecked_set(index: i32, value: V): void {\n storeUnsafeWithOffset(this.buffer, index, value, this.byteOffset);\n }\n\n // copyWithin(target: i32, start: i32, end: i32 = this.length): this\n\n @inline\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): TypedArray {\n var length = this.length;\n if (begin < 0) begin = max(length + begin, 0);\n else begin = min(begin, length);\n if (end < 0) end = max(length + end, begin);\n else end = max(min(end, length), begin);\n var slice = allocate_memory(offsetof());\n store(slice, this.buffer, offsetof("buffer"));\n store(slice, begin << alignof(), offsetof("byteOffset"));\n store(slice, end << alignof(), offsetof("byteLength"));\n return changetype(slice);\n }\n}\n',iterator:"// export abstract class Iterator {\n// abstract get done(): bool;\n// abstract next(): T;\n// }\n",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 (let 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 (let 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",math:'export declare namespace JSMath {\n\n export const E: f64;\n export const LN2: f64;\n export const LN10: f64;\n export const LOG2E: f64;\n export const LOG10E: f64;\n export const PI: f64;\n export const SQRT1_2: f64;\n export const SQRT2: f64;\n\n export function abs(x: f64): f64;\n export function acos(x: f64): f64;\n export function acosh(x: f64): f64;\n export function asin(x: f64): f64;\n export function asinh(x: f64): f64;\n export function atan(x: f64): f64;\n export function atan2(y: f64, x: f64): f64;\n export function atanh(x: f64): f64;\n export function cbrt(x: f64): f64;\n export function ceil(x: f64): f64;\n export function clz32(x: f64): f64;\n export function cos(x: f64): f64;\n export function cosh(x: f64): f64;\n export function exp(x: f64): f64;\n export function expm1(x: f64): f64;\n export function floor(x: f64): f64;\n export function fround(x: f64): f32;\n export function hypot(value1: f64, value2: f64): f64; // TODO: rest\n export function imul(a: f64, b: f64): f64;\n export function log(x: f64): f64;\n export function log10(x: f64): f64;\n export function log1p(x: f64): f64;\n export function log2(x: f64): f64;\n export function max(value1: f64, value2: f64): f64; // TODO: rest\n export function min(value1: f64, value2: f64): f64; // TODO: rest\n export function pow(base: f64, exponent: f64): f64;\n export function random(): f64;\n export function round(x: f64): f64;\n export function sign(x: f64): f64;\n export function sin(x: f64): f64;\n export function sinh(x: f64): f64;\n export function sqrt(x: f64): f64;\n export function tan(x: f64): f64;\n export function tanh(x: f64): f64;\n export function trunc(x: f64): f64;\n}\n\nimport {\n abs as builtin_abs,\n ceil as builtin_ceil,\n clz as builtin_clz,\n copysign as builtin_copysign,\n floor as builtin_floor,\n max as builtin_max,\n min as builtin_min,\n sqrt as builtin_sqrt,\n trunc as builtin_trunc\n} from "./builtins";\n\n// SUN COPYRIGHT NOTICE\n//\n// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.\n// Developed at SunPro, a Sun Microsystems, Inc. business.\n// Permission to use, copy, modify, and distribute this software\n// is freely granted, provided that this notice is preserved.\n//\n// Applies to all functions marked with a comment referring here.\n\n// TODO: sin, cos, tan\n\nfunction R(z: f64): f64 { // Rational approximation of (asin(x)-x)/x^3\n const // see: musl/src/math/asin.c and SUN COPYRIGHT NOTICE above\n pS0 = reinterpret(0x3FC5555555555555), // 1.66666666666666657415e-01\n pS1 = reinterpret(0xBFD4D61203EB6F7D), // -3.25565818622400915405e-01\n pS2 = reinterpret(0x3FC9C1550E884455), // 2.01212532134862925881e-01\n pS3 = reinterpret(0xBFA48228B5688F3B), // -4.00555345006794114027e-02\n pS4 = reinterpret(0x3F49EFE07501B288), // 7.91534994289814532176e-04\n pS5 = reinterpret(0x3F023DE10DFDF709), // 3.47933107596021167570e-05\n qS1 = reinterpret(0xC0033A271C8A2D4B), // -2.40339491173441421878e+00\n qS2 = reinterpret(0x40002AE59C598AC8), // 2.02094576023350569471e+00\n qS3 = reinterpret(0xBFE6066C1B8D0159), // -6.88283971605453293030e-01\n qS4 = reinterpret(0x3FB3B8C5B12E9282); // 7.70381505559019352791e-02\n var p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 + z * (pS4 + z * pS5)))));\n var q = 1.0 + z * (qS1 + z * (qS2 + z * (qS3 + z * qS4)));\n return p / q;\n}\n\nfunction expo2(x: f64): f64 { // exp(x)/2 for x >= log(DBL_MAX)\n const // see: musl/src/math/__expo2.c\n k = 2043,\n kln2 = reinterpret(0x40962066151ADD8B); // 0x1.62066151add8bp+10\n var scale = reinterpret(((0x3FF + k / 2) << 20) << 32);\n return NativeMath.exp(x - kln2) * scale * scale;\n}\n\nvar random_seeded = false;\nvar random_state0: u64;\nvar random_state1: u64;\n\nfunction murmurHash3(h: u64): u64 { // Force all bits of a hash block to avalanche\n h ^= h >> 33; // see: https://github.com/aappleby/smhasher\n h *= 0xFF51AFD7ED558CCD;\n h ^= h >> 33;\n h *= 0xC4CEB9FE1A85EC53;\n h ^= h >> 33;\n return h;\n}\n\nexport namespace NativeMath {\n\n export const E = reinterpret(0x4005BF0A8B145769); // 2.7182818284590452354\n export const LN2 = reinterpret(0x3FE62E42FEFA39EF); // 0.69314718055994530942\n export const LN10 = reinterpret(0x40026BB1BBB55516); // 2.30258509299404568402\n export const LOG2E = reinterpret(0x3FF71547652B82FE); // 1.4426950408889634074\n export const LOG10E = reinterpret(0x3FDBCB7B1526E50E); // 0.43429448190325182765\n export const PI = reinterpret(0x400921FB54442D18); // 3.14159265358979323846\n export const SQRT1_2 = reinterpret(0x3FE6A09E667F3BCD); // 0.70710678118654752440\n export const SQRT2 = reinterpret(0x3FF6A09E667F3BCD); // 1.41421356237309504880\n\n @inline\n export function abs(x: f64): f64 {\n return builtin_abs(x);\n }\n\n export function acos(x: f64): f64 { // see: musl/src/math/acos.c and SUN COPYRIGHT NOTICE above\n const\n pio2_hi = reinterpret(0x3FF921FB54442D18), // 1.57079632679489655800e+00\n pio2_lo = reinterpret(0x3C91A62633145C07), // 6.12323399573676603587e-17\n Ox1p_120f = reinterpret(0x03800000);\n var hx = (reinterpret(x) >> 32);\n var ix = hx & 0x7FFFFFFF;\n if (ix >= 0x3FF00000) {\n let lx = reinterpret(x);\n if ((ix - 0x3FF00000 | lx) == 0) {\n if (hx >> 31) return 2 * pio2_hi + Ox1p_120f;\n return 0;\n }\n return 0 / (x - x);\n }\n if (ix < 0x3FE00000) {\n if (ix <= 0x3C600000) return pio2_hi + Ox1p_120f;\n return pio2_hi - (x - (pio2_lo - x * R(x * x)));\n }\n var s: f64, w: f64, z: f64;\n if (hx >> 31) {\n z = (1.0 + x) * 0.5;\n s = builtin_sqrt(z);\n w = R(z) * s - pio2_lo;\n return 2 * (pio2_hi - (s + w));\n }\n z = (1.0 - x) * 0.5;\n s = builtin_sqrt(z);\n var df = reinterpret(reinterpret(s) & 0xFFFFFFFF00000000);\n var c = (z - df * df) / (s + df);\n w = R(z) * s + c;\n return 2 * (df + w);\n }\n\n export function acosh(x: f64): f64 { // see: musl/src/math/acosh.c\n const s = reinterpret(0x3FE62E42FEFA39EF);\n var e = reinterpret(x) >> 52 & 0x7FF;\n if (e < 0x3FF + 1) return log1p(x - 1 + builtin_sqrt((x - 1) * (x - 1) + 2 * (x - 1)));\n if (e < 0x3FF + 26) return log(2 * x - 1 / (x + builtin_sqrt(x * x - 1)));\n return log(x) + s;\n }\n\n export function asin(x: f64): f64 { // see: musl/src/math/asin.c and SUN COPYRIGHT NOTICE above\n const\n pio2_hi = reinterpret(0x3FF921FB54442D18), // 1.57079632679489655800e+00\n pio2_lo = reinterpret(0x3C91A62633145C07), // 6.12323399573676603587e-17\n Ox1p_120f = reinterpret(0x03800000);\n var hx = (reinterpret(x) >> 32);\n var ix = hx & 0x7FFFFFFF;\n if (ix >= 0x3FF00000) {\n let lx = reinterpret(x);\n if ((ix - 0x3FF00000 | lx) == 0) return x * pio2_hi + Ox1p_120f;\n return 0 / (x - x);\n }\n if (ix < 0x3FE00000) {\n if (ix < 0x3E500000 && ix >= 0x00100000) return x;\n return x + x * R(x * x);\n }\n var z = (1.0 - builtin_abs(x)) * 0.5;\n var s = builtin_sqrt(z);\n var r = R(z);\n if (ix >= 0x3FEF3333) x = pio2_hi - (2 * (s + s * r) - pio2_lo);\n else {\n let f = reinterpret(reinterpret(s) & 0xFFFFFFFF00000000);\n let c = (z - f * f) / (s + f);\n x = 0.5 * pio2_hi - (2 * s * r - (pio2_lo - 2 * c) - (0.5 * pio2_hi - 2 * f));\n }\n if (hx >> 31) return -x;\n return x;\n }\n\n export function asinh(x: f64): f64 { // see: musl/src/math/asinh.c\n const c = reinterpret(0x3FE62E42FEFA39EF); // 0.693147180559945309417232121458176568\n var u = reinterpret(x);\n var e = u >> 52 & 0x7FF;\n var s = u >> 63;\n u &= 0x7FFFFFFFFFFFFFFF;\n x = reinterpret(u);\n if (e >= 0x3FF + 26) x = log(x) + c;\n else if (e >= 0x3FF + 1) x = log(2 * x + 1 / (builtin_sqrt(x * x + 1) + x));\n else if (e >= 0x3FF - 26) x = log1p(x + x * x / (builtin_sqrt(x * x + 1) + 1));\n return s ? -x : x;\n }\n\n export function atan(x: f64): f64 { // see musl/src/math/atan.c and SUN COPYRIGHT NOTICE above\n const\n atanhi0 = reinterpret(0x3FDDAC670561BB4F), // 4.63647609000806093515e-01\n atanhi1 = reinterpret(0x3FE921FB54442D18), // 7.85398163397448278999e-01\n atanhi2 = reinterpret(0x3FEF730BD281F69B), // 9.82793723247329054082e-01\n atanhi3 = reinterpret(0x3FF921FB54442D18), // 1.57079632679489655800e+00\n atanlo0 = reinterpret(0x3C7A2B7F222F65E2), // 2.26987774529616870924e-17\n atanlo1 = reinterpret(0x3C81A62633145C07), // 3.06161699786838301793e-17\n atanlo2 = reinterpret(0x3C7007887AF0CBBD), // 1.39033110312309984516e-17\n atanlo3 = reinterpret(0x3C91A62633145C07), // 6.12323399573676603587e-17\n aT0 = reinterpret(0x3FD555555555550D), // 3.33333333333329318027e-01\n aT1 = reinterpret(0xBFC999999998EBC4), // -1.99999999998764832476e-01\n aT2 = reinterpret(0x3FC24924920083FF), // 1.42857142725034663711e-01\n aT3 = reinterpret(0xBFBC71C6FE231671), // -1.11111104054623557880e-01,\n aT4 = reinterpret(0x3FB745CDC54C206E), // 9.09088713343650656196e-02\n aT5 = reinterpret(0xBFB3B0F2AF749A6D), // -7.69187620504482999495e-02\n aT6 = reinterpret(0x3FB10D66A0D03D51), // 6.66107313738753120669e-02\n aT7 = reinterpret(0xBFADDE2D52DEFD9A), // -5.83357013379057348645e-02\n aT8 = reinterpret(0x3FA97B4B24760DEB), // 4.97687799461593236017e-02\n aT9 = reinterpret(0xBFA2B4442C6A6C2F), // -3.65315727442169155270e-02\n aT10 = reinterpret(0x3F90AD3AE322DA11), // 1.62858201153657823623e-02\n Ox1p_120f = reinterpret(0x03800000);\n var ix = (reinterpret(x) >> 32);\n var sign_ = ix >> 31;\n ix &= 0x7FFFFFFF;\n var z: f64;\n if (ix >= 0x44100000) {\n if (isNaN(x)) return x;\n z = atanhi3 + Ox1p_120f;\n return sign_ ? -z : z;\n }\n var id: i32;\n if (ix < 0x3FDC0000) {\n if (ix < 0x3E400000) return x;\n id = -1;\n } else {\n x = builtin_abs(x);\n if (ix < 0x3FF30000) {\n if (ix < 0x3FE60000) {\n id = 0;\n x = (2.0 * x - 1.0) / (2.0 + x);\n } else {\n id = 1;\n x = (x - 1.0) / (x + 1.0);\n }\n } else {\n if (ix < 0x40038000) {\n id = 2;\n x = (x - 1.5) / (1.0 + 1.5 * x);\n } else {\n id = 3;\n x = -1.0 / x;\n }\n }\n }\n z = x * x;\n var w = z * z;\n var s1 = z * (aT0 + w * (aT2 + w * (aT4 + w * (aT6 + w * (aT8 + w * aT10)))));\n var s2 = w * (aT1 + w * (aT3 + w * (aT5 + w * (aT7 + w * aT9))));\n if (id < 0) return x - x * (s1 + s2);\n switch (id) {\n case 0: { z = atanhi0 - (x * (s1 + s2) - atanlo0 - x); break; }\n case 1: { z = atanhi1 - (x * (s1 + s2) - atanlo1 - x); break; }\n case 2: { z = atanhi2 - (x * (s1 + s2) - atanlo2 - x); break; }\n case 3: { z = atanhi3 - (x * (s1 + s2) - atanlo3 - x); break; }\n default: unreachable();\n }\n return sign_ ? -z : z;\n }\n\n export function atanh(x: f64): f64 { // see: musl/src/math/atanh.c\n var u = reinterpret(x);\n var e = u >> 52 & 0x7FF;\n var s = u >> 63;\n u &= 0x7FFFFFFFFFFFFFFF;\n var y = reinterpret(u);\n if (e < 0x3FF - 1) {\n if (e >= 0x3FF - 32) y = 0.5 * log1p(2 * y + 2 * y * y / (1 - y));\n } else {\n y = 0.5 * log1p(2 * (y / (1 - y)));\n }\n return s ? -y : y;\n }\n\n export function atan2(y: f64, x: f64): f64 { // see: musl/src/math/atan2.c and SUN COPYRIGHT NOTICE above\n const\n pi = reinterpret(0x400921FB54442D18), // 3.1415926535897931160E+00\n pi_lo = reinterpret(0x3CA1A62633145C07); // 1.2246467991473531772E-16\n if (isNaN(x) || isNaN(y)) return x + y;\n var u = reinterpret(x);\n var ix = (u >> 32);\n var lx = u;\n u = reinterpret(y);\n var iy = (u >> 32);\n var ly = u;\n if ((ix - 0x3FF00000 | lx) == 0) return atan(y);\n var m = ((iy >> 31) & 1) | ((ix >> 30) & 2);\n ix = ix & 0x7FFFFFFF;\n iy = iy & 0x7FFFFFFF;\n if ((iy | ly) == 0) {\n switch (m) {\n case 0:\n case 1: return y;\n case 2: return PI;\n case 3: return -PI;\n }\n }\n if ((ix | lx) == 0) return m & 1 ? -pi / 2 : pi / 2;\n if (ix == 0x7FF00000) {\n if (iy == 0x7FF00000) {\n switch (m) {\n case 0: return pi / 4;\n case 1: return -pi / 4;\n case 2: return 3 * pi / 4;\n case 3: return -3 * pi / 4;\n }\n } else {\n switch (m) {\n case 0: return 0.0;\n case 1: return -0.0;\n case 2: return pi;\n case 3: return -pi;\n }\n }\n }\n var z: f64;\n if (ix + (64 << 20) < iy || iy == 0x7FF00000) return m & 1 ? -pi / 2 : pi / 2;\n if ((m & 2) && iy + (64 << 20) < ix) z = 0;\n else z = atan(builtin_abs(y / x));\n switch (m) {\n case 0: return z;\n case 1: return -z;\n case 2: return pi - (z - pi_lo);\n case 3: return (z - pi_lo) - pi;\n }\n unreachable();\n return 0;\n }\n\n export function cbrt(x: f64): f64 { // see: musl/src/math/cbrt.c and SUN COPYRIGHT NOTICE above\n const\n B1 = 715094163,\n B2 = 696219795,\n P0 = reinterpret(0x3FFE03E60F61E692), // 1.87595182427177009643\n P1 = reinterpret(0xBFFE28E092F02420), // -1.88497979543377169875\n P2 = reinterpret(0x3FF9F1604A49D6C2), // 1.621429720105354466140\n P3 = reinterpret(0xBFE844CBBEE751D9), // -0.758397934778766047437\n P4 = reinterpret(0x3FC2B000D4E4EDD7), // 0.145996192886612446982\n Ox1p54 = reinterpret(0x4350000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32) & 0x7FFFFFFF;\n if (hx >= 0x7FF00000) return x + x;\n if (hx < 0x00100000) {\n u = reinterpret(x * Ox1p54);\n hx = (u >> 32) & 0x7FFFFFFF;\n if (hx == 0) return x;\n hx = hx / 3 + B2;\n } else {\n hx = hx / 3 + B1;\n }\n u &= 1 << 63;\n u |= hx << 32;\n var t = reinterpret(u);\n var r = (t * t) * (t / x);\n t = t * ((P0 + r * (P1 + r * P2)) + ((r * r) * r) * (P3 + r * P4));\n t = reinterpret((reinterpret(t) + 0x80000000) & 0xFFFFFFFFC0000000);\n var s = t * t;\n r = x / s;\n var w = t + t;\n r = (r - t) / (w + r);\n t = t + t * r;\n return t;\n }\n\n @inline\n export function ceil(x: f64): f64 {\n return builtin_ceil(x);\n }\n\n @inline\n export function clz32(x: f64): f64 {\n return builtin_clz(x);\n }\n\n export function cos(x: f64): f64 { // TODO\n unreachable();\n return 0;\n }\n\n export function cosh(x: f64): f64 { // see: musl/src/math/cosh.c\n var u = reinterpret(x);\n u &= 0x7FFFFFFFFFFFFFFF;\n x = reinterpret(u);\n var w = (u >> 32);\n var t: f64;\n if (w < 0x3FE62E42) {\n if (w < 0x3FF00000 - (26 << 20)) return 1;\n t = expm1(x);\n return 1 + t * t / (2 * (1 + t));\n }\n if (w < 0x40862E42) {\n t = exp(x);\n return 0.5 * (t + 1 / t);\n }\n t = expo2(x);\n return t;\n }\n\n export function exp(x: f64): f64 { // see: musl/src/math/exp.c and SUN COPYRIGHT NOTICE above\n const\n ln2hi = reinterpret(0x3FE62E42FEE00000), // 6.93147180369123816490e-01\n ln2lo = reinterpret(0x3DEA39EF35793C76), // 1.90821492927058770002e-10\n invln2 = reinterpret(0x3FF71547652B82FE), // 1.44269504088896338700e+00\n P1 = reinterpret(0x3FC555555555553E), // 1.66666666666666019037e-01\n P2 = reinterpret(0xBF66C16C16BEBD93), // -2.77777777770155933842e-03\n P3 = reinterpret(0x3F11566AAF25DE2C), // 6.61375632143793436117e-05\n P4 = reinterpret(0xBEBBBD41C5D26BF1), // -1.65339022054652515390e-06\n P5 = reinterpret(0x3E66376972BEA4D0), // 4.13813679705723846039e-08\n overflow = reinterpret(0x40862E42FEFA39EF), // 709.782712893383973096\n underflow = reinterpret(0xC0874910D52D3051), // -745.13321910194110842\n Ox1p1023 = reinterpret(0x7FE0000000000000);\n var hx = (reinterpret(x) >> 32);\n var sign_ = (hx >> 31);\n hx &= 0x7FFFFFFF;\n if (hx >= 0x4086232B) {\n if (isNaN(x)) return x;\n if (x > overflow) {\n x *= Ox1p1023;\n return x;\n }\n if (x < underflow) return 0;\n }\n var hi: f64, lo: f64 = 0;\n var k: i32 = 0;\n if (hx > 0x3FD62E42) {\n if (hx >= 0x3FF0A2B2) {\n k = (invln2 * x + builtin_copysign(0.5, x));\n } else {\n k = 1 - sign_ - sign_;\n }\n hi = x - k * ln2hi;\n lo = k * ln2lo;\n x = hi - lo;\n } else if (hx > 0x3E300000) {\n hi = x;\n } else return 1.0 + x;\n var xx = x * x;\n var c = x - xx * (P1 + xx * (P2 + xx * (P3 + xx * (P4 + xx * P5))));\n var y = 1.0 + (x * c / (2 - c) - lo + hi);\n if (k == 0) return y;\n return scalbn(y, k);\n }\n\n export function expm1(x: f64): f64 { // see: musl/src/math/expm1.c and SUN COPYRIGHT NOTICE above\n const\n o_threshold = reinterpret(0x40862E42FEFA39EF), // 7.09782712893383973096e+02\n ln2_hi = reinterpret(0x3FE62E42FEE00000), // 6.93147180369123816490e-01\n ln2_lo = reinterpret(0x3DEA39EF35793C76), // 1.90821492927058770002e-10\n invln2 = reinterpret(0x3FF71547652B82FE), // 1.44269504088896338700e+00\n Q1 = reinterpret(0xBFA11111111110F4), // -3.33333333333331316428e-02\n Q2 = reinterpret(0x3F5A01A019FE5585), // 1.58730158725481460165e-03\n Q3 = reinterpret(0xBF14CE199EAADBB7), // -7.93650757867487942473e-05\n Q4 = reinterpret(0x3ED0CFCA86E65239), // 4.00821782732936239552e-06\n Q5 = reinterpret(0xBE8AFDB76E09C32D), // -2.01099218183624371326e-07\n Ox1p1023 = reinterpret(0x7FE0000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32 & 0x7FFFFFFF);\n var k = 0, sign_ = (u >> 63);\n if (hx >= 0x4043687A) {\n if (isNaN(x)) return x;\n if (sign_) return -1;\n if (x > o_threshold) {\n x *= Ox1p1023;\n return x;\n }\n }\n var c = 0.0, t: f64;\n if (hx > 0x3FD62E42) {\n let hi: f64, lo: f64;\n if (hx < 0x3FF0A2B2) {\n if (!sign_) {\n hi = x - ln2_hi;\n lo = ln2_lo;\n k = 1;\n } else {\n hi = x + ln2_hi;\n lo = -ln2_lo;\n k = -1;\n }\n } else {\n k = (invln2 * x + (sign_ ? -0.5 : 0.5));\n t = k;\n hi = x - t * ln2_hi;\n lo = t * ln2_lo;\n }\n x = hi - lo;\n c = (hi - x) - lo;\n } else if (hx < 0x3C900000) return x;\n var hfx = 0.5 * x;\n var hxs = x * hfx;\n var r1 = 1.0 + hxs * (Q1 + hxs * (Q2 + hxs * (Q3 + hxs * (Q4 + hxs * Q5))));\n t = 3.0 - r1 * hfx;\n var e = hxs * ((r1 - t) / (6.0 - x * t));\n if (k == 0) return x - (x * e - hxs);\n e = x * (e - c) - c;\n e -= hxs;\n if (k == -1) return 0.5 * (x - e) - 0.5;\n if (k == 1) {\n if (x < -0.25) return -2.0 * (e - (x + 0.5));\n return 1.0 + 2.0 * (x - e);\n }\n u = (0x3FF + k) << 52;\n var twopk = reinterpret(u);\n var y: f64;\n if (k < 0 || k > 56) {\n y = x - e + 1.0;\n if (k == 1024) y = y * 2.0 * Ox1p1023;\n else y = y * twopk;\n return y - 1.0;\n }\n u = (0x3FF - k) << 52;\n if (k < 20) y = (x - e + (1 - reinterpret(u))) * twopk;\n else y = (x - (e + reinterpret(u)) + 1) * twopk;\n return y;\n }\n\n @inline\n export function floor(x: f64): f64 {\n return builtin_floor(x);\n }\n\n @inline\n export function fround(x: f64): f32 {\n return x;\n }\n\n export function hypot(x: f64, y: f64): f64 { // see: musl/src/math/hypot.c\n const\n SPLIT = reinterpret(0x41A0000000000000) + 1, // 0x1p27 + 1\n Ox1p700 = reinterpret(0x6BB0000000000000),\n Ox1p_700 = reinterpret(0x1430000000000000);\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n ux &= 0x7FFFFFFFFFFFFFFF;\n uy &= 0x7FFFFFFFFFFFFFFF;\n if (ux < uy) {\n let ut = ux;\n ux = uy;\n uy = ut;\n }\n var ex = (ux >> 52);\n var ey = (uy >> 52);\n y = reinterpret(uy);\n if (ey == 0x7FF) return y;\n x = reinterpret(ux);\n if (ex == 0x7FF || uy == 0) return x;\n if (ex - ey > 64) return x + y;\n var z = 1.0;\n if (ex > 0x3FF + 510) {\n z = Ox1p700;\n x *= Ox1p_700;\n y *= Ox1p_700;\n } else if (ey < 0x3FF - 450) {\n z = Ox1p_700;\n x *= Ox1p700;\n y *= Ox1p700;\n }\n var c = x * SPLIT;\n var h = x - c + c;\n var l = x - h;\n var hx = x * x;\n var lx = h * h - hx + 2 * h * l + l * l;\n c = y * SPLIT;\n h = y - c + c;\n l = y - h;\n var hy = y * y;\n var ly = h * h - hy + 2 * h * l + l * l;\n return z * builtin_sqrt(ly + lx + hy + hx);\n }\n\n export function imul(x: f64, y: f64): f64 {\n return (x * y);\n }\n\n export function log(x: f64): f64 { // see: musl/src/math/log.c and SUN COPYRIGHT NOTICE above\n const\n ln2_hi = reinterpret(0x3FE62E42FEE00000), // 6.93147180369123816490e-01\n ln2_lo = reinterpret(0x3DEA39EF35793C76), // 1.90821492927058770002e-10\n Lg1 = reinterpret(0x3FE5555555555593), // 6.666666666666735130e-01\n Lg2 = reinterpret(0x3FD999999997FA04), // 3.999999999940941908e-01\n Lg3 = reinterpret(0x3FD2492494229359), // 2.857142874366239149e-01\n Lg4 = reinterpret(0x3FCC71C51D8E78AF), // 2.222219843214978396e-01\n Lg5 = reinterpret(0x3FC7466496CB03DE), // 1.818357216161805012e-01\n Lg6 = reinterpret(0x3FC39A09D078C69F), // 1.531383769920937332e-01\n Lg7 = reinterpret(0x3FC2F112DF3E5244), // 1.479819860511658591e-01\n Ox1p54 = reinterpret(0x4350000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32);\n var k = 0;\n if (hx < 0x00100000 || (hx >> 31)) {\n if (u << 1 == 0) return -1 / (x * x);\n if (hx >> 31) return (x - x) / 0.0;\n k -= 54;\n x *= Ox1p54;\n u = reinterpret(x);\n hx = (u >> 32);\n } else if (hx >= 0x7FF00000) return x;\n else if (hx == 0x3FF00000 && u << 32 == 0) return 0;\n hx += 0x3FF00000 - 0x3FE6A09E;\n k += (hx >> 20) - 0x3FF;\n hx = (hx & 0x000FFFFF) + 0x3FE6A09E;\n u = hx << 32 | (u & 0xFFFFFFFF);\n x = reinterpret(u);\n var f = x - 1.0;\n var hfsq = 0.5 * f * f;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * (Lg4 + w * Lg6));\n var t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));\n var r = t2 + t1;\n var dk = k;\n return s * (hfsq + r) + dk * ln2_lo - hfsq + f + dk * ln2_hi;\n }\n\n export function log10(x: f64): f64 { // see: musl/src/math/log10.c and SUN COPYRIGHT NOTICE above\n const\n ivln10hi = reinterpret(0x3FDBCB7B15200000), // 4.34294481878168880939e-01\n ivln10lo = reinterpret(0x3DBB9438CA9AADD5), // 2.50829467116452752298e-11\n log10_2hi = reinterpret(0x3FD34413509F6000), // 3.01029995663611771306e-01\n log10_2lo = reinterpret(0x3D59FEF311F12B36), // 3.69423907715893078616e-13\n Lg1 = reinterpret(0x3FE5555555555593), // 6.666666666666735130e-01\n Lg2 = reinterpret(0x3FD999999997FA04), // 3.999999999940941908e-01\n Lg3 = reinterpret(0x3FD2492494229359), // 2.857142874366239149e-01\n Lg4 = reinterpret(0x3FCC71C51D8E78AF), // 2.222219843214978396e-01\n Lg5 = reinterpret(0x3FC7466496CB03DE), // 1.818357216161805012e-01\n Lg6 = reinterpret(0x3FC39A09D078C69F), // 1.531383769920937332e-01\n Lg7 = reinterpret(0x3FC2F112DF3E5244), // 1.479819860511658591e-01\n Ox1p54 = reinterpret(0x4350000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32);\n var k = 0;\n if (hx < 0x00100000 || (hx >> 31)) {\n if (u << 1 == 0) return -1 / (x * x);\n if (hx >> 31) return (x - x) / 0.0;\n k -= 54;\n x *= Ox1p54;\n u = reinterpret(x);\n hx = (u >> 32);\n } else if (hx >= 0x7FF00000) return x;\n else if (hx == 0x3FF00000 && u << 32 == 0) return 0;\n hx += 0x3FF00000 - 0x3FE6A09E;\n k += (hx >> 20) - 0x3FF;\n hx = (hx & 0x000FFFFF) + 0x3FE6A09E;\n u = hx << 32 | (u & 0xFFFFFFFF);\n x = reinterpret(u);\n var f = x - 1.0;\n var hfsq = 0.5 * f * f;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * (Lg4 + w * Lg6));\n var t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));\n var r = t2 + t1;\n var hi = f - hfsq;\n u = reinterpret(hi);\n u &= 0xFFFFFFFF00000000;\n hi = reinterpret(u);\n var lo = f - hi - hfsq + s * (hfsq + r);\n var val_hi = hi * ivln10hi;\n var dk = k;\n var y = dk * log10_2hi;\n var val_lo = dk * log10_2lo + (lo + hi) * ivln10lo + lo * ivln10hi;\n w = y + val_hi;\n val_lo += (y - w) + val_hi;\n val_hi = w;\n return val_lo + val_hi;\n }\n\n export function log1p(x: f64): f64 { // see: musl/src/math/log1p.c and SUN COPYRIGHT NOTICE above\n const\n ln2_hi = reinterpret(0x3FE62E42FEE00000), // 6.93147180369123816490e-01\n ln2_lo = reinterpret(0x3DEA39EF35793C76), // 1.90821492927058770002e-10\n Lg1 = reinterpret(0x3FE5555555555593), // 6.666666666666735130e-01\n Lg2 = reinterpret(0x3FD999999997FA04), // 3.999999999940941908e-01\n Lg3 = reinterpret(0x3FD2492494229359), // 2.857142874366239149e-01\n Lg4 = reinterpret(0x3FCC71C51D8E78AF), // 2.222219843214978396e-01\n Lg5 = reinterpret(0x3FC7466496CB03DE), // 1.818357216161805012e-01\n Lg6 = reinterpret(0x3FC39A09D078C69F), // 1.531383769920937332e-01\n Lg7 = reinterpret(0x3FC2F112DF3E5244); // 1.479819860511658591e-01\n var u = reinterpret(x);\n var hx = (u >> 32);\n var k = 1;\n var c = 0.0, f = 0.0;\n if (hx < 0x3FDA827A || (hx >> 31)) {\n if (hx >= 0xBFF00000) {\n if (x == -1) return x / 0.0;\n return (x - x) / 0.0;\n }\n if (hx << 1 < 0x3CA00000 << 1) return x;\n if (hx <= 0xBFD2BEC4) {\n k = 0;\n c = 0;\n f = x;\n }\n } else if (hx >= 0x7FF00000) return x;\n if (k) {\n u = reinterpret(1 + x);\n let hu = (u >> 32);\n hu += 0x3FF00000 - 0x3FE6A09E;\n k = (hu >> 20) - 0x3FF;\n if (k < 54) {\n let uf = reinterpret(u);\n c = k >= 2 ? 1 - (uf - x) : x - (uf - 1);\n c /= uf;\n } else c = 0;\n hu = (hu & 0x000FFFFF) + 0x3FE6A09E;\n u = hu << 32 | (u & 0xFFFFFFFF);\n f = reinterpret(u) - 1;\n }\n var hfsq = 0.5 * f * f;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * (Lg4 + w * Lg6));\n var t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));\n var r = t2 + t1;\n var dk = k;\n return s * (hfsq + r) + (dk * ln2_lo + c) - hfsq + f + dk * ln2_hi;\n }\n\n export function log2(x: f64): f64 { // see: musl/src/math/log2.c and SUN COPYRIGHT NOTICE above\n const\n ivln2hi = reinterpret(0x3FF7154765200000), // 1.44269504072144627571e+00\n ivln2lo = reinterpret(0x3DE705FC2EEFA200), // 1.67517131648865118353e-10\n Lg1 = reinterpret(0x3FE5555555555593), // 6.666666666666735130e-01\n Lg2 = reinterpret(0x3FD999999997FA04), // 3.999999999940941908e-01\n Lg3 = reinterpret(0x3FD2492494229359), // 2.857142874366239149e-01\n Lg4 = reinterpret(0x3FCC71C51D8E78AF), // 2.222219843214978396e-01\n Lg5 = reinterpret(0x3FC7466496CB03DE), // 1.818357216161805012e-01\n Lg6 = reinterpret(0x3FC39A09D078C69F), // 1.531383769920937332e-01\n Lg7 = reinterpret(0x3FC2F112DF3E5244), // 1.479819860511658591e-01\n Ox1p54 = reinterpret(0x4350000000000000);\n var u = reinterpret(x);\n var hx = (u >> 32);\n var k = 0;\n if (hx < 0x00100000 || (hx >> 31)) {\n if (u << 1 == 0) return -1 / (x * x);\n if (hx >> 31) return (x - x) / 0.0;\n k -= 54;\n x *= Ox1p54;\n u = reinterpret(x);\n hx = (u >> 32);\n } else if (hx >= 0x7FF00000) return x;\n else if (hx == 0x3FF00000 && u << 32 == 0) return 0;\n hx += 0x3FF00000 - 0x3FE6A09E;\n k += (hx >> 20) - 0x3FF;\n hx = (hx & 0x000FFFFF) + 0x3FE6A09E;\n u = hx << 32 | (u & 0xFFFFFFFF);\n x = reinterpret(u);\n var f = x - 1.0;\n var hfsq = 0.5 * f * f;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * (Lg4 + w * Lg6));\n var t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));\n var r = t2 + t1;\n var hi = f - hfsq;\n u = reinterpret(hi);\n u &= 0xFFFFFFFF00000000;\n hi = reinterpret(u);\n var lo = f - hi - hfsq + s * (hfsq + r);\n var val_hi = hi * ivln2hi;\n var val_lo = (lo + hi) * ivln2lo + lo * ivln2hi;\n var y = k;\n w = y + val_hi;\n val_lo += (y - w) + val_hi;\n val_hi = w;\n return val_lo + val_hi;\n }\n\n @inline\n export function max(value1: f64, value2: f64): f64 {\n return builtin_max(value1, value2);\n }\n\n @inline\n export function min(value1: f64, value2: f64): f64 {\n return builtin_min(value1, value2);\n }\n\n export function pow(x: f64, y: f64): f64 { // see: musl/src/math/pow.c and SUN COPYRIGHT NOTICE above\n const\n dp_h1 = reinterpret(0x3FE2B80340000000), // 5.84962487220764160156e-01\n dp_l1 = reinterpret(0x3E4CFDEB43CFD006), // 1.35003920212974897128e-08\n two53 = reinterpret(0x4340000000000000), // 9007199254740992.0\n huge = reinterpret(0x7E37E43C8800759C), // 1e+300\n tiny = reinterpret(0x01A56E1FC2F8F359), // 1e-300\n L1 = reinterpret(0x3FE3333333333303), // 5.99999999999994648725e-01\n L2 = reinterpret(0x3FDB6DB6DB6FABFF), // 4.28571428578550184252e-01\n L3 = reinterpret(0x3FD55555518F264D), // 3.33333329818377432918e-01\n L4 = reinterpret(0x3FD17460A91D4101), // 2.72728123808534006489e-01\n L5 = reinterpret(0x3FCD864A93C9DB65), // 2.30660745775561754067e-01\n L6 = reinterpret(0x3FCA7E284A454EEF), // 2.06975017800338417784e-01\n P1 = reinterpret(0x3FC555555555553E), // 1.66666666666666019037e-01\n P2 = reinterpret(0xBF66C16C16BEBD93), // -2.77777777770155933842e-03\n P3 = reinterpret(0x3F11566AAF25DE2C), // 6.61375632143793436117e-05\n P4 = reinterpret(0xBEBBBD41C5D26BF1), // -1.65339022054652515390e-06\n P5 = reinterpret(0x3E66376972BEA4D0), // 4.13813679705723846039e-08\n lg2 = reinterpret(0x3FE62E42FEFA39EF), // 6.93147180559945286227e-01\n lg2_h = reinterpret(0x3FE62E4300000000), // 6.93147182464599609375e-01\n lg2_l = reinterpret(0xBE205C610CA86C39), // -1.90465429995776804525e-09\n ovt = reinterpret(0x3C971547652B82FE), // 8.0085662595372944372e-017\n cp = reinterpret(0x3FEEC709DC3A03FD), // 9.61796693925975554329e-01\n cp_h = reinterpret(0x3FEEC709E0000000), // 9.61796700954437255859e-01\n cp_l = reinterpret(0xBE3E2FE0145B01F5), // -7.02846165095275826516e-09\n ivln2 = reinterpret(0x3FF71547652B82FE), // 1.44269504088896338700e+00\n ivln2_h = reinterpret(0x3FF7154760000000), // 1.44269502162933349609e+00\n ivln2_l = reinterpret(0x3E54AE0BF85DDF44); // 1.92596299112661746887e-08\n var u_ = reinterpret(x);\n var hx = (u_ >> 32);\n var lx = u_;\n u_ = reinterpret(y);\n var hy = (u_ >> 32);\n var ly = u_;\n var ix = hx & 0x7FFFFFFF;\n var iy = hy & 0x7FFFFFFF;\n if ((iy | ly) == 0) return 1.0; // x**0 = 1, even if x is NaN\n // if (hx == 0x3FF00000 && lx == 0) return 1.0; // C: 1**y = 1, even if y is NaN, JS: NaN\n if ( // NaN if either arg is NaN\n ix > 0x7FF00000 || (ix == 0x7FF00000 && lx != 0) ||\n iy > 0x7FF00000 || (iy == 0x7FF00000 && ly != 0)\n ) return x + y;\n var yisint = 0, k: i32;\n if (hx < 0) {\n if (iy >= 0x43400000) yisint = 2;\n else if (iy >= 0x3FF00000) {\n k = (iy >> 20) - 0x3FF;\n if (k > 20) {\n let jj = ly >> (52 - k);\n if ((jj << (52 - k)) == ly) yisint = 2 - (jj & 1);\n } else if (ly == 0) {\n let jj = iy >> (20 - k);\n if ((jj << (20 - k)) == iy) yisint = 2 - (jj & 1);\n }\n }\n }\n if (ly == 0) {\n if (iy == 0x7FF00000) { // y is +-inf\n if (((ix - 0x3FF00000) | lx) == 0) return NaN; // C: (-1)**+-inf is 1, JS: NaN\n else if (ix >= 0x3FF00000) return hy >= 0 ? y : 0.0; // (|x|>1)**+-inf = inf,0\n else return hy >= 0 ? 0.0 : -y; // (|x|<1)**+-inf = 0,inf\n }\n if (iy == 0x3FF00000) {\n if (hy >= 0) return x;\n return 1 / x;\n }\n if (hy == 0x40000000) return x * x;\n if (hy == 0x3FE00000) {\n if (hx >= 0) return builtin_sqrt(x);\n }\n }\n var ax = builtin_abs(x), z: f64;\n if (lx == 0) {\n if (ix == 0x7FF00000 || ix == 0 || ix == 0x3FF00000) {\n z = ax;\n if (hy < 0) z = 1.0 / z;\n if (hx < 0) {\n if (((ix - 0x3FF00000) | yisint) == 0) z = (z - z) / (z - z);\n else if (yisint == 1) z = -z;\n }\n return z;\n }\n }\n var s = 1.0;\n if (hx < 0) {\n if (yisint == 0) return (x - x) / (x - x);\n if (yisint == 1) s = -1.0;\n }\n var t1: f64, t2: f64, p_h: f64, p_l: f64, r: f64, t: f64, u: f64, v: f64, w: f64;\n var j: i32, n: i32;\n if (iy > 0x41E00000) {\n if (iy > 0x43F00000) {\n if (ix <= 0x3FEFFFFF) return hy < 0 ? huge * huge : tiny * tiny;\n if (ix >= 0x3FF00000) return hy > 0 ? huge * huge : tiny * tiny;\n }\n if (ix < 0x3FEFFFFF) return hy < 0 ? s * huge * huge : s * tiny * tiny;\n if (ix > 0x3FF00000) return hy > 0 ? s * huge * huge : s * tiny * tiny;\n t = ax - 1.0;\n w = (t * t) * (0.5 - t * (0.3333333333333333333333 - t * 0.25));\n u = ivln2_h * t;\n v = t * ivln2_l - w * ivln2;\n t1 = u + v;\n t1 = reinterpret(reinterpret(t1) & 0xFFFFFFFF00000000);\n t2 = v - (t1 - u);\n } else {\n let ss: f64, s2: f64, s_h: f64, s_l: f64, t_h: f64, t_l: f64;\n n = 0;\n if (ix < 0x00100000) {\n ax *= two53;\n n -= 53;\n ix = (reinterpret(ax) >> 32);\n }\n n += (ix >> 20) - 0x3FF;\n j = ix & 0x000FFFFF;\n ix = j | 0x3FF00000;\n if (j <= 0x3988E) k = 0;\n else if (j < 0xBB67A) k = 1;\n else {\n k = 0;\n n += 1;\n ix -= 0x00100000;\n }\n ax = reinterpret(reinterpret(ax) & 0xFFFFFFFF | (ix << 32));\n let bp = select(1.5, 1.0, k);\n u = ax - bp;\n v = 1.0 / (ax + bp);\n ss = u * v;\n s_h = ss;\n s_h = reinterpret(reinterpret(s_h) & 0xFFFFFFFF00000000);\n t_h = reinterpret((((ix >> 1) | 0x20000000) + 0x00080000 + (k << 18)) << 32);\n t_l = ax - (t_h - bp);\n s_l = v * ((u - s_h * t_h) - s_h * t_l);\n s2 = ss * ss;\n r = s2 * s2 * (L1 + s2 * (L2 + s2 * (L3 + s2 * (L4 + s2 * (L5 + s2 * L6)))));\n r += s_l * (s_h + ss);\n s2 = s_h * s_h;\n t_h = 3.0 + s2 + r;\n t_h = reinterpret(reinterpret(t_h) & 0xFFFFFFFF00000000);\n t_l = r - ((t_h - 3.0) - s2);\n u = s_h * t_h;\n v = s_l * t_h + t_l * ss;\n p_h = u + v;\n p_h = reinterpret(reinterpret(p_h) & 0xFFFFFFFF00000000);\n p_l = v - (p_h - u);\n let z_h = cp_h * p_h;\n let dp_l = select(dp_l1, 0.0, k);\n let z_l = cp_l * p_h + p_l * cp + dp_l;\n t = n;\n let dp_h = select(dp_h1, 0.0, k);\n t1 = ((z_h + z_l) + dp_h) + t;\n t1 = reinterpret(reinterpret(t1) & 0xFFFFFFFF00000000);\n t2 = z_l - (((t1 - t) - dp_h) - z_h);\n }\n var y1 = y;\n y1 = reinterpret(reinterpret(y1) & 0xFFFFFFFF00000000);\n p_l = (y - y1) * t1 + y * t2;\n p_h = y1 * t1;\n z = p_l + p_h;\n u_ = reinterpret(z);\n j = (u_ >> 32);\n var i = u_;\n if (j >= 0x40900000) {\n if (((j - 0x40900000) | i) != 0) return s * huge * huge;\n if (p_l + ovt > z - p_h) return s * huge * huge;\n } else if ((j & 0x7FFFFFFF) >= 0x4090CC00) {\n if (((j - 0xC090CC00) | i) != 0) return s * tiny * tiny;\n if (p_l <= z - p_h) return s * tiny * tiny;\n }\n i = j & 0x7FFFFFFF;\n k = (i >> 20) - 0x3FF;\n n = 0;\n if (i > 0x3FE00000) {\n n = j + (0x00100000 >> (k + 1));\n k = ((n & 0x7FFFFFFF) >> 20) - 0x3FF;\n t = 0.0;\n t = reinterpret((n & ~(0x000FFFFF >> k)) << 32);\n n = ((n & 0x000FFFFF) | 0x00100000) >> (20 - k);\n if (j < 0) n = -n;\n p_h -= t;\n }\n t = p_l + p_h;\n t = reinterpret(reinterpret(t) & 0xFFFFFFFF00000000);\n u = t * lg2_h;\n v = (p_l - (t - p_h)) * lg2 + t * lg2_l;\n z = u + v;\n w = v - (z - u);\n t = z * z;\n t1 = z - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));\n r = (z * t1) / (t1 - 2.0) - (w + z * w);\n z = 1.0 - (r - z);\n j = (reinterpret(z) >> 32);\n j += n << 20;\n if ((j >> 20) <= 0) z = scalbn(z, n);\n else z = reinterpret(reinterpret(z) & 0xFFFFFFFF | (j << 32));\n return s * z;\n }\n\n export function seedRandom(value: i64): void {\n assert(value);\n random_seeded = true;\n random_state0 = murmurHash3(value);\n random_state1 = murmurHash3(random_state0);\n }\n\n export function random(): f64 { // see: v8/src/base/random-number-generator.cc\n if (!random_seeded) throw new Error("PRNG must be seeded.");\n var s1 = random_state0;\n var s0 = random_state1;\n random_state0 = s0;\n s1 ^= s1 << 23;\n s1 ^= s1 >> 17;\n s1 ^= s0;\n s1 ^= s0 >> 26;\n random_state1 = s1;\n var r = ((s0 + s1) & 0x000FFFFFFFFFFFFF) | 0x3FF0000000000000;\n return reinterpret(r) - 1;\n }\n\n export function round(x: f64): f64 { // see: musl/src/math/round.c\n const toint = 1.0 / f64.EPSILON;\n var ux = reinterpret(x);\n var e = (ux >> 52 & 0x7FF);\n if (e >= 0x3FF + 52) return x;\n if (e < 0x3FF - 1) return 0 * x;\n var y: f64;\n if (ux >> 63) {\n // FIXME: JS always rounds fractional 0.5 towards +Infinity\n // and there certainly is a smarter way to do this.\n y = toint - x - toint + x;\n if (y >= 0.5) y = x - y + 1;\n else if (y < -0.5) y = x - y - 1;\n else y = x - y;\n } else {\n y = x + toint - toint - x;\n if (y > 0.5) y = y + x - 1;\n else if (y <= -0.5) y = y + x + 1;\n else y = y + x;\n }\n return y;\n }\n\n @inline\n export function sign(x: f64): f64 {\n // return x > 0 ? 1 : x < 0 ? -1 : x;\n return builtin_abs(x) > 0 ? builtin_copysign(1, x) : x;\n }\n\n export function sin(x: f64): f64 { // TODO\n unreachable();\n return 0;\n }\n\n export function sinh(x: f64): f64 { // see: musl/src/math/sinh.c\n var u = reinterpret(x);\n var h = 0.5;\n if (u >> 63) h = -h;\n u &= 0x7FFFFFFFFFFFFFFF;\n var absx = reinterpret(u);\n var w = (u >> 32);\n var t: f64;\n if (w < 0x40862E42) {\n t = expm1(absx);\n if (w < 0x3FF00000) {\n if (w < 0x3FF00000 - (26 << 20)) return x;\n return h * (2 * t - t * t / (t + 1));\n }\n return h * (t + t / (t + 1));\n }\n t = 2 * h * expo2(absx);\n return t;\n }\n\n @inline\n export function sqrt(x: f64): f64 {\n return builtin_sqrt(x);\n }\n\n export function tan(x: f64): f64 { // TODO\n unreachable();\n return 0;\n }\n\n export function tanh(x: f64): f64 { // see: musl/src/math/tanh.c\n var u = reinterpret(x);\n var sign_ = (u >> 63);\n u &= 0x7FFFFFFFFFFFFFFF;\n x = reinterpret(u);\n var w = (u >> 32);\n var t: f64;\n if (w > 0x3FE193EA) {\n if (w > 0x40340000) {\n t = 1 - 0 / x;\n } else {\n t = expm1(2 * x);\n t = 1 - 2 / (t + 2);\n }\n } else if (w > 0x3FD058AE) {\n t = expm1(2 * x);\n t = t / (t + 2);\n } else if (w >= 0x00100000) {\n t = expm1(-2 * x);\n t = -t / (t + 2);\n } else t = x;\n return sign_ ? -t : t;\n }\n\n @inline\n export function trunc(x: f64): f64 {\n return builtin_trunc(x);\n }\n\n /** @internal */\n export function scalbn(x: f64, n: i32): f64 { // see: musl/src/math/scalbn.c\n const\n Ox1p1023 = reinterpret(0x7FE0000000000000),\n Ox1p_1022 = reinterpret(0x0010000000000000);\n var y = x;\n if (n > 1023) {\n y *= Ox1p1023;\n n -= 1023;\n if (n > 1023) {\n y *= Ox1p1023;\n n -= 1023;\n if (n > 1023) n = 1023;\n }\n } else if (n < -1022) {\n y *= Ox1p_1022;\n n += 1022;\n if (n < -1022) {\n y *= Ox1p_1022;\n n += 1022;\n if (n < -1022) n = -1022;\n }\n }\n return y * reinterpret((0x3FF + n) << 52);\n }\n\n export function mod(x: f64, y: f64): f64 { // see: musl/src/math/fmod.c\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n var ex = (ux >> 52 & 0x7FF);\n var ey = (uy >> 52 & 0x7FF);\n var sx = (ux >> 63);\n if (uy << 1 == 0 || isNaN(y) || ex == 0x7FF) return (x * y) / (x * y);\n if (ux << 1 <= uy << 1) {\n if (ux << 1 == uy << 1) return 0 * x;\n return x;\n }\n var i: u64;\n if (!ex) {\n for (i = ux << 12; !(i >> 63); i <<= 1) --ex;\n ux <<= -ex + 1;\n } else {\n ux &= -1 >> 12;\n ux |= 1 << 52;\n }\n if (!ey) {\n for (i = uy << 12; !(i >> 63); i <<= 1) --ey;\n uy <<= -ey + 1;\n } else {\n uy &= -1 >> 12;\n uy |= 1 << 52;\n }\n for (; ex > ey; ex--) {\n i = ux - uy;\n if (!(i >> 63)) {\n if (!i) return 0 * x;\n ux = i;\n }\n ux <<= 1;\n }\n i = ux - uy;\n if (!(i >> 63)) {\n if (!i) return 0 * x;\n ux = i;\n }\n for (; !(ux >> 52); ux <<= 1) --ex;\n if (ex > 0) {\n ux -= 1 << 52;\n ux |= ex << 52;\n } else {\n ux >>= -ex + 1;\n }\n ux |= sx << 63;\n return reinterpret(ux);\n }\n\n export function rem(x: f64, y: f64): f64 { // see: musl/src/math/remquo.c\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n var ex = (ux >> 52 & 0x7FF);\n var ey = (uy >> 52 & 0x7FF);\n var sx = (ux >> 63);\n var sy = (uy >> 63);\n if (uy << 1 == 0 || isNaN(y) || ex == 0x7FF) return (x * y) / (x * y);\n if (ux << 1 == 0) return x;\n var uxi = ux;\n var i: u64;\n if (!ex) {\n for (i = uxi << 12; i >> 63 == 0; ex--, i <<= 1) {}\n uxi <<= -ex + 1;\n } else {\n uxi &= -1 >> 12;\n uxi |= 1 << 52;\n }\n if (!ey) {\n for (i = uy << 12; i >> 63 == 0; ey--, i <<= 1) {}\n uy <<= -ey + 1;\n } else {\n uy &= -1 >> 12;\n uy |= 1 << 52;\n }\n var q: u32 = 0;\n do {\n if (ex < ey) {\n if (ex + 1 == ey) break; // goto end\n return x;\n }\n for (; ex > ey; ex--) {\n i = uxi - uy;\n if (i >> 63 == 0) {\n uxi = i;\n ++q;\n }\n uxi <<= 1;\n q <<= 1;\n }\n i = uxi - uy;\n if (i >> 63 == 0) {\n uxi = i;\n ++q;\n }\n if (uxi == 0) ex = -60;\n else for (; uxi >> 52 == 0; uxi <<= 1, ex--) {}\n break;\n } while (false);\n // end:\n if (ex > 0) {\n uxi -= 1 << 52;\n uxi |= ex << 52;\n } else {\n uxi >>= -ex + 1;\n }\n x = reinterpret(uxi);\n if (sy) y = -y;\n if (ex == ey || (ex + 1 == ey && (2.0 * x > y || (2.0 * x == y && (q & 1))))) {\n x -= y;\n ++q;\n }\n return sx ? -x : x;\n }\n}\n\nfunction Rf(z: f32): f32 { // Rational approximation of (asin(x)-x)/x^3\n const // see: musl/src/math/asinf.c and SUN COPYRIGHT NOTICE above\n pS0 = reinterpret(0x3E2AAA75), // 1.6666586697e-01f\n pS1 = reinterpret(0xBD2F13BA), // -4.2743422091e-02f\n pS2 = reinterpret(0xBC0DD36B), // -8.6563630030e-03f\n qS1 = reinterpret(0xBF34E5AE); // -7.0662963390e-01f\n var p = z * (pS0 + z * (pS1 + z * pS2));\n var q: f32 = 1 + z * qS1;\n return p / q;\n}\n\nfunction expo2f(x: f32): f32 { // exp(x)/2 for x >= log(DBL_MAX)\n const // see: musl/src/math/__expo2f.c\n k = 235,\n kln2 = reinterpret(0x4322E3BC); // 0x1.45c778p+7f\n var scale = reinterpret((0x7F + k / 2) << 23);\n return NativeMathf.exp(x - kln2) * scale * scale;\n}\n\nexport namespace NativeMathf {\n\n export const E = NativeMath.E;\n export const LN2 = NativeMath.LN2;\n export const LN10 = NativeMath.LN10;\n export const LOG2E = NativeMath.LOG2E;\n export const LOG10E = NativeMath.LOG10E;\n export const PI = NativeMath.PI;\n export const SQRT1_2 = NativeMath.SQRT1_2;\n export const SQRT2 = NativeMath.SQRT2;\n\n @inline\n export function abs(x: f32): f32 {\n return builtin_abs(x);\n }\n\n export function acos(x: f32): f32 { // see: musl/src/math/acosf.c and SUN COPYRIGHT NOTICE above\n const\n pio2_hi = reinterpret(0x3FC90FDA), // 1.5707962513e+00f\n pio2_lo = reinterpret(0x33A22168), // 7.5497894159e-08f\n Ox1p_120f = reinterpret(0x03800000);\n var hx = reinterpret(x);\n var ix = hx & 0x7FFFFFFF;\n if (ix >= 0x3F800000) {\n if (ix == 0x3F800000) {\n if (hx >> 31) return 2 * pio2_hi + Ox1p_120f;\n return 0;\n }\n return 0 / (x - x);\n }\n if (ix < 0x3F000000) {\n if (ix <= 0x32800000) return pio2_hi + Ox1p_120f;\n return pio2_hi - (x - (pio2_lo - x * Rf(x * x)));\n }\n var z: f32, w: f32, s: f32;\n if (hx >> 31) {\n z = (1 + x) * 0.5;\n s = builtin_sqrt(z);\n w = Rf(z) * s - pio2_lo;\n return 2 * (pio2_hi - (s + w));\n }\n z = (1 - x) * 0.5;\n s = builtin_sqrt(z);\n hx = reinterpret(s);\n var df = reinterpret(hx & 0xFFFFF000);\n var c = (z - df * df) / (s + df);\n w = Rf(z) * s + c;\n return 2 * (df + w);\n }\n\n export function acosh(x: f32): f32 { // see: musl/src/math/acoshf.c\n const s = reinterpret(0x3F317218); // 0.693147180559945309417232121458176568f\n var u = reinterpret(x);\n var a = u & 0x7FFFFFFF;\n if (a < 0x3F800000 + (1 << 23)) return log1p(x - 1 + builtin_sqrt((x - 1) * (x - 1) + 2 * (x - 1)));\n if (a < 0x3F800000 + (12 << 23)) return log(2 * x - 1 / (x + builtin_sqrt(x * x - 1)));\n return log(x) + s;\n }\n\n export function asin(x: f32): f32 { // see: musl/src/math/asinf.c and SUN COPYRIGHT NOTICE above\n const\n pio2 = reinterpret(0x3FC90FDB), // 1.570796326794896558e+00f\n Ox1p_120f = reinterpret(0x03800000);\n var hx = reinterpret(x);\n var ix = hx & 0x7FFFFFFF;\n if (ix >= 0x3F800000) {\n if (ix == 0x3F800000) return x * pio2 + Ox1p_120f;\n return 0 / (x - x);\n }\n if (ix < 0x3F000000) {\n if (ix < 0x39800000 && ix >= 0x00800000) return x;\n return x + x * Rf(x * x);\n }\n var z: f32 = (1 - builtin_abs(x)) * 0.5;\n var s = builtin_sqrt(z); // sic\n x = (pio2 - 2 * (s + s * Rf(z)));\n if (hx >> 31) return -x;\n return x;\n }\n\n export function asinh(x: f32): f32 { // see: musl/src/math/asinhf.c\n const c = reinterpret(0x3F317218); // 0.693147180559945309417232121458176568f\n var u = reinterpret(x);\n var i = u & 0x7FFFFFFF;\n var s = (u >> 31);\n u = i;\n x = reinterpret(u);\n if (i >= 0x3F800000 + (12 << 23)) x = log(x) + c;\n else if (i >= 0x3F800000 + (1 << 23)) x = log(2 * x + 1 / (builtin_sqrt(x * x + 1) + x));\n else if (i >= 0x3F800000 - (12 << 23)) x = log1p(x + x * x / (builtin_sqrt(x * x + 1) + 1));\n return s ? -x : x;\n }\n\n export function atan(x: f32): f32 { // see: musl/src/math/atanf.c and SUN COPYRIGHT NOTICE above\n const\n atanhi0 = reinterpret(0x3EED6338), // 4.6364760399e-01f\n atanhi1 = reinterpret(0x3F490FDA), // 7.8539812565e-01f\n atanhi2 = reinterpret(0x3F7B985E), // 9.8279368877e-01f\n atanhi3 = reinterpret(0x3FC90FDA), // 1.5707962513e+00f\n atanlo0 = reinterpret(0x31AC3769), // 5.0121582440e-09f\n atanlo1 = reinterpret(0x33222168), // 3.7748947079e-08f\n atanlo2 = reinterpret(0x33140FB4), // 3.4473217170e-08f\n atanlo3 = reinterpret(0x33A22168), // 7.5497894159e-08f\n aT0 = reinterpret(0x3EAAAAA9), // 3.3333328366e-01f\n aT1 = reinterpret(0xBE4CCA98), // -1.9999158382e-01f\n aT2 = reinterpret(0x3E11F50D), // 1.4253635705e-01f\n aT3 = reinterpret(0xBDDA1247), // -1.0648017377e-01f\n aT4 = reinterpret(0x3D7CAC25), // 6.1687607318e-02f\n Ox1p_120f = reinterpret(0x03800000);\n var ix = reinterpret(x);\n var sig = (ix >> 31);\n ix &= 0x7FFFFFFF;\n var z: f32;\n if (ix >= 0x4C800000) {\n if (isNaN(x)) return x;\n z = atanhi3 + Ox1p_120f;\n return sig ? -z : z;\n }\n var id: i32;\n if (ix < 0x3EE00000) {\n if (ix < 0x39800000) return x;\n id = -1;\n } else {\n x = builtin_abs(x);\n if (ix < 0x3F980000) {\n if (ix < 0x3F300000) {\n id = 0;\n x = (2.0 * x - 1.0) / (2.0 + x);\n } else {\n id = 1;\n x = (x - 1.0) / (x + 1.0);\n }\n } else {\n if (ix < 0x401C0000) {\n id = 2;\n x = (x - 1.5) / (1.0 + 1.5 * x);\n } else {\n id = 3;\n x = -1.0 / x;\n }\n }\n }\n z = x * x;\n var w = z * z;\n var s1 = z * (aT0 + w * (aT2 + w * aT4));\n var s2 = w * (aT1 + w * aT3);\n if (id < 0) return x - x * (s1 + s2);\n switch (id) {\n case 0: { z = atanhi0 - ((x * (s1 + s2) - atanlo0) - x); break; }\n case 1: { z = atanhi1 - ((x * (s1 + s2) - atanlo1) - x); break; }\n case 2: { z = atanhi2 - ((x * (s1 + s2) - atanlo2) - x); break; }\n case 3: { z = atanhi3 - ((x * (s1 + s2) - atanlo3) - x); break; }\n default: unreachable();\n }\n return sig ? -z : z;\n }\n\n export function atanh(x: f32): f32 { // see: musl/src/math/atanhf.c\n var u = reinterpret(x);\n var s = (u >> 31);\n u &= 0x7FFFFFFF;\n var y = reinterpret(u);\n if (u < 0x3F800000 - (1 << 23)) {\n if (u >= 0x3F800000 - (32 << 23)) y = 0.5 * log1p(2 * y + 2 * y * y / (1 - y));\n } else y = 0.5 * log1p(2 * (y / (1 - y)));\n return s ? -y : y;\n }\n\n export function atan2(y: f32, x: f32): f32 { // see: musl/src/math/atan2f.c and SUN COPYRIGHT NOTICE above\n const\n pi = reinterpret(0x40490FDB), // 3.1415927410e+00f\n pi_lo = reinterpret(0xB3BBBD2E); // -8.7422776573e-08f\n if (isNaN(x) || isNaN(y)) return x + y;\n var ix = reinterpret(x);\n var iy = reinterpret(y);\n if (ix == 0x3F800000) return atan(y);\n var m = (((iy >> 31) & 1) | ((ix >> 30) & 2));\n ix &= 0x7FFFFFFF;\n iy &= 0x7FFFFFFF;\n if (iy == 0) {\n switch (m) {\n case 0:\n case 1: return y;\n case 2: return pi;\n case 3: return -pi;\n }\n }\n if (ix == 0) return m & 1 ? -pi / 2 : pi / 2;\n if (ix == 0x7F800000) {\n if (iy == 0x7F800000) {\n switch (m) {\n case 0: return pi / 4;\n case 1: return -pi / 4;\n case 2: return 3 * pi / 4;\n case 3: return -3 * pi / 4;\n }\n } else {\n switch (m) {\n case 0: return 0;\n case 1: return -0;\n case 2: return pi;\n case 3: return -pi;\n }\n }\n }\n if (ix + (26 << 23) < iy || iy == 0x7F800000) return m & 1 ? -pi / 2 : pi / 2;\n var z: f32;\n if ((m & 2) && iy + (26 << 23) < ix) z = 0.0;\n else z = atan(builtin_abs(y / x));\n switch (m) {\n case 0: return z;\n case 1: return -z;\n case 2: return pi - (z - pi_lo);\n case 3: return (z - pi_lo) - pi;\n }\n unreachable();\n return 0;\n }\n\n export function cbrt(x: f32): f32 { // see: musl/src/math/cbrtf.c and SUN COPYRIGHT NOTICE above\n const\n B1 = 709958130,\n B2 = 642849266,\n Ox1p24f = reinterpret(0x4B800000);\n var u = reinterpret(x);\n var hx = u & 0x7FFFFFFF;\n if (hx >= 0x7F800000) return x + x;\n if (hx < 0x00800000) {\n if (hx == 0) return x;\n u = reinterpret(x * Ox1p24f);\n hx = u & 0x7FFFFFFF;\n hx = hx / 3 + B2;\n } else {\n hx = hx / 3 + B1;\n }\n u &= 0x80000000;\n u |= hx;\n var T = reinterpret(u);\n var r = T * T * T;\n T = T * (x + x + r) / (x + r + r);\n r = T * T * T;\n T = T * (x + x + r) / (x + r + r);\n return T;\n }\n\n @inline\n export function ceil(x: f32): f32 {\n return builtin_ceil(x);\n }\n\n @inline\n export function clz32(x: f32): f32 {\n return builtin_clz(x);\n }\n\n export function cos(x: f32): f32 { // TODO\n unreachable();\n return 0;\n }\n\n export function cosh(x: f32): f32 { // see: musl/src/math/coshf.c\n var u = reinterpret(x);\n u &= 0x7FFFFFFF;\n x = reinterpret(u);\n if (u < 0x3F317217) {\n if (u < 0x3F800000 - (12 << 23)) return 1;\n let t = expm1(x);\n return 1 + t * t / (2 * (1 + t));\n }\n if (u < 0x42B17217) {\n let t = exp(x);\n return 0.5 * (t + 1 / t);\n }\n return expo2f(x);\n }\n\n @inline\n export function floor(x: f32): f32 {\n return builtin_floor(x);\n }\n\n export function exp(x: f32): f32 { // see: musl/src/math/expf.c and SUN COPYRIGHT NOTICE above\n const\n ln2hi = reinterpret(0x3F317200), // 6.9314575195e-1f\n ln2lo = reinterpret(0x35BFBE8E), // 1.4286067653e-6f\n invln2 = reinterpret(0x3FB8AA3B), // 1.4426950216e+0f\n P1 = reinterpret(0x3E2AAA8F), // 1.6666625440e-1f\n P2 = reinterpret(0xBB355215), // -2.7667332906e-3f\n Ox1p127f = reinterpret(0x7F000000);\n var hx = reinterpret(x);\n var sign_ = (hx >> 31);\n hx &= 0x7FFFFFFF;\n if (hx >= 0x42AEAC50) {\n if (hx >= 0x42B17218 && !sign_) {\n x *= Ox1p127f;\n return x;\n }\n if (sign_ && hx >= 0x42CFF1B5) return 0;\n }\n var hi: f32, lo: f32;\n var k: i32;\n if (hx > 0x3EB17218) {\n if (hx > 0x3F851592) {\n k = (invln2 * x + builtin_copysign(0.5, x));\n } else {\n k = 1 - sign_ - sign_;\n }\n hi = x - k * ln2hi;\n lo = k * ln2lo;\n x = hi - lo;\n } else if (hx > 0x39000000) {\n k = 0;\n hi = x;\n lo = 0;\n } else {\n return 1 + x;\n }\n var xx = x * x;\n var c = x - xx * (P1 + xx * P2);\n var y: f32 = 1 + (x * c / (2 - c) - lo + hi);\n if (k == 0) return y;\n return scalbn(y, k);\n }\n\n export function expm1(x: f32): f32 { // see: musl/src/math/expm1f.c and SUN COPYRIGHT NOTICE above\n const\n o_threshold = reinterpret(0x42B17180), // 8.8721679688e+01f\n ln2_hi = reinterpret(0x3F317180), // 6.9313812256e-01f\n ln2_lo = reinterpret(0x3717F7D1), // 9.0580006145e-06f\n invln2 = reinterpret(0x3FB8AA3B), // 1.4426950216e+00f\n Q1 = reinterpret(0xBD088868), // -3.3333212137e-02f\n Q2 = reinterpret(0x3ACF3010), // 1.5807170421e-03f\n Ox1p127f = reinterpret(0x7F000000);\n var u = reinterpret(x);\n var hx = u & 0x7FFFFFFF;\n var sign_ = (u >> 31);\n if (hx >= 0x4195B844) {\n if (hx > 0x7F800000) return x;\n if (sign_) return -1;\n if (x > o_threshold) {\n x *= Ox1p127f;\n return x;\n }\n }\n var c: f32 = 0.0, t: f32, k: i32;\n if (hx > 0x3EB17218) {\n let hi: f32, lo: f32;\n if (hx < 0x3F851592) {\n if (!sign_) {\n hi = x - ln2_hi;\n lo = ln2_lo;\n k = 1;\n } else {\n hi = x + ln2_hi;\n lo = -ln2_lo;\n k = -1;\n }\n } else {\n k = (invln2 * x + (sign_ ? -0.5 : 0.5));\n t = k;\n hi = x - t * ln2_hi;\n lo = t * ln2_lo;\n }\n x = hi - lo;\n c = (hi - x) - lo;\n } else if (hx < 0x33000000) {\n return x;\n } else k = 0;\n var hfx: f32 = 0.5 * x;\n var hxs: f32 = x * hfx;\n var r1: f32 = 1.0 + hxs * (Q1 + hxs * Q2);\n t = 3.0 - r1 * hfx;\n var e = hxs * ((r1 - t) / (6.0 - x * t));\n if (k == 0) return x - (x * e - hxs);\n e = x * (e - c) - c;\n e -= hxs;\n if (k == -1) return 0.5 * (x - e) - 0.5;\n if (k == 1) {\n if (x < -0.25) return -2.0 * (e - (x + 0.5));\n return 1.0 + 2.0 * (x - e);\n }\n u = (0x7F + k) << 23;\n var twopk = reinterpret(u);\n var y: f32;\n if (k < 0 || k > 56) {\n y = x - e + 1.0;\n if (k == 128) y = y * 2.0 * Ox1p127f;\n else y = y * twopk;\n return y - 1.0;\n }\n u = (0x7F - k) << 23;\n if (k < 23) y = (x - e + (1 - reinterpret(u))) * twopk;\n else y = (x - (e + reinterpret(u)) + 1) * twopk;\n return y;\n }\n\n @inline\n export function fround(x: f32): f32 {\n return x;\n }\n\n export function hypot(x: f32, y: f32): f32 { // see: musl/src/math/hypotf.c\n const\n Ox1p90f = reinterpret(0x6C800000),\n Ox1p_90f = reinterpret(0x12800000);\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n ux &= 0x7FFFFFFF;\n uy &= 0x7FFFFFFF;\n if (ux < uy) {\n let ut = ux;\n ux = uy;\n uy = ut;\n }\n x = reinterpret(ux);\n y = reinterpret(uy);\n if (uy == 0xFF << 23) return y;\n if (ux >= 0xFF << 23 || uy == 0 || ux - uy >= 25 << 23) return x + y;\n var z: f32 = 1;\n if (ux >= (0x7F + 60) << 23) {\n z = Ox1p90f;\n x *= Ox1p_90f;\n y *= Ox1p_90f;\n } else if (uy < (0x7F - 60) << 23) {\n z = Ox1p_90f;\n x *= Ox1p90f;\n y *= Ox1p90f;\n }\n return z * builtin_sqrt((x * x + y * y));\n }\n\n @inline\n export function imul(x: f32, y: f32): f32 {\n return (x * y);\n }\n\n export function log(x: f32): f32 { // see: musl/src/math/logf.c and SUN COPYRIGHT NOTICE above\n const\n ln2_hi = reinterpret(0x3F317180), // 6.9313812256e-01f\n ln2_lo = reinterpret(0x3717F7D1), // 9.0580006145e-06f\n Lg1 = reinterpret(0x3F2AAAAA), // 0xaaaaaa.0p-24f\n Lg2 = reinterpret(0x3ECCCE13), // 0xccce13.0p-25f\n Lg3 = reinterpret(0x3E91E9EE), // 0x91e9ee.0p-25f\n Lg4 = reinterpret(0x3E789E26), // 0xf89e26.0p-26f\n Ox1p25f = reinterpret(0x4C000000);\n var u = reinterpret(x);\n var k = 0;\n if (u < 0x00800000 || (u >> 31)) {\n if (u << 1 == 0) return -1 / (x * x);\n if (u >> 31) return (x - x) / 0;\n k -= 25;\n x *= Ox1p25f;\n u = reinterpret(x);\n } else if (u >= 0x7F800000) return x;\n else if (u == 0x3F800000) return 0;\n u += 0x3F800000 - 0x3F3504F3;\n k += (u >> 23) - 0x7F;\n u = (u & 0x007FFFFF) + 0x3F3504F3;\n x = reinterpret(u);\n var f = x - 1.0;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * Lg4);\n var t2 = z * (Lg1 + w * Lg3);\n var r = t2 + t1;\n var hfsq = 0.5 * f * f;\n var dk = k;\n return s * (hfsq + r) + dk * ln2_lo - hfsq + f + dk * ln2_hi;\n }\n\n export function log10(x: f32): f32 { // see: musl/src/math/log10f.c and SUN COPYRIGHT NOTICE above\n const\n ivln10hi = reinterpret(0x3EDE6000), // 4.3432617188e-01f\n ivln10lo = reinterpret(0xB804EAD9), // -3.1689971365e-05f\n log10_2hi = reinterpret(0x3E9A2080), // 3.0102920532e-01f\n log10_2lo = reinterpret(0x355427DB), // 7.9034151668e-07f\n Lg1 = reinterpret(0x3F2AAAAA), // 0xaaaaaa.0p-24f, 0.66666662693f\n Lg2 = reinterpret(0x3ECCCE13), // 0xccce13.0p-25f, 0.40000972152f\n Lg3 = reinterpret(0x3E91E9EE), // 0x91e9ee.0p-25f, 0.28498786688f\n Lg4 = reinterpret(0x3E789E26), // 0xf89e26.0p-26f, 0.24279078841f\n Ox1p25f = reinterpret(0x4C000000);\n var ix = reinterpret(x);\n var k = 0;\n if (ix < 0x00800000 || (ix >> 31)) {\n if (ix << 1 == 0) return -1 / (x * x);\n if (ix >> 31) return (x - x) / 0.0;\n k -= 25;\n x *= Ox1p25f;\n ix = reinterpret(x);\n } else if (ix >= 0x7F800000) return x;\n else if (ix == 0x3F800000) return 0;\n ix += 0x3F800000 - 0x3F3504F3;\n k += (ix >> 23) - 0x7F;\n ix = (ix & 0x007FFFFF) + 0x3F3504F3;\n x = reinterpret(ix);\n var f = x - 1.0;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * Lg4);\n var t2 = z * (Lg1 + w * Lg3);\n var r = t2 + t1;\n var hfsq: f32 = 0.5 * f * f;\n var hi = f - hfsq;\n ix = reinterpret(hi);\n ix &= 0xFFFFF000;\n hi = reinterpret(ix);\n var lo = f - hi - hfsq + s * (hfsq + r);\n var dk = k;\n return dk * log10_2lo + (lo + hi) * ivln10lo + lo * ivln10hi + hi * ivln10hi + dk * log10_2hi;\n }\n\n export function log1p(x: f32): f32 { // see: musl/src/math/log1pf.c and SUN COPYRIGHT NOTICE above\n const\n ln2_hi = reinterpret(0x3F317180), // 6.9313812256e-01\n ln2_lo = reinterpret(0x3717F7D1), // 9.0580006145e-06\n Lg1 = reinterpret(0x3F2AAAAA), // 0xaaaaaa.0p-24f, 0.66666662693f\n Lg2 = reinterpret(0x3ECCCE13), // 0xccce13.0p-25f, 0.40000972152f\n Lg3 = reinterpret(0x3E91E9EE), // 0x91e9ee.0p-25f, 0.28498786688f\n Lg4 = reinterpret(0x3E789E26); // 0xf89e26.0p-26f, 0.24279078841f\n var ix = reinterpret(x);\n var c: f32 = 0, f: f32 = 0;\n var k: i32 = 1;\n if (ix < 0x3ED413D0 || (ix >> 31)) {\n if (ix >= 0xBF800000) {\n if (x == -1) return x / 0.0;\n return (x - x) / 0.0;\n }\n if (ix << 1 < 0x33800000 << 1) return x;\n if (ix <= 0xBE95F619) {\n k = 0;\n c = 0;\n f = x;\n }\n } else if (ix >= 0x7F800000) return x;\n if (k) {\n let uf: f32 = 1 + x;\n let iu = reinterpret(uf);\n iu += 0x3F800000 - 0x3F3504F3;\n k = (iu >> 23) - 0x7F;\n if (k < 25) {\n c = k >= 2 ? 1 - (uf - x) : x - (uf - 1);\n c /= uf;\n } else c = 0;\n iu = (iu & 0x007FFFFF) + 0x3F3504F3;\n f = reinterpret(iu) - 1;\n }\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * Lg4);\n var t2 = z * (Lg1 + w * Lg3);\n var r = t2 + t1;\n var hfsq: f32 = 0.5 * f * f;\n var dk = k;\n return s * (hfsq + r) + (dk * ln2_lo + c) - hfsq + f + dk * ln2_hi;\n }\n\n export function log2(x: f32): f32 { // see: musl/src/math/log2f.c and SUN COPYRIGHT NOTICE above\n const\n ivln2hi = reinterpret(0x3FB8B000), // 1.4428710938e+00f\n ivln2lo = reinterpret(0xB9389AD4), // -1.7605285393e-04\n Lg1 = reinterpret(0x3F2AAAAA), // 0xaaaaaa.0p-24f, 0.66666662693f\n Lg2 = reinterpret(0x3ECCCE13), // 0xccce13.0p-25f, 0.40000972152f\n Lg3 = reinterpret(0x3E91E9EE), // 0x91e9ee.0p-25f, 0.28498786688f\n Lg4 = reinterpret(0x3E789E26), // 0xf89e26.0p-26f, 0.24279078841f\n Ox1p25f = reinterpret(0x4C000000);\n var ix = reinterpret(x);\n var k: i32 = 0;\n if (ix < 0x00800000 || (ix >> 31)) {\n if (ix << 1 == 0) return -1 / (x * x);\n if (ix >> 31) return (x - x) / 0.0;\n k -= 25;\n x *= Ox1p25f;\n ix = reinterpret(x);\n } else if (ix >= 0x7F800000) return x;\n else if (ix == 0x3F800000) return 0;\n ix += 0x3F800000 - 0x3F3504F3;\n k += (ix >> 23) - 0x7F;\n ix = (ix & 0x007FFFFF) + 0x3F3504F3;\n x = reinterpret(ix);\n var f = x - 1.0;\n var s = f / (2.0 + f);\n var z = s * s;\n var w = z * z;\n var t1 = w * (Lg2 + w * Lg4);\n var t2 = z * (Lg1 + w * Lg3);\n var r = t2 + t1;\n var hfsq: f32 = 0.5 * f * f;\n var hi = f - hfsq;\n var u = reinterpret(hi);\n u &= 0xFFFFF000;\n hi = reinterpret(u);\n var lo: f32 = f - hi - hfsq + s * (hfsq + r);\n var dk = k;\n return (lo + hi) * ivln2lo + lo * ivln2hi + hi * ivln2hi + dk;\n }\n\n @inline\n export function max(value1: f32, value2: f32): f32 {\n return builtin_max(value1, value2);\n }\n\n @inline\n export function min(value1: f32, value2: f32): f32 {\n return builtin_min(value1, value2);\n }\n\n export function pow(x: f32, y: f32): f32 { // see: musl/src/math/powf.c and SUN COPYRIGHT NOTICE above\n const\n dp_h1 = reinterpret(0x3F15C000), // 5.84960938e-01f\n dp_l1 = reinterpret(0x35D1CFDC), // 1.56322085e-06f\n two24 = reinterpret(0x4B800000), // 16777216f\n huge = reinterpret(0x7149F2CA), // 1.0e+30f\n tiny = reinterpret(0x0DA24260), // 1.0e-30f\n L1 = reinterpret(0x3F19999A), // 6.0000002384e-01f\n L2 = reinterpret(0x3EDB6DB7), // 4.2857143283e-01f\n L3 = reinterpret(0x3EAAAAAB), // 3.3333334327e-01f\n L4 = reinterpret(0x3E8BA305), // 2.7272811532e-01f\n L5 = reinterpret(0x3E6C3255), // 2.3066075146e-01f\n L6 = reinterpret(0x3E53F142), // 2.0697501302e-01f\n P1 = reinterpret(0x3E2AAAAB), // 1.6666667163e-01f\n P2 = reinterpret(0xBB360B61), // -2.7777778450e-03f\n P3 = reinterpret(0x388AB355), // 6.6137559770e-05f\n P4 = reinterpret(0xB5DDEA0E), // -1.6533901999e-06f\n P5 = reinterpret(0x3331BB4C), // 4.1381369442e-08f\n lg2 = reinterpret(0x3F317218), // 6.9314718246e-01f\n lg2_h = reinterpret(0x3F317200), // 6.93145752e-01f\n lg2_l = reinterpret(0x35BFBE8C), // 1.42860654e-06f\n ovt = reinterpret(0x3338AA3C), // 4.2995665694e-08f\n cp = reinterpret(0x3F76384F), // 9.6179670095e-01\n cp_h = reinterpret(0x3F764000), // 9.6191406250e-01\n cp_l = reinterpret(0xB8F623C6), // -1.1736857402e-04\n ivln2 = reinterpret(0x3FB8AA3B), // 1.4426950216e+00\n ivln2_h = reinterpret(0x3FB8AA00), // 1.4426879883e+00\n ivln2_l = reinterpret(0x36ECA570); // 7.0526075433e-06\n var hx = reinterpret(x);\n var hy = reinterpret(y);\n var ix = hx & 0x7FFFFFFF;\n var iy = hy & 0x7FFFFFFF;\n if (iy == 0) return 1.0; // x**0 = 1, even if x is NaN\n // if (hx == 0x3F800000) return 1.0; // C: 1**y = 1, even if y is NaN, JS: NaN\n if (ix > 0x7F800000 || iy > 0x7F800000) return x + y; // NaN if either arg is NaN\n var yisint = 0, j: i32, k: i32;\n if (hx < 0) {\n if (iy >= 0x4B800000) yisint = 2;\n else if (iy >= 0x3F800000) {\n k = (iy >> 23) - 0x7F;\n j = iy >> (23 - k);\n if ((j << (23 - k)) == iy) yisint = 2 - (j & 1);\n }\n }\n if (iy == 0x7F800000) { // y is +-inf\n if (ix == 0x3F800000) return NaN; // C: (-1)**+-inf is 1, JS: NaN\n else if (ix > 0x3F800000) return hy >= 0 ? y : 0.0; // (|x|>1)**+-inf = inf,0\n else return hy >= 0 ? 0.0 : -y; // (|x|<1)**+-inf = 0,inf\n }\n if (iy == 0x3F800000) return hy >= 0 ? x : 1.0 / x;\n if (hy == 0x40000000) return x * x;\n if (hy == 0x3F000000) {\n if (hx >= 0) return builtin_sqrt(x);\n }\n var ax = builtin_abs(x);\n var z: f32;\n if (ix == 0x7F800000 || ix == 0 || ix == 0x3F800000) {\n z = ax;\n if (hy < 0) z = 1.0 / z;\n if (hx < 0) {\n if (((ix - 0x3F800000) | yisint) == 0) z = (z - z) / (z - z);\n else if (yisint == 1) z = -z;\n }\n return z;\n }\n var sn = 1.0;\n if (hx < 0) {\n if (yisint == 0) return (x - x) / (x - x);\n if (yisint == 1) sn = -1.0;\n }\n var t1: f32, t2: f32, r: f32, s: f32, t: f32, u: f32, v: f32, w: f32, p_h: f32, p_l: f32;\n var n: i32, is: i32;\n if (iy > 0x4D000000) {\n if (ix < 0x3F7FFFF8) return hy < 0 ? sn * huge * huge : sn * tiny * tiny;\n if (ix > 0x3F800007) return hy > 0 ? sn * huge * huge : sn * tiny * tiny;\n t = ax - 1;\n w = (t * t) * (0.5 - t * (0.333333333333 - t * 0.25));\n u = ivln2_h * t;\n v = t * ivln2_l - w * ivln2;\n t1 = u + v;\n is = reinterpret(t1);\n t1 = reinterpret(is & 0xFFFFF000);\n t2 = v - (t1 - u);\n } else {\n let s2: f32, s_h: f32, s_l: f32, t_h: f32, t_l: f32;\n n = 0;\n if (ix < 0x00800000) {\n ax *= two24;\n n -= 24;\n ix = reinterpret(ax);\n }\n n += (ix >> 23) - 0x7F;\n j = ix & 0x007FFFFF;\n ix = j | 0x3F800000;\n if (j <= 0x1CC471) k = 0;\n else if (j < 0x5DB3D7) k = 1;\n else {\n k = 0;\n n += 1;\n ix -= 0x00800000;\n }\n ax = reinterpret(ix);\n let bp = select(1.5, 1.0, k);\n u = ax - bp;\n v = 1.0 / (ax + bp);\n s = u * v;\n s_h = s;\n is = reinterpret(s_h);\n s_h = reinterpret(is & 0xFFFFF000);\n is = ((ix >> 1) & 0xFFFFF000) | 0x20000000;\n t_h = reinterpret(is + 0x00400000 + (k << 21));\n t_l = ax - (t_h - bp);\n s_l = v * ((u - s_h * t_h) - s_h * t_l);\n s2 = s * s;\n r = s2 * s2 * (L1 + s2 * (L2 + s2 * (L3 + s2 * (L4 + s2 * (L5 + s2 * L6)))));\n r += s_l * (s_h + s);\n s2 = s_h * s_h;\n t_h = 3.0 + s2 + r;\n is = reinterpret(t_h);\n t_h = reinterpret(is & 0xFFFFF000);\n t_l = r - ((t_h - 3.0) - s2);\n u = s_h * t_h;\n v = s_l * t_h + t_l * s;\n p_h = u + v;\n is = reinterpret(p_h);\n p_h = reinterpret(is & 0xFFFFF000);\n p_l = v - (p_h - u);\n let z_h = cp_h * p_h;\n let dp_l = select(dp_l1, 0.0, k);\n let z_l = cp_l * p_h + p_l * cp + dp_l;\n t = n;\n let dp_h = select(dp_h1, 0.0, k);\n t1 = (((z_h + z_l) + dp_h) + t);\n is = reinterpret(t1);\n t1 = reinterpret(is & 0xFFFFF000);\n t2 = z_l - (((t1 - t) - dp_h) - z_h);\n }\n is = reinterpret(y);\n var y1 = reinterpret(is & 0xFFFFF000);\n p_l = (y - y1) * t1 + y * t2;\n p_h = y1 * t1;\n z = p_l + p_h;\n j = reinterpret(z);\n if (j > 0x43000000) {\n return sn * huge * huge;\n } else if (j == 0x43000000) {\n if (p_l + ovt > z - p_h) return sn * huge * huge;\n } else if ((j & 0x7FFFFFFF) > 0x43160000) {\n return sn * tiny * tiny;\n } else if (j == 0xC3160000) {\n if (p_l <= z - p_h) return sn * tiny * tiny;\n }\n var i = j & 0x7FFFFFFF;\n k = (i >> 23) - 0x7F;\n n = 0;\n if (i > 0x3F000000) {\n n = j + (0x00800000 >> (k + 1));\n k = ((n & 0x7FFFFFFF) >> 23) - 0x7F;\n t = reinterpret(n & ~(0x007FFFFF >> k));\n n = ((n & 0x007FFFFF) | 0x00800000) >> (23 - k);\n if (j < 0) n = -n;\n p_h -= t;\n }\n t = p_l + p_h;\n is = reinterpret(t);\n t = reinterpret(is & 0xFFFF8000);\n u = t * lg2_h;\n v = (p_l - (t - p_h)) * lg2 + t * lg2_l;\n z = u + v;\n w = v - (z - u);\n t = z * z;\n t1 = z - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));\n r = (z * t1) / (t1 - 2.0) - (w + z * w);\n z = 1.0 - (r - z);\n j = reinterpret(z);\n j += n << 23;\n if ((j >> 23) <= 0) z = scalbn(z, n);\n else z = reinterpret(j);\n return sn * z;\n }\n\n @inline\n export function seedRandom(value: i64): void {\n NativeMath.seedRandom(value);\n }\n\n export function random(): f32 {\n var f: f32; // FIXME: demoting from f64 to f32 might yield 1.0f\n do f = NativeMath.random(); while (f == 1.0);\n return f;\n }\n\n export function round(x: f32): f32 { // see: musl/src/math/roundf.c\n const toint = 1.0 / f32.EPSILON;\n var ux = reinterpret(x);\n var e = (ux >> 23 & 0xFF);\n if (e >= 0x7F + 23) return x;\n if (e < 0x7F - 1) return 0 * x;\n var y: f32;\n if (ux >> 31) {\n // FIXME: JS always rounds fractional 0.5 towards +Infinity\n // and there certainly is a smarter way to do this.\n y = toint - x - toint + x;\n if (y >= 0.5) y = x - y + 1;\n else if (y < -0.5) y = x - y - 1;\n else y = x - y;\n } else {\n y = x + toint - toint - x;\n if (y > 0.5) y = y + x - 1;\n else if (y <= -0.5) y = y + x + 1;\n else y = y + x;\n }\n return y;\n }\n\n @inline\n export function sign(x: f32): f32 {\n // return x > 0 ? 1 : x < 0 ? -1 : x;\n return builtin_abs(x) > 0 ? builtin_copysign(1, x) : x;\n }\n\n export function sin(x: f32): f32 { // TODO\n unreachable();\n return 0;\n }\n\n export function sinh(x: f32): f32 { // see: musl/src/math/sinhf.c\n var u = reinterpret(x);\n var h: f32 = 0.5;\n if (u >> 31) h = -h;\n u &= 0x7FFFFFFF;\n var absx = reinterpret(u);\n var t: f32;\n if (u < 0x42B17217) {\n t = expm1(absx);\n if (u < 0x3F800000) {\n if (u < 0x3F800000 - (12 << 23)) return x;\n return h * (2 * t - t * t / (t + 1));\n }\n return h * (t + t / (t + 1));\n }\n t = 2 * h * expo2f(absx);\n return t;\n }\n\n @inline\n export function sqrt(x: f32): f32 {\n return builtin_sqrt(x);\n }\n\n export function tan(x: f32): f32 { // TODO\n unreachable();\n return 0;\n }\n\n export function tanh(x: f32): f32 { // see: musl/src/math/tanhf.c\n var u = reinterpret(x);\n var sig = u >> 31;\n u &= 0x7FFFFFFF;\n x = reinterpret(u);\n var t: f32;\n if (u > 0x3F0C9F54) {\n if (u > 0x41200000) t = 1 + 0 / x;\n else {\n t = expm1(2 * x);\n t = 1 - 2 / (t + 2);\n }\n } else if (u > 0x3E82C578) {\n t = expm1(2 * x);\n t = t / (t + 2);\n } else if (u >= 0x00800000) {\n t = expm1(-2 * x);\n t = -t / (t + 2);\n } else t = x;\n return sig ? -t : t;\n }\n\n @inline\n export function trunc(x: f32): f32 {\n return builtin_trunc(x);\n }\n\n /** @internal */\n export function scalbn(x: f32, n: i32): f32 { // see: musl/src/math/scalbnf.c\n const\n Ox1p127f = reinterpret(0x7F000000),\n Ox1p_126f = reinterpret(0x00800000);\n var y = x;\n if (n > 127) {\n y *= Ox1p127f;\n n -= 127;\n if (n > 127) {\n y *= Ox1p127f;\n n -= 127;\n if (n > 127) n = 127;\n }\n } else if (n < -126) {\n y *= Ox1p_126f;\n n += 126;\n if (n < -126) {\n y *= Ox1p_126f;\n n += 126;\n if (n < -126) n = -126;\n }\n }\n return y * reinterpret((0x7F + n) << 23);\n }\n\n export function mod(x: f32, y: f32): f32 { // see: musl/src/math/fmodf.c\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n var ex = (ux >> 23 & 0xFF);\n var ey = (uy >> 23 & 0xFF);\n var sx = ux & 0x80000000;\n if (uy << 1 == 0 || isNaN(y) || ex == 0xFF) return (x * y) / (x * y);\n if (ux << 1 <= uy << 1) {\n if (ux << 1 == uy << 1) return 0 * x;\n return x;\n }\n var i: u32;\n if (!ex) {\n for (i = ux << 9; !(i >> 31); i <<= 1) --ex;\n ux <<= -ex + 1;\n } else {\n ux &= -1 >> 9;\n ux |= 1 << 23;\n }\n if (!ey) {\n for (i = uy << 9; !(i >> 31); i <<= 1) --ey;\n uy <<= -ey + 1;\n } else {\n uy &= -1 >> 9;\n uy |= 1 << 23;\n }\n for (; ex > ey; --ex) {\n i = ux - uy;\n if (!(i >> 31)) {\n if (!i) return 0 * x;\n ux = i;\n }\n ux <<= 1;\n }\n i = ux - uy;\n if (!(i >> 31)) {\n if (!i) return 0 * x;\n ux = i;\n }\n for (; !(ux >> 23); ux <<= 1) --ex;\n if (ex > 0) {\n ux -= 1 << 23;\n ux |= ex << 23;\n } else {\n ux >>= -ex + 1;\n }\n ux |= sx;\n return reinterpret(ux);\n }\n\n export function rem(x: f32, y: f32): f32 { // see: musl/src/math/remquof.c\n var ux = reinterpret(x);\n var uy = reinterpret(y);\n var ex = (ux >> 23 & 0xFF);\n var ey = (uy >> 23 & 0xFF);\n var sx = (ux >> 31);\n var sy = (uy >> 31);\n var i: u32;\n var uxi = ux;\n if (uy << 1 == 0 || isNaN(y) || ex == 0xFF) return (x * y) / (x * y);\n if (ux << 1 == 0) return x;\n if (!ex) {\n for (i = uxi << 9; i >> 31 == 0; ex--, i <<= 1) {}\n uxi <<= -ex + 1;\n } else {\n uxi &= -1 >> 9;\n uxi |= 1 << 23;\n }\n if (!ey) {\n for (i = uy << 9; i >> 31 == 0; ey--, i <<= 1) {}\n uy <<= -ey + 1;\n } else {\n uy &= -1 >> 9;\n uy |= 1 << 23;\n }\n var q = 0;\n do {\n if (ex < ey) {\n if (ex + 1 == ey) break; // goto end\n return x;\n }\n for (; ex > ey; ex--) {\n i = uxi - uy;\n if (i >> 31 == 0) {\n uxi = i;\n q++;\n }\n uxi <<= 1;\n q <<= 1;\n }\n i = uxi - uy;\n if (i >> 31 == 0) {\n uxi = i;\n q++;\n }\n if (uxi == 0) ex = -30;\n else for (; uxi >> 23 == 0; uxi <<= 1, ex--) {}\n break;\n } while (false);\n // end\n if (ex > 0) {\n uxi -= 1 << 23;\n uxi |= ex << 23;\n } else {\n uxi >>= -ex + 1;\n }\n x = reinterpret(uxi);\n if (sy) y = -y;\n if (ex == ey || (ex + 1 == ey && (2 * x > y || (2 * x == y && (q & 1))))) {\n x -= y;\n q++;\n }\n return sx ? -x : x;\n }\n}\n',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 }\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 }\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\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",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 }\n if (sizeof() == 4) {\n return (\n rotl(value & 0xFF00FF00, 8) |\n rotr(value & 0x00FF00FF, 8)\n );\n }\n if (sizeof() == 8) {\n let a: u64 = (value >> 8) & 0x00FF00FF00FF00FF;\n let b: u64 = (value & 0x00FF00FF00FF00FF) << 8;\n let 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",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',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 (let 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 let newCapacity = max(this.__capacity << 1, 8);\n let 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 (let 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',string:'import {\n HEADER_SIZE,\n MAX_LENGTH,\n EMPTY,\n allocate,\n isWhiteSpaceOrLineTerminator,\n CharCode,\n parse\n} from "./internal/string";\n\n@sealed\nexport class String {\n\n readonly length: i32; // capped to [0, MAX_LENGTH]\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 HEADER_SIZE\n ),\n HEADER_SIZE\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 HEADER_SIZE\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 HEADER_SIZE\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 HEADER_SIZE\n );\n if (second < 0xDC00 || second > 0xDFFF) return first;\n return ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n }\n\n @operator("+")\n private static __concat(left: String, right: String): String {\n if (!changetype(left)) left = changetype("null");\n return left.concat(right);\n }\n\n concat(other: String): String {\n assert(this !== null);\n if (other === null) other = changetype("null");\n var thisLen: isize = this.length;\n var otherLen: isize = other.length;\n var outLen: usize = thisLen + otherLen;\n if (outLen == 0) return EMPTY;\n var out = allocate(outLen);\n\n move_memory(\n changetype(out) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE,\n thisLen << 1\n );\n\n move_memory(\n changetype(out) + HEADER_SIZE + (thisLen << 1),\n changetype(other) + HEADER_SIZE,\n otherLen << 1\n );\n\n return out;\n }\n\n endsWith(searchString: String, endPosition: i32 = MAX_LENGTH): bool {\n assert(this !== null);\n if (searchString === null) return false;\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) return false;\n return !compare_memory(\n changetype(this) + HEADER_SIZE + (start << 1),\n changetype(searchString) + HEADER_SIZE,\n searchLength << 1\n );\n }\n\n @operator("==")\n private static __eq(left: String, right: String): bool {\n if (left === right) return true;\n if (left === null || right === null) return false;\n\n var leftLength = left.length;\n if (leftLength != right.length) return false;\n\n return !compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n (leftLength << 1)\n );\n }\n\n @operator("!=")\n private static __ne(left: String, right: String): bool {\n return !this.__eq(left, right);\n }\n\n @operator(">")\n private static __gt(left: String, right: String): bool {\n if (left === right || left === null || right === null) return false;\n\n var leftLength = left.length;\n var rightLength = right.length;\n\n if (!leftLength) return false;\n if (!rightLength) return true;\n\n var length = min(leftLength, rightLength);\n return compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n length << 1\n ) > 0;\n }\n\n @operator(">=")\n private static __gte(left: String, right: String): bool {\n if (left === right) return true;\n if (left === null || right === null) return false;\n\n var leftLength = left.length;\n var rightLength = right.length;\n\n if (!leftLength) return !rightLength;\n if (!rightLength) return true;\n\n var length = min(leftLength, rightLength);\n return compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n length << 1\n ) >= 0;\n }\n\n @operator("<")\n private static __lt(left: String, right: String): bool {\n if (left === right || left === null || right === null) return false;\n\n var leftLength = left.length;\n var rightLength = right.length;\n\n if (!rightLength) return false;\n if (!leftLength) return true;\n\n var length = min(leftLength, rightLength);\n return compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n length << 1\n ) < 0;\n }\n\n @operator("<=")\n private static __lte(left: String, right: String): bool {\n if (left === right) return true;\n if (left === null || right === null) return false;\n\n var leftLength = left.length;\n var rightLength = right.length;\n\n if (!rightLength) return !leftLength;\n if (!leftLength) return true;\n\n var length = min(leftLength, rightLength);\n return compare_memory(\n changetype(left) + HEADER_SIZE,\n changetype(right) + HEADER_SIZE,\n length << 1\n ) <= 0;\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) searchString = changetype("null");\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 (let k: usize = start; k + searchLen <= len; ++k) {\n if (!compare_memory(\n changetype(this) + HEADER_SIZE + (k << 1),\n changetype(searchString) + HEADER_SIZE,\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) 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) + HEADER_SIZE + (start << 1),\n changetype(searchString) + HEADER_SIZE,\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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE + (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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE + (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\n while (\n length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (length << 1), HEADER_SIZE)\n )\n ) {\n --length;\n }\n var start: usize = 0;\n while (\n start < length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEADER_SIZE)\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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE + (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), HEADER_SIZE)\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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE + (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), HEADER_SIZE)\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) + HEADER_SIZE,\n changetype(this) + HEADER_SIZE,\n len << 1\n );\n return out;\n }\n\n repeat(count: i32 = 0): String {\n assert(this !== null);\n var length = this.length;\n\n // Most browsers can\'t handle strings 1 << 28 chars or longer\n if (count < 0 || length * count > (1 << 28)) {\n throw new RangeError("Invalid count value");\n }\n\n if (count === 0 || !length) return EMPTY;\n if (count === 1) return this;\n\n var result = allocate(length * count);\n var strLen = length << 1;\n\n /*\n * TODO possible improvments: reuse existing result for exponentially concats like:\n * \'a\' + \'a\' => \'aa\' + \'aa\' => \'aaaa\' + \'aaaa\' etc\n */\n for (let offset = 0, len = strLen * count; offset < len; offset += strLen) {\n move_memory(\n changetype(result) + HEADER_SIZE + offset,\n changetype(this) + HEADER_SIZE,\n strLen\n );\n }\n\n return result;\n }\n\n toString(): String {\n return this;\n }\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\n// FIXME: naive implementation\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, HEADER_SIZE);\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, HEADER_SIZE);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEADER_SIZE);\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, HEADER_SIZE);\n if (code == CharCode.DOT) {\n ptr += 2;\n let fac: f64 = 0.1; // precision :(\n while (len--) {\n code = load(ptr, HEADER_SIZE);\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',typedarray:'import {\n TypedArray\n} from "./internal/typedarray";\n\nexport class Int8Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Int8Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint8Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint8Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint8ClampedArray extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n @operator("[]=")\n protected __set(index: i32, value: i32): void {\n super.__set(index, max(min(value, 255), 0));\n }\n\n @operator("{}=")\n protected __unchecked_set(index: i32, value: i32): void {\n super.__unchecked_set(index, max(min(value, 255), 0));\n }\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint8ClampedArray {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Int16Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Int16Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint16Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint16Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Int32Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Int32Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint32Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint32Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Int64Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Int64Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Uint64Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint64Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Float32Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Float32Array {\n return changetype(super.subarray(begin, end));\n }\n}\n\nexport class Float64Array extends TypedArray {\n static readonly BYTES_PER_ELEMENT: usize = sizeof();\n\n subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Float64Array {\n return changetype(super.subarray(begin, end));\n }\n}\n'}):(()=>{const e=path.join(".","..","std","assembly"),n={};return __webpack_require__(!function(){var e=new Error('Cannot find module "glob"');throw e.code="MODULE_NOT_FOUND",e}()).sync("**/*.ts",{cwd:e}).forEach(t=>n[t.replace(/\.ts$/,"")]=fs.readFileSync(path.join(e,t),"utf8")),n})(),exports.definitionFiles=exports.isBundle?Object({assembly:"/**\n * Environment definitions for compiling AssemblyScript to WebAssembly using asc.\n * @module std/assembly\n *//***/\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 = boolean | number;\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 /** Smallest representable value. */\n export const MIN_VALUE: i8;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: i16;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: i32;\n /** Largest representable value. */\n export const MAX_VALUE: i32;\n /** Loads an 8-bit signed integer from memory and returns it as a 32-bit integer. */\n export function load8_s(offset: usize, constantOffset?: usize): i32;\n /** Loads an 8-bit unsigned integer from memory and returns it as a 32-bit integer. */\n export function load8_u(offset: usize, constantOffset?: usize): i32;\n /** Loads a 16-bit signed integer from memory and returns it as a 32-bit integer. */\n export function load16_s(offset: usize, constantOffset?: usize): i32;\n /** Loads a 16-bit unsigned integer from memory and returns it as a 32-bit integer. */\n export function load16_u(offset: usize, constantOffset?: usize): i32;\n /** Loads a 32-bit integer from memory. */\n export function load(offset: usize, constantOffset?: usize): i32;\n /** Stores a 32-bit integer to memory as an 8-bit integer. */\n export function store8(offset: usize, value: i32, constantOffset?: usize): void;\n /** Stores a 32-bit integer to memory as a 16-bit integer. */\n export function store16(offset: usize, value: i32, constantOffset?: usize): void;\n /** Stores a 32-bit integer to memory. */\n export function store(offset: usize, value: i32, constantOffset?: usize): void;\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 /** Smallest representable value. */\n export const MIN_VALUE: i64;\n /** Largest representable value. */\n export const MAX_VALUE: i64;\n /** Loads an 8-bit signed integer from memory and returns it as a 64-bit signed integer. */\n export function load8_s(offset: usize, constantOffset?: usize): i64;\n /** Loads an 8-bit unsigned integer from memory and returns it as a 64-bit unsigned integer. */\n export function load8_u(offset: usize, constantOffset?: usize): u64;\n /** Loads a 16-bit signed integer from memory and returns it as a 64-bit signed integer. */\n export function load16_s(offset: usize, constantOffset?: usize): i64;\n /** Loads a 16-bit unsigned integer from memory and returns it as a 64-bit unsigned integer. */\n export function load16_u(offset: usize, constantOffset?: usize): u64;\n /** Loads a 32-bit signed integer from memory and returns it as a 64-bit signed integer. */\n export function load32_s(offset: usize, constantOffset?: usize): i64;\n /** Loads a 32-bit unsigned integer from memory and returns it as a 64-bit unsigned integer. */\n export function load32_u(offset: usize, constantOffset?: usize): u64;\n /** Loads a 64-bit unsigned integer from memory. */\n export function load(offset: usize, constantOffset?: usize): i64;\n /** Stores a 64-bit integer to memory as an 8-bit integer. */\n export function store8(offset: usize, value: i64, constantOffset?: usize): void;\n /** Stores a 64-bit integer to memory as a 16-bit integer. */\n export function store16(offset: usize, value: i64, constantOffset?: usize): void;\n /** Stores a 64-bit integer to memory as a 32-bit integer. */\n export function store32(offset: usize, value: i64, constantOffset?: usize): void;\n /** Stores a 64-bit integer to memory. */\n export function store(offset: usize, value: i64, constantOffset?: usize): void;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare var isize: i32 | i64;\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 /** Smallest representable value. */\n export const MIN_VALUE: u8;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u16;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u32;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u64;\n /** Largest representable value. */\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 var usize: u32 | u64;\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 /** Smallest representable value. */\n export const MIN_VALUE: bool;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: f32;\n /** Largest representable value. */\n export const MAX_VALUE: f32;\n /** Smallest normalized positive value. */\n export const MIN_POSITIVE_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 /** Returns the floating-point remainder of `x / y` (rounded towards zero). */\n export function mod(x: f32, y: f32): f32;\n /** Returns the floating-point remainder of `x / y` (rounded to nearest). */\n export function rem(x: f32, y: f32): f32;\n /** Loads a 32-bit float from memory. */\n export function load(offset: usize, constantOffset?: usize): f32;\n /** Stores a 32-bit float to memory. */\n export function store(offset: usize, value: f32, constantOffset?: usize): void;\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 /** Smallest representable value. */\n export const MIN_VALUE: f64;\n /** Largest representable value. */\n export const MAX_VALUE: f64;\n /** Smallest normalized positive value. */\n export const MIN_POSITIVE_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 /** Loads a 64-bit float from memory. */\n export function load(offset: usize, constantOffset?: usize): f64;\n /** Stores a 64-bit float to memory. */\n export function store(offset: usize, value: f64, constantOffset?: usize): void;\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 underlying core type. Compiles to a constant. */\ndeclare function sizeof(): usize;\n/** Determines the alignment (log2) of the specified underlying core type. Compiles to a constant. */\ndeclare function alignof(): usize;\n/** Determines the offset of the specified field within the given class type. Returns the class type's end offset if field name has been omitted. Compiles to a constant. */\ndeclare function offsetof(fieldName?: string): 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/** Explicitly requests no bounds checks on the provided expression. Useful for array accesses. */\ndeclare function unchecked(value: T): 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/** Tests if the specified type *or* expression is of an integer type and not a reference. Compiles to a constant. */\ndeclare function isInteger(value?: any): value is number;\n/** Tests if the specified type *or* expression is of a float type. Compiles to a constant. */\ndeclare function isFloat(value?: any): value is number;\n/** Tests if the specified type *or* expression can represent negative numbers. Compiles to a constant. */\ndeclare function isSigned(value?: any): value is number;\n/** Tests if the specified type *or* expression is of a reference type. Compiles to a constant. */\ndeclare function isReference(value?: any): value is object | string;\n/** Tests if the specified type *or* expression can be used as a string. Compiles to a constant. */\ndeclare function isString(value?: any): value is string | String;\n/** Tests if the specified type *or* expression can be used as an array. Compiles to a constant. */\ndeclare function isArray(value?: any): value is Array;\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/** Returns the 64-bit floating-point remainder of `x/y`. */\ndeclare function fmod(x: f64, y: f64): f64;\n/** Returns the 32-bit floating-point remainder of `x/y`. */\ndeclare function fmodf(x: f32, y: f32): f32;\n\n// Standard library\n\n/** Class representing a generic, fixed-length raw binary data buffer. */\ndeclare class ArrayBuffer {\n /** The size, in bytes, of the array. */\n readonly byteLength: i32;\n /** Constructs a new array buffer of the given length in bytes. */\n constructor(length: i32);\n /** Returns a copy of this array buffer's bytes from begin, inclusive, up to end, exclusive. */\n slice(begin?: i32, end?: i32): ArrayBuffer;\n}\n\n/** Interface for a typed view on an array buffer. */\ninterface ArrayBufferView {\n [key: number]: T;\n /** The {@link ArrayBuffer} referenced by this view. */\n readonly buffer: ArrayBuffer;\n /** The offset in bytes from the start of the referenced {@link ArrayBuffer}. */\n readonly byteOffset: i32;\n /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */\n readonly byteLength: i32;\n}\n\n/* @internal */\ndeclare abstract class TypedArray implements ArrayBufferView {\n [key: number]: T;\n /** Number of bytes per element. */\n static readonly BYTES_PER_ELEMENT: usize;\n /** Constructs a new typed array. */\n constructor(length: i32);\n /** The {@link ArrayBuffer} referenced by this view. */\n readonly buffer: ArrayBuffer;\n /** The offset in bytes from the start of the referenced {@link ArrayBuffer}. */\n readonly byteOffset: i32;\n /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */\n readonly byteLength: i32;\n /** The length (in elements). */\n readonly length: i32;\n /** Returns a new TypedArray of this type on the same ArrayBuffer from begin inclusive to end exclusive. */\n subarray(begin?: i32, end?: i32): this;\n}\n\n/** An array of twos-complement 8-bit signed integers. */\ndeclare class Int8Array extends TypedArray {}\n/** An array of 8-bit unsigned integers. */\ndeclare class Uint8Array extends TypedArray {}\n/** An array of twos-complement 16-bit signed integers. */\ndeclare class Int16Array extends TypedArray {}\n/** An array of 16-bit unsigned integers. */\ndeclare class Uint16Array extends TypedArray {}\n/** An array of twos-complement 32-bit signed integers. */\ndeclare class Int32Array extends TypedArray {}\n/** An array of 32-bit unsigned integers. */\ndeclare class Uint32Array extends TypedArray {}\n/** An array of twos-complement 64-bit signed integers. */\ndeclare class Int64Array extends TypedArray {}\n/** An array of 64-bit unsigned integers. */\ndeclare class Uint64Array extends TypedArray {}\n/** An array of 32-bit floating point numbers. */\ndeclare class Float32Array extends TypedArray {}\n/** An array of 64-bit floating point numbers. */\ndeclare class Float64Array extends TypedArray {}\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 every(callbackfn: (element: T, index: i32, array?: Array) => bool): bool;\n findIndex(predicate: (element: T, index: i32, array?: Array) => bool): i32;\n includes(searchElement: T, fromIndex?: i32): bool;\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n forEach(callbackfn: (value: T, index: i32, array: Array) => void): void;\n map(callbackfn: (value: T, index: i32, array: Array) => U): Array;\n filter(callbackfn: (value: T, index: i32, array: Array) => bool): Array;\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U;\n reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U;\n shift(): T;\n some(callbackfn: (element: T, index: i32, array?: Array) => bool): bool;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n sort(comparator?: (a: T, b: T) => i32): this;\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 repeat(count?: i32): string;\n toString(): 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\ninterface IMath {\n /** The base of natural logarithms, e, approximately 2.718. */\n readonly E: T;\n /** The natural logarithm of 2, approximately 0.693. */\n readonly LN2: T;\n /** The natural logarithm of 10, approximately 2.302. */\n readonly LN10: T;\n /** The base 2 logarithm of e, approximately 1.442. */\n readonly LOG2E: T;\n /** The base 10 logarithm of e, approximately 0.434. */\n readonly LOG10E: T;\n /** The ratio of the circumference of a circle to its diameter, approximately 3.14159. */\n readonly PI: T;\n /** The square root of 1/2, approximately 0.707. */\n readonly SQRT1_2: T;\n /** The square root of 2, approximately 1.414. */\n readonly SQRT2: T;\n /** Returns the absolute value of `x`. */\n abs(x: T): T;\n /** Returns the arccosine (in radians) of `x`. */\n acos(x: T): T;\n /** Returns the hyperbolic arc-cosine of `x`. */\n acosh(x: T): T;\n /** Returns the arcsine (in radians) of `x` */\n asin(x: T): T;\n /** Returns the hyperbolic arcsine of `x`. */\n asinh(x: T): T;\n /** Returns the arctangent (in radians) of `x`. */\n atan(x: T): T;\n /** Returns the arctangent of the quotient of its arguments. */\n atan2(y: T, x: T): T;\n /** Returns the hyperbolic arctangent of `x`. */\n atanh(x: T): T;\n /** Returns the cube root of `x`. */\n cbrt(x: T): T;\n /** Returns the smallest integer greater than or equal to `x`. */\n ceil(x: T): T;\n /** Returns the number of leading zero bits in the 32-bit binary representation of `x`. */\n clz32(x: T): T;\n /** Returns the cosine (in radians) of `x`. */\n cos(x: T): T;\n /** Returns the hyperbolic cosine of `x`. */\n cosh(x: T): T;\n /** Returns e to the power of `x`. */\n exp(x: T): T;\n /** Returns e to the power of `x`, minus 1. */\n expm1(x: T): T;\n /** Returns the largest integer less than or equal to `x`. */\n floor(x: T): T;\n /** Returns the nearest 32-bit single precision float representation of `x`. */\n fround(x: T): f32;\n /** Returns the square root of the sum of squares of its arguments. */\n hypot(value1: T, value2: T): T; // TODO: rest\n /** Returns the result of the C-like 32-bit multiplication of `a` and `b`. */\n imul(a: T, b: T): T;\n /** Returns the natural logarithm (base e) of `x`. */\n log(x: T): T;\n /** Returns the base 10 logarithm of `x`. */\n log10(x: T): T;\n /** Returns the natural logarithm (base e) of 1 + `x`. */\n log1p(x: T): T;\n /** Returns the base 2 logarithm of `x`. */\n log2(x: T): T;\n /** Returns the largest-valued number of its arguments. */\n max(value1: T, value2: T): T; // TODO: rest\n /** Returns the lowest-valued number of its arguments. */\n min(value1: T, value2: T): T; // TODO: rest\n /** Returns `base` to the power of `exponent`. */\n pow(base: T, exponent: T): T;\n /** Returns a pseudo-random number in the range from 0.0 inclusive up to but not including 1.0. */\n random(): T;\n /** Returns the value of `x` rounded to the nearest integer. */\n round(x: T): T;\n /** Returns the sign of `x`, indicating whether the number is positive, negative or zero. */\n sign(x: T): T;\n /** Returns the sine of `x`. */\n sin(x: T): T;\n /** Returns the hyperbolic sine of `x`. */\n sinh(x: T): T;\n /** Returns the square root of `x`. */\n sqrt(x: T): T;\n /** Returns the tangent of `x`. */\n tan(x: T): T;\n /** Returns the hyperbolic tangent of `x`. */\n tanh(x: T): T;\n /** Returns the integer part of `x` by removing any fractional digits. */\n trunc(x: T): T;\n}\n\ninterface INativeMath extends IMath {\n /** Seeds the random number generator. */\n seedRandom(value: i64): void;\n /** Returns the floating-point remainder of `x / y` (rounded towards zero). */\n mod(x: T, y: T): T;\n /** Returns the floating-point remainder of `x / y` (rounded to nearest). */\n rem(x: T, y: T): T;\n}\n\n/** Double precision math imported from JavaScript. */\ndeclare const JSMath: IMath;\n/** Double precision math implemented natively. */\ndeclare const NativeMath: INativeMath;\n/** Single precision math implemented natively. */\ndeclare const NativeMathf: INativeMath;\n/** Alias of {@link NativeMath} or {@link JSMath} respectively. Defaults to `NativeMath`. */\ndeclare const Math: IMath;\n/** Alias of {@link NativeMathf} or {@link JSMath} respectively. Defaults to `NativeMathf`. */\ndeclare const Mathf: IMath;\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 for the specified `token`. */\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 as being sealed / non-derivable. */\ndeclare function sealed(target: Function): any;\n\n/** Annotates a method or function as always inlined. */\ndeclare function inline(target: any, propertyKey: any, descriptor: any): any;\n",portable:"/**\n * Environment definitions for compiling AssemblyScript to JavaScript using tsc.\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\n * value of 2^53-1) and instead require a compatibility layer to work in JS as well, as for example\n * {@link glue/js/i64} respectively {@link glue/wasm/i64}.\n *\n * @module std/portable\n *//***/\n\n// Portable types\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 /** Smallest representable value. */\n export const MIN_VALUE: i8;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: i16;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: i32;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: isize;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u8;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u16;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: u32;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: usize;\n /** Largest representable value. */\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 /** Smallest representable value. */\n export const MIN_VALUE: bool;\n /** Largest representable value. */\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 representable value. */\n export const MIN_VALUE: f32;\n /** Largest representable value. */\n export const MAX_VALUE: f32;\n /** Smallest normalized positive value. */\n export const MIN_POSITIVE_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 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n /** Smallest representable value. */\n export const MIN_VALUE: f64;\n /** Largest representable value. */\n export const MAX_VALUE: f64;\n /** Smallest normalized positive value. */\n export const MIN_POSITIVE_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// 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/** Performs the sign-agnostic count tailing zero bits operation on a 32-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 integer. */\ndeclare function popcnt(value: T): T;\n/** Performs the sign-agnostic rotate left operation on a 32-bit integer. */\ndeclare function rotl(value: T, shift: T): T;\n/** Performs the sign-agnostic rotate right operation on a 32-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/** 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 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/** Rounds to the nearest integer tied to even of a 32-bit or 64-bit float. */\ndeclare function nearest(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/** Explicitly requests no bounds checks on the provided expression. Useful for array accesses. */\ndeclare function unchecked(value: T): 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/** Tests if the specified value is a valid integer. Can't distinguish an integer from an integral float. */\ndeclare function isInteger(value: any): value is number;\n/** Tests if the specified value is a valid float. Can't distinguish a float from an integer. */\ndeclare function isFloat(value: any): value is number;\n/** Tests if the specified value is of a reference type. */\ndeclare function isReference(value: any): value is object | string;\n/** Tests if the specified value can be used as a string. */\ndeclare function isString(value: any): value is string | String;\n/** Tests if the specified value can be used as an array. */\ndeclare function isArray(value: any): value is Array;\n/** Traps if the specified value is not true-ish, otherwise returns the value. */\ndeclare function assert(isTrueish: T | null, message?: string): T;\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/** Returns the 64-bit floating-point remainder of `x/y`. */\ndeclare function fmod(x: f64, y: f64): f64;\n/** Returns the 32-bit floating-point remainder of `x/y`. */\ndeclare function fmodf(x: f32, y: f32): f32;\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\n/** Class representing a generic, fixed-length raw binary data buffer. */\ndeclare class ArrayBuffer {\n /** The size, in bytes, of the array. */\n readonly byteLength: i32;\n /** Constructs a new array buffer of the given length in bytes. */\n constructor(length: i32);\n /** Returns a copy of this array buffer's bytes from begin, inclusive, up to end, exclusive. */\n slice(begin?: i32, end?: i32): ArrayBuffer;\n}\n\ndeclare class Array {\n [key: number]: T;\n length: i32;\n constructor(capacity?: i32);\n every(callbackfn: (element: T, index: i32, array?: Array) => bool): bool;\n findIndex(predicate: (element: T, index: i32, array?: Array) => bool): i32;\n includes(searchElement: T, fromIndex?: i32): bool;\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n forEach(callbackfn: (value: T, index: i32, array: Array) => void): void;\n map(callbackfn: (value: T, index: i32, array: Array) => U): Array;\n filter(callbackfn: (value: T, index: i32, array: Array) => bool): Array;\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U;\n reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U;\n shift(): T;\n some(callbackfn: (element: T, index: i32, array?: Array) => bool): bool;\n unshift(element: T): i32;\n slice(from?: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n sort(comparator?: (a: T, b: T) => i32): this;\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\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: i32;\n\n private constructor();\n\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 repeat(count?: i32): 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\ninterface IMath {\n readonly E: f64;\n readonly LN2: f64;\n readonly LN10: f64;\n readonly LOG2E: f64;\n readonly LOG10E: f64;\n readonly PI: f64;\n readonly SQRT1_2: f64;\n readonly SQRT2: f64;\n abs(x: f64): f64;\n acos(x: f64): f64;\n acosh(x: f64): f64;\n asin(x: f64): f64;\n asinh(x: f64): f64;\n atan(x: f64): f64;\n atan2(y: f64, x: f64): f64;\n atanh(x: f64): f64;\n cbrt(x: f64): f64;\n ceil(x: f64): f64;\n clz32(x: f64): i32;\n cos(x: f64): f64;\n cosh(x: f64): f64;\n exp(x: f64): f64;\n expm1(x: f64): f64;\n floor(x: f64): f64;\n fround(x: f64): f32;\n hypot(value1: f64, value2: f64): f64; // TODO: see std/math\n imul(a: f64, b: f64): i32;\n log(x: f64): f64;\n log10(x: f64): f64;\n log1p(x: f64): f64;\n log2(x: f64): f64;\n max(value1: f64, value2: f64): f64; // TODO: see std/math\n min(value1: f64, value2: f64): f64; // TODO: see std/math\n pow(base: f64, exponent: f64): f64;\n random(): f64;\n round(x: f64): f64;\n sign(x: f64): f64;\n sin(x: f64): f64;\n sinh(x: f64): f64;\n sqrt(x: f64): f64;\n tan(x: f64): f64;\n tanh(x: f64): f64;\n trunc(x: f64): f64;\n}\n\ndeclare const Math: IMath;\ndeclare const Mathf: IMath;\ndeclare const JSMath: IMath;\n\ndeclare namespace console {\n /** @deprecated */\n function log(message: string): void;\n}\n"}):(()=>{const e=path.join(".","..","std");return{assembly:fs.readFileSync(path.join(e,"assembly.d.ts"),"utf8"),portable:fs.readFileSync(path.join(e,"portable.d.ts"),"utf8")}})(),exports.compileString=((e,n)=>{"string"==typeof e&&(e={"input.ts":e});const t=Object.create({stdout:createMemoryStream(),stderr:createMemoryStream(),binary:null,text:null});return exports.main(["--binaryFile","binary","--textFile","text",...Object.keys(n||{}).map(e=>`--${e}=${n[e]}`),...Object.keys(e)],{stdout:t.stdout,stderr:t.stderr,readFile:n=>e.hasOwnProperty(n)?e[n]:null,writeFile:(e,n)=>t[e]=n,listFiles:()=>[]}),t}),exports.main=function(e,n,t){"function"==typeof n?(t=n,n={}):n||(n={});const r=n.stdout||process.stdout,i=n.stderr||process.stderr,s=n.readFile||_,a=n.writeFile||T,o=n.listFiles||E,l=n.stats||createStats();if(!r)throw Error("'options.stdout' must be specified");if(!i)throw Error("'options.stderr' must be specified");if(!fs.readFileSync){if(s===_)throw Error("'options.readFile' must be specified");if(a===T)throw Error("'options.writeFile' must be specified");if(o===E)throw Error("'options.listFiles' must be specified")}const f=parseArguments(e);if(t||(t=function(e){var n=0;return e&&(i.write(e.stack+EOL),n=1),n}),f.version)return r.write("Version "+exports.version+(isDev?"-dev":"")+EOL),t(null);if(f.help||f._.length<1){const e=[];return Object.keys(exports.options).forEach(n=>{var t=exports.options[n],r=" ";for(r+="--"+n,t.aliases&&1===t.aliases[0].length&&(r+=", -"+t.aliases[0]);r.length<24;)r+=" ";Array.isArray(t.desc)?e.push(r+t.desc[0]+t.desc.slice(1).map(e=>{for(let n=0;n<24;++n)e=" "+e;return EOL+e}).join("")):e.push(r+t.desc)}),(f.help?r:i).write(["Version "+exports.version+(isDev?"-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(EOL)+EOL),t(null)}const u=f.baseDir?path.resolve(f.baseDir):".";var c=null;f.noLib||Object.keys(exports.libraryFiles).forEach(e=>{e.indexOf("/")>=0||(l.parseCount++,l.parseTime+=measure(()=>{c=assemblyscript.parseFile(exports.libraryFiles[e],exports.libraryPrefix+e+".ts",!1,c)}))});const x=[];if(f.lib){"string"==typeof f.lib&&(f.lib=f.lib.split(",")),Array.prototype.push.apply(x,f.lib.map(e=>e.trim()));for(let e=0,n=x.length;e{c=assemblyscript.parseFile(a,exports.libraryPrefix+i,!1,c)})}}}for(let e=0,n=f._.length;e{c=assemblyscript.parseFile(r,n,!0,c)});null!=(n=c.nextFile());){if(n.startsWith(exports.libraryPrefix)){const e=n.substring(exports.libraryPrefix.length),t=n.substring(exports.libraryPrefix.length)+"/index";if(exports.libraryFiles.hasOwnProperty(e))r=exports.libraryFiles[e],n=exports.libraryPrefix+e+".ts";else if(exports.libraryFiles.hasOwnProperty(t))r=exports.libraryFiles[t],n=exports.libraryPrefix+t+".ts";else for(let i=0,a=x.length;i{assemblyscript.parseFile(r,n,!1,c)})}if(checkDiagnostics(c,i))return t(Error("Parse error"))}const p=assemblyscript.finishParsing(c),h=assemblyscript.createOptions();assemblyscript.setTarget(h,0),assemblyscript.setNoTreeShaking(h,!!f.noTreeShaking),assemblyscript.setNoAssert(h,!!f.noAssert),assemblyscript.setNoMemory(h,!!f.noMemory),assemblyscript.setImportMemory(h,!!f.importMemory),assemblyscript.setImportTable(h,!!f.importTable),assemblyscript.setMemoryBase(h,f.memoryBase>>>0),assemblyscript.setSourceMap(h,null!=f.sourceMap),assemblyscript.setGlobalAlias(h,"Math","NativeMath"),assemblyscript.setGlobalAlias(h,"Mathf","NativeMathf"),assemblyscript.setGlobalAlias(h,"abort","~lib/env/abort");var d=f.use;if(null!=d){"string"==typeof d&&(d=d.split(","));for(let e=0,n=d.length;e{try{l.compileTime+=measure(()=>{g=assemblyscript.compileProgram(p,h)})}catch(e){return t(e)}})(),checkDiagnostics(c,i))return g&&g.dispose(),t(Error("Compile error"));if(f.validate&&(l.validateCount++,l.validateTime+=measure(()=>{if(!g.validate())return g.dispose(),t(Error("Validate error"))})),"clamp"===f.trapMode)l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(["trap-mode-clamp"])});else if("js"===f.trapMode)l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(["trap-mode-js"])});else if("allow"!==f.trapMode)return g.dispose(),t(Error("Unsupported trap mode"));var m=-1,y=0,v=!f.noDebug;!1!==f.optimize&&("number"==typeof f.optimize?m=f.optimize:f[0]?m=0:f[1]?m=1:f[2]?m=2:f[3]?m=3:!0===f.optimize?(m=exports.defaultOptimizeLevel,y=exports.defaultShrinkLevel):m=0),f.s?y=1:f.z&&(y=2),"number"==typeof f.optimizeLevel&&(m=f.optimizeLevel),"number"==typeof f.shrinkLevel?y=f.shrinkLevel:"s"===f.shrinkLevel?y=1:"z"===f.shrinkLevel&&(y=2),g.setOptimizeLevel(m>0?m:0),g.setShrinkLevel(y),g.setDebugInfo(v);var F=[];if(f.runPasses&&("string"==typeof f.runPasses&&(f.runPasses=f.runPasses.split(",")),f.runPasses.length&&f.runPasses.forEach(e=>{F.indexOf(e)<0&&F.push(e)})),m>=0&&(l.optimizeCount++,l.optimizeTime+=measure(()=>{g.optimize()})),F.length&&(l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(F.map(e=>e.trim()))})),!f.noEmit){let e=!1,n=!1;if(null!=f.outFile&&(/\.was?t$/.test(f.outFile)&&null==f.textFile?f.textFile=f.outFile:/\.js$/.test(f.outFile)&&null==f.asmjsFile?f.asmjsFile=f.outFile:null==f.binaryFile&&(f.binaryFile=f.outFile)),null!=f.binaryFile){let r,o=null!=f.sourceMap?f.sourceMap.length?f.sourceMap:path.basename(f.binaryFile)+".map":null;if(l.emitCount++,l.emitTime+=measure(()=>{r=g.toBinary(o)}),f.binaryFile.length?a(path.join(u,f.binaryFile),r.output):(z(r.output),e=!0),n=!0,null!=r.sourceMap)if(f.binaryFile.length){let e=JSON.parse(r.sourceMap);e.sourceRoot=exports.sourceMapRoot,e.sources.forEach((n,r)=>{let i=null;if(n.startsWith(exports.libraryPrefix)){let e=n.substring(exports.libraryPrefix.length).replace(/\.ts$/,"");if(exports.libraryFiles.hasOwnProperty(e))i=exports.libraryFiles[e];else for(let e=0,t=x.length;e{t=g.toAsmjs()}),a(path.join(u,f.asmjsFile),t)):e||(l.emitCount++,l.emitTime+=measure(()=>{t=g.toAsmjs()}),z(t),e=!0),n=!0}if(null!=f.idlFile){let t;f.idlFile.length?(l.emitCount++,l.emitTime+=measure(()=>{t=assemblyscript.buildIDL(p)}),a(path.join(u,f.idlFile),t)):e||(l.emitCount++,l.emitTime+=measure(()=>{t=assemblyscript.buildIDL(p)}),z(t),e=!0),n=!0}if(null!=f.tsdFile){let t;f.tsdFile.length?(l.emitCount++,l.emitTime+=measure(()=>{t=assemblyscript.buildTSD(p)}),a(path.join(u,f.tsdFile),t)):e||(l.emitCount++,l.emitTime+=measure(()=>{t=assemblyscript.buildTSD(p)}),z(t),e=!0),n=!0}if(null!=f.textFile||!n){let n;f.textFile&&f.textFile.length?(l.emitCount++,l.emitTime+=measure(()=>{n=g.toText()}),a(path.join(u,f.textFile),n)):e||(l.emitCount++,l.emitTime+=measure(()=>{n=g.toText()}),z(n))}}return g.dispose(),f.measure&&printStats(l,i),t(null);function _(e){try{let n;return l.readCount++,l.readTime+=measure(()=>{n=fs.readFileSync(e,{encoding:"utf8"})}),n}catch(e){return null}}function T(e,n){try{return l.writeCount++,l.writeTime+=measure(()=>{"string"==typeof n?fs.writeFileSync(e,n,{encoding:"utf8"}):fs.writeFileSync(e,n)}),!0}catch(e){return!1}}function E(e){var n;try{return l.readTime+=measure(()=>{n=__webpack_require__(!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 z(e){z.used||(l.writeCount++,z.used=!0),l.writeTime+=measure(()=>{"string"==typeof e?r.write(e,{encoding:"utf8"}):r.write(e)})}},exports.parseArguments=parseArguments,exports.checkDiagnostics=checkDiagnostics,exports.createStats=createStats,process.hrtime||(process.hrtime=__webpack_require__(3)),exports.measure=measure,exports.formatTime=formatTime,exports.printStats=printStats;var allocBuffer=void 0!==global&&global.Buffer?global.Buffer.allocUnsafe||function(e){return new global.Buffer(e)}:function(e){return new Uint8Array(e)};function createMemoryStream(e){var n=[];return n.write=function(n){if(e&&e(n),"string"==typeof n){let e=allocBuffer(utf8.length(n));utf8.write(n,e,0),n=e}this.push(n)},n.toBuffer=function(){for(var e=0,n=0,t=this.length;n 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","if(typeof __WEBPACK_EXTERNAL_MODULE__6__ === 'undefined') {var e = new Error(\"Cannot find module \\\"assemblyscript\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__6__;","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","/**\r\n * Compiler frontend for node.js\r\n *\r\n * Uses the low-level API exported from src/index.ts so it works with the compiler compiled to\r\n * JavaScript as well as the compiler compiled to WebAssembly (eventually). Runs the sources\r\n * directly through ts-node if distribution files are not present (indicated by a `-dev` version).\r\n *\r\n * Can also be packaged as a bundle suitable for in-browser use with the standard library injected\r\n * in the build step. See dist/asc.js for the bundle and webpack.config.js for building details.\r\n *\r\n * @module asc\r\n */\r\n\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst utf8 = require(\"@protobufjs/utf8\");\r\nconst EOL = process.platform === \"win32\" ? \"\\r\\n\" : \"\\n\";\r\n\r\n// Use distribution files if present, otherwise run the sources directly\r\nvar assemblyscript, isDev;\r\n(() => {\r\n try {\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({ project: path.join(__dirname, \"..\", \"src\", \"tsconfig.json\") });\r\n require(\"../src/glue/js\");\r\n assemblyscript = require(\"../src\");\r\n isDev = true;\r\n } catch (e) {\r\n // last resort: same directory CommonJS\r\n assemblyscript = eval(\"require('./assemblyscript')\");\r\n isDev = false;\r\n }\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 : 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. */\r\nexports.libraryFiles = exports.isBundle ? BUNDLE_LIBRARY : (() => { // set up if not a bundle\r\n const libDir = path.join(__dirname, \"..\", \"std\", \"assembly\");\r\n const libFiles = require(\"glob\").sync(\"**/*.ts\", { cwd: libDir });\r\n const bundled = {};\r\n libFiles.forEach(file => bundled[file.replace(/\\.ts$/, \"\")] = fs.readFileSync(path.join(libDir, file), \"utf8\" ));\r\n return bundled;\r\n})();\r\n\r\n/** Bundled definition files. */\r\nexports.definitionFiles = exports.isBundle ? BUNDLE_DEFINITIONS : (() => { // set up if not a bundle\r\n const stdDir = path.join(__dirname, \"..\", \"std\");\r\n return {\r\n \"assembly\": fs.readFileSync(path.join(stdDir, \"assembly.d.ts\"), \"utf8\"),\r\n \"portable\": fs.readFileSync(path.join(stdDir, \"portable.d.ts\"), \"utf8\")\r\n };\r\n})();\r\n\r\n/** Convenience function that parses and compiles source strings directly. */\r\nexports.compileString = (sources, options) => {\r\n if (typeof sources === \"string\") sources = { \"input.ts\": sources };\r\n const output = Object.create({\r\n stdout: createMemoryStream(),\r\n stderr: createMemoryStream(),\r\n binary: null,\r\n text: null\r\n });\r\n exports.main([\r\n \"--binaryFile\", \"binary\",\r\n \"--textFile\", \"text\",\r\n ...Object.keys(options || {}).map(arg => `--${arg}=${options[arg]}`),\r\n ...Object.keys(sources),\r\n ], {\r\n stdout: output.stdout,\r\n stderr: output.stderr,\r\n readFile: name => sources.hasOwnProperty(name) ? sources[name] : null,\r\n writeFile: (name, contents) => output[name] = contents,\r\n listFiles: () => []\r\n });\r\n return output;\r\n}\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\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) throw Error(\"'options.stdout' must be specified\");\r\n if (!stderr) throw Error(\"'options.stderr' must be specified\");\r\n if (!fs.readFileSync) {\r\n if (readFile === readFileNode) throw Error(\"'options.readFile' must be specified\");\r\n if (writeFile === writeFileNode) throw Error(\"'options.writeFile' must be specified\");\r\n if (listFiles === listFilesNode) 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 + 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\" : \"\") + 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 }\r\n while (text.length < indent) {\r\n text += \" \";\r\n }\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 }\r\n return EOL + line;\r\n }).join(\"\"));\r\n } else {\r\n opts.push(text + option.desc);\r\n }\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(EOL) + 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) : \".\";\r\n\r\n // Begin parsing\r\n var parser = null;\r\n\r\n // Include library files\r\n if (!args.noLib) { // bundled\r\n Object.keys(exports.libraryFiles).forEach(libPath => {\r\n if (libPath.indexOf(\"/\") >= 0) return; // in sub-directory: imported on demand\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n exports.libraryFiles[libPath],\r\n exports.libraryPrefix + libPath + \".ts\",\r\n false,\r\n parser\r\n );\r\n });\r\n });\r\n }\r\n const customLibDirs = [];\r\n if (args.lib) {\r\n if (typeof args.lib === \"string\") args.lib = args.lib.split(\",\");\r\n Array.prototype.push.apply(customLibDirs, args.lib.map(lib => lib.trim()));\r\n for (let i = 0, k = customLibDirs.length; i < k; ++i) { // custom\r\n let libDir = customLibDirs[i];\r\n let libFiles;\r\n if (libDir.endsWith(\".ts\")) {\r\n libFiles = [ path.basename(libDir) ];\r\n libDir = path.dirname(libDir);\r\n } else {\r\n libFiles = listFiles(libDir);\r\n }\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) 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\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 }\r\n } else {\r\n sourcePath += \".ts\";\r\n }\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 // Process backlog\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 const plainName = sourcePath.substring(exports.libraryPrefix.length);\r\n const indexName = sourcePath.substring(exports.libraryPrefix.length) + \"/index\";\r\n if (exports.libraryFiles.hasOwnProperty(plainName)) {\r\n sourceText = exports.libraryFiles[plainName];\r\n sourcePath = exports.libraryPrefix + plainName + \".ts\";\r\n } else if (exports.libraryFiles.hasOwnProperty(indexName)) {\r\n sourceText = exports.libraryFiles[indexName];\r\n sourcePath = exports.libraryPrefix + indexName + \".ts\";\r\n } else {\r\n for (let i = 0, k = customLibDirs.length; i < k; ++i) {\r\n const dir = customLibDirs[i];\r\n sourceText = readFile(path.join(dir, plainName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + plainName + \".ts\";\r\n break;\r\n } else {\r\n sourceText = readFile(path.join(dir, indexName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + indexName + \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Otherwise try nextFile.ts, nextFile/index.ts, ~lib/nextFile.ts, ~lib/nextFile/index.ts\r\n } else {\r\n const plainName = sourcePath;\r\n const indexName = sourcePath + \"/index\";\r\n sourceText = readFile(path.join(baseDir, plainName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = plainName + \".ts\";\r\n } else {\r\n sourceText = readFile(path.join(baseDir, indexName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = indexName + \".ts\";\r\n } else if (!plainName.startsWith(\".\")) {\r\n if (exports.libraryFiles.hasOwnProperty(plainName)) {\r\n sourceText = exports.libraryFiles[plainName];\r\n sourcePath = exports.libraryPrefix + plainName + \".ts\";\r\n } else if (exports.libraryFiles.hasOwnProperty(indexName)) {\r\n sourceText = exports.libraryFiles[indexName];\r\n sourcePath = exports.libraryPrefix + indexName + \".ts\";\r\n } else {\r\n for (let i = 0, k = customLibDirs.length; i < k; ++i) {\r\n const dir = customLibDirs[i];\r\n sourceText = readFile(path.join(dir, plainName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + plainName + \".ts\";\r\n break;\r\n } else {\r\n sourceText = readFile(path.join(dir, indexName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + indexName + \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (sourceText == null) {\r\n return callback(Error(\"Import file '\" + sourcePath + \".ts' not found.\"));\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\r\n // Finish parsing\r\n const program = assemblyscript.finishParsing(parser);\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.setImportTable(compilerOptions, !!args.importTable);\r\n assemblyscript.setMemoryBase(compilerOptions, args.memoryBase >>> 0);\r\n assemblyscript.setSourceMap(compilerOptions, args.sourceMap != null);\r\n\r\n // Initialize default aliases\r\n assemblyscript.setGlobalAlias(compilerOptions, \"Math\", \"NativeMath\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"Mathf\", \"NativeMathf\");\r\n\r\n // Add or override aliases if specified\r\n var aliases = args.use;\r\n if (aliases != null) {\r\n if (typeof aliases === \"string\") aliases = aliases.split(\",\");\r\n for (let i = 0, k = aliases.length; i < k; ++i) {\r\n let part = aliases[i];\r\n let p = part.indexOf(\"=\");\r\n if (p < 0) return callback(Error(\"Global alias '\" + part + \"' is invalid.\"));\r\n let name = part.substring(0, p).trim();\r\n let alias = part.substring(p + 1).trim();\r\n if (!name.length || !alias.length) return callback(Error(\"Global alias '\" + part + \"' is invalid.\"));\r\n assemblyscript.setGlobalAlias(compilerOptions, name, alias);\r\n }\r\n }\r\n\r\n // Enable additional features if specified\r\n var features = args.enable;\r\n if (features != null) {\r\n if (typeof features === \"string\") features = features.split(\",\");\r\n for (let i = 0, k = features.length; i < k; ++i) {\r\n let name = features[i].trim();\r\n let flag = assemblyscript[\"FEATURE_\" + name.replace(/\\-/g, \"_\").toUpperCase()];\r\n if (!flag) return callback(Error(\"Feature '\" + name + \"' is unknown.\"));\r\n assemblyscript.enableFeature(compilerOptions, flag);\r\n }\r\n }\r\n\r\n var module;\r\n stats.compileCount++;\r\n (() => {\r\n try {\r\n stats.compileTime += measure(() => {\r\n module = assemblyscript.compileProgram(program, compilerOptions);\r\n });\r\n } catch (e) {\r\n return callback(e);\r\n }\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\r\n if (args[\"s\"]) {\r\n shrinkLevel = 1;\r\n } else if (args[\"z\"]) {\r\n shrinkLevel = 2;\r\n }\r\n\r\n if (typeof args.optimizeLevel === \"number\") {\r\n optimizeLevel = args.optimizeLevel;\r\n }\r\n\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\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 }\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\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 let hasOutput = 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\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 wasm;\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n wasm = module.toBinary(sourceMapURL)\r\n });\r\n\r\n if (args.binaryFile.length) {\r\n writeFile(path.join(baseDir, args.binaryFile), wasm.output);\r\n } else {\r\n writeStdout(wasm.output);\r\n hasStdout = true;\r\n }\r\n hasOutput = true;\r\n\r\n // Post-process source map\r\n if (wasm.sourceMap != null) {\r\n if (args.binaryFile.length) {\r\n let sourceMap = JSON.parse(wasm.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 let stdName = name.substring(exports.libraryPrefix.length).replace(/\\.ts$/, \"\");\r\n if (exports.libraryFiles.hasOwnProperty(stdName)) {\r\n text = exports.libraryFiles[stdName];\r\n } else {\r\n for (let i = 0, k = customLibDirs.length; i < k; ++i) {\r\n text = readFile(path.join(\r\n customLibDirs[i],\r\n name.substring(exports.libraryPrefix.length))\r\n );\r\n if (text !== null) break;\r\n }\r\n }\r\n } else {\r\n text = readFile(path.join(baseDir, name));\r\n }\r\n if (text === null) {\r\n return callback(Error(\"Source file '\" + name + \"' not found.\"));\r\n }\r\n if (!sourceMap.sourceContents) 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)\" + EOL);\r\n }\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 hasOutput = true;\r\n }\r\n\r\n // Write WebIDL\r\n if (args.idlFile != null) {\r\n let idl;\r\n if (args.idlFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n idl = assemblyscript.buildIDL(program);\r\n });\r\n writeFile(path.join(baseDir, args.idlFile), idl);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n idl = assemblyscript.buildIDL(program);\r\n });\r\n writeStdout(idl);\r\n hasStdout = true;\r\n }\r\n hasOutput = true;\r\n }\r\n\r\n // Write TypeScript definition\r\n if (args.tsdFile != null) {\r\n let tsd;\r\n if (args.tsdFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n tsd = assemblyscript.buildTSD(program);\r\n });\r\n writeFile(path.join(baseDir, args.tsdFile), tsd);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n tsd = assemblyscript.buildTSD(program);\r\n });\r\n writeStdout(tsd);\r\n hasStdout = true;\r\n }\r\n hasOutput = true;\r\n }\r\n\r\n // Write text (must be last)\r\n if (args.textFile != null || !hasOutput) {\r\n let wat;\r\n if (args.textFile && args.textFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n wat = module.toText();\r\n });\r\n writeFile(path.join(baseDir, args.textFile), wat);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n wat = module.toText()\r\n });\r\n writeStdout(wat);\r\n }\r\n }\r\n }\r\n\r\n module.dispose();\r\n if (args.measure) {\r\n printStats(stats, stderr);\r\n }\r\n return callback(null);\r\n\r\n function readFileNode(filename) {\r\n try {\r\n let 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 });\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\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 }\r\n if (opt.default !== undefined) {\r\n (opts.default || (opts.default = {}))[key] = opt.default;\r\n }\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 });\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 EOL + EOL\r\n );\r\n if (assemblyscript.isError(diagnostic)) 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) 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\nfunction formatTime(time) {\r\n return time ? (time / 1e6).toFixed(3) + \" ms\" : \"N/A\";\r\n}\r\n\r\nexports.formatTime = formatTime;\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 formatTime(time);\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(EOL) + EOL);\r\n}\r\n\r\nexports.printStats = printStats;\r\n\r\nvar allocBuffer = typeof global !== \"undefined\" && global.Buffer\r\n ? global.Buffer.allocUnsafe || function(len) { return new global.Buffer(len); }\r\n : function(len) { return new Uint8Array(len) };\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 (fn) fn(chunk);\r\n if (typeof chunk === \"string\") {\r\n let buffer = allocBuffer(utf8.length(chunk));\r\n utf8.write(chunk, buffer, 0);\r\n chunk = buffer;\r\n }\r\n this.push(chunk);\r\n };\r\n stream.toBuffer = function() {\r\n var offset = 0, i = 0, k = this.length;\r\n while (i < k) offset += this[i++].length;\r\n var buffer = allocBuffer(offset);\r\n offset = i = 0;\r\n while (i < k) {\r\n buffer.set(this[i], offset);\r\n offset += this[i].length;\r\n ++i;\r\n }\r\n return buffer;\r\n };\r\n stream.toString = function() {\r\n var buffer = this.toBuffer();\r\n return utf8.read(buffer, 0, buffer.length);\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 +{"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 \"assemblyscript\"","webpack://asc/../node_modules/@protobufjs/utf8/index.js","webpack://asc/./asc.js"],"names":["root","factory","exports","module","require","e","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__6__","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","Function","eval","window","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","undefined","notFlags","val","arg","argDefined","Number","setKey","obj","isArray","aliasIsBoolean","some","indexOf","match","next","letters","broken","j","stopEarly","apply","code","utf8","charCodeAt","read","buffer","t","chunk","String","fromCharCode","write","offset","c1","c2","fs","EOL","assemblyscript","isDev","parseArguments","options","opt","default","type","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","formatTime","time","toFixed","printStats","stats","output","format","count","stdout","install","register","project","isBundle","version","sourceMapRoot","libraryPrefix","LIBRARY_PREFIX","defaultOptimizeLevel","defaultShrinkLevel","libraryFiles","allocator/arena","allocator/buddy","allocator/emscripten","allocator/system","allocator/tlsf","array","arraybuffer","builtins","collector/itcm","error","internal/allocator","internal/array","internal/arraybuffer","internal/hash","internal/string","internal/typedarray","iterator","map","math","memory","polyfills","regexp","set","typedarray","libDir","bundled","sync","file","replace","readFileSync","definitionFiles","assembly","portable","stdDir","compileString","sources","input.ts","create","createMemoryStream","binary","text","main","readFile","writeFile","contents","listFiles","callback","readFileNode","writeFileNode","listFilesNode","err","stack","help","option","desc","line","baseDir","parser","noLib","libPath","parseFile","customLibDirs","lib","k","libFiles","endsWith","libText","sourcePath","sourceText","nextFile","startsWith","plainName","substring","indexName","program","finishParsing","compilerOptions","createOptions","setTarget","setNoTreeShaking","noTreeShaking","setNoAssert","noAssert","setNoMemory","noMemory","setImportMemory","importMemory","setImportTable","importTable","setMemoryBase","memoryBase","setSourceMap","sourceMap","setGlobalAlias","use","part","enable","flag","toUpperCase","enableFeature","compileProgram","dispose","validate","trapMode","runPasses","optimizeLevel","shrinkLevel","debugInfo","noDebug","optimize","setOptimizeLevel","setShrinkLevel","setDebugInfo","pass","noEmit","hasStdout","hasOutput","outFile","textFile","asmjsFile","binaryFile","wasm","sourceMapURL","toBinary","writeStdout","JSON","parse","sourceRoot","stdName","sourceContents","stringify","asm","toAsmjs","idlFile","idl","buildIDL","tsdFile","tsd","buildTSD","wat","toText","encoding","writeFileSync","files","used","allocBuffer","Buffer","allocUnsafe","Uint8Array","stream","toBuffer","toString","tscOptions","alwaysStrict","noImplicitAny","noImplicitReturns","noImplicitThis","noEmitOnError","strictNullChecks","experimentalDecorators","target","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((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((function webpackLoadOptionalExternalModule() { try { return require(\"assemblyscript\"); } catch(e) {} }()));\n\telse\n\t\troot[\"asc\"] = factory(root[\"assemblyscript\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__6__) {\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 = 10);\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","if(typeof __WEBPACK_EXTERNAL_MODULE__6__ === 'undefined') {var e = new Error(\"Cannot find module \\\"assemblyscript\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__6__;","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","/**\r\n * Compiler frontend for node.js\r\n *\r\n * Uses the low-level API exported from src/index.ts so it works with the compiler compiled to\r\n * JavaScript as well as the compiler compiled to WebAssembly (eventually). Runs the sources\r\n * directly through ts-node if distribution files are not present (indicated by a `-dev` version).\r\n *\r\n * Can also be packaged as a bundle suitable for in-browser use with the standard library injected\r\n * in the build step. See dist/asc.js for the bundle and webpack.config.js for building details.\r\n *\r\n * @module asc\r\n */\r\n\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst utf8 = require(\"@protobufjs/utf8\");\r\nconst EOL = process.platform === \"win32\" ? \"\\r\\n\" : \"\\n\";\r\n\r\n// Use distribution files if present, otherwise run the sources directly\r\nvar assemblyscript, isDev;\r\n(() => {\r\n try {\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({ project: path.join(__dirname, \"..\", \"src\", \"tsconfig.json\") });\r\n require(\"../src/glue/js\");\r\n assemblyscript = require(\"../src\");\r\n isDev = true;\r\n } catch (e) {\r\n // last resort: same directory CommonJS\r\n assemblyscript = eval(\"require('./assemblyscript')\");\r\n isDev = false;\r\n }\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 : 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. */\r\nexports.libraryFiles = exports.isBundle ? BUNDLE_LIBRARY : (() => { // set up if not a bundle\r\n const libDir = path.join(__dirname, \"..\", \"std\", \"assembly\");\r\n const libFiles = require(\"glob\").sync(\"**/*.ts\", { cwd: libDir });\r\n const bundled = {};\r\n libFiles.forEach(file => bundled[file.replace(/\\.ts$/, \"\")] = fs.readFileSync(path.join(libDir, file), \"utf8\" ));\r\n return bundled;\r\n})();\r\n\r\n/** Bundled definition files. */\r\nexports.definitionFiles = exports.isBundle ? BUNDLE_DEFINITIONS : (() => { // set up if not a bundle\r\n const stdDir = path.join(__dirname, \"..\", \"std\");\r\n return {\r\n \"assembly\": fs.readFileSync(path.join(stdDir, \"assembly.d.ts\"), \"utf8\"),\r\n \"portable\": fs.readFileSync(path.join(stdDir, \"portable.d.ts\"), \"utf8\")\r\n };\r\n})();\r\n\r\n/** Convenience function that parses and compiles source strings directly. */\r\nexports.compileString = (sources, options) => {\r\n if (typeof sources === \"string\") sources = { \"input.ts\": sources };\r\n const output = Object.create({\r\n stdout: createMemoryStream(),\r\n stderr: createMemoryStream(),\r\n binary: null,\r\n text: null\r\n });\r\n exports.main([\r\n \"--binaryFile\", \"binary\",\r\n \"--textFile\", \"text\",\r\n ...Object.keys(options || {}).map(arg => `--${arg}=${options[arg]}`),\r\n ...Object.keys(sources),\r\n ], {\r\n stdout: output.stdout,\r\n stderr: output.stderr,\r\n readFile: name => sources.hasOwnProperty(name) ? sources[name] : null,\r\n writeFile: (name, contents) => output[name] = contents,\r\n listFiles: () => []\r\n });\r\n return output;\r\n}\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\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) throw Error(\"'options.stdout' must be specified\");\r\n if (!stderr) throw Error(\"'options.stderr' must be specified\");\r\n if (!fs.readFileSync) {\r\n if (readFile === readFileNode) throw Error(\"'options.readFile' must be specified\");\r\n if (writeFile === writeFileNode) throw Error(\"'options.writeFile' must be specified\");\r\n if (listFiles === listFilesNode) 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 + 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\" : \"\") + 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 }\r\n while (text.length < indent) {\r\n text += \" \";\r\n }\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 }\r\n return EOL + line;\r\n }).join(\"\"));\r\n } else {\r\n opts.push(text + option.desc);\r\n }\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(EOL) + 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) : \".\";\r\n\r\n // Begin parsing\r\n var parser = null;\r\n\r\n // Include library files\r\n if (!args.noLib) { // bundled\r\n Object.keys(exports.libraryFiles).forEach(libPath => {\r\n if (libPath.indexOf(\"/\") >= 0) return; // in sub-directory: imported on demand\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n exports.libraryFiles[libPath],\r\n exports.libraryPrefix + libPath + \".ts\",\r\n false,\r\n parser\r\n );\r\n });\r\n });\r\n }\r\n const customLibDirs = [];\r\n if (args.lib) {\r\n if (typeof args.lib === \"string\") args.lib = args.lib.split(\",\");\r\n Array.prototype.push.apply(customLibDirs, args.lib.map(lib => lib.trim()));\r\n for (let i = 0, k = customLibDirs.length; i < k; ++i) { // custom\r\n let libDir = customLibDirs[i];\r\n let libFiles;\r\n if (libDir.endsWith(\".ts\")) {\r\n libFiles = [ path.basename(libDir) ];\r\n libDir = path.dirname(libDir);\r\n } else {\r\n libFiles = listFiles(libDir);\r\n }\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) 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\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 }\r\n } else {\r\n sourcePath += \".ts\";\r\n }\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 // Process backlog\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 const plainName = sourcePath.substring(exports.libraryPrefix.length);\r\n const indexName = sourcePath.substring(exports.libraryPrefix.length) + \"/index\";\r\n if (exports.libraryFiles.hasOwnProperty(plainName)) {\r\n sourceText = exports.libraryFiles[plainName];\r\n sourcePath = exports.libraryPrefix + plainName + \".ts\";\r\n } else if (exports.libraryFiles.hasOwnProperty(indexName)) {\r\n sourceText = exports.libraryFiles[indexName];\r\n sourcePath = exports.libraryPrefix + indexName + \".ts\";\r\n } else {\r\n for (let i = 0, k = customLibDirs.length; i < k; ++i) {\r\n const dir = customLibDirs[i];\r\n sourceText = readFile(path.join(dir, plainName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + plainName + \".ts\";\r\n break;\r\n } else {\r\n sourceText = readFile(path.join(dir, indexName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + indexName + \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Otherwise try nextFile.ts, nextFile/index.ts, ~lib/nextFile.ts, ~lib/nextFile/index.ts\r\n } else {\r\n const plainName = sourcePath;\r\n const indexName = sourcePath + \"/index\";\r\n sourceText = readFile(path.join(baseDir, plainName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = plainName + \".ts\";\r\n } else {\r\n sourceText = readFile(path.join(baseDir, indexName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = indexName + \".ts\";\r\n } else if (!plainName.startsWith(\".\")) {\r\n if (exports.libraryFiles.hasOwnProperty(plainName)) {\r\n sourceText = exports.libraryFiles[plainName];\r\n sourcePath = exports.libraryPrefix + plainName + \".ts\";\r\n } else if (exports.libraryFiles.hasOwnProperty(indexName)) {\r\n sourceText = exports.libraryFiles[indexName];\r\n sourcePath = exports.libraryPrefix + indexName + \".ts\";\r\n } else {\r\n for (let i = 0, k = customLibDirs.length; i < k; ++i) {\r\n const dir = customLibDirs[i];\r\n sourceText = readFile(path.join(dir, plainName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + plainName + \".ts\";\r\n break;\r\n } else {\r\n sourceText = readFile(path.join(dir, indexName + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + indexName + \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (sourceText == null) {\r\n return callback(Error(\"Import file '\" + sourcePath + \".ts' not found.\"));\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\r\n // Finish parsing\r\n const program = assemblyscript.finishParsing(parser);\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.setImportTable(compilerOptions, !!args.importTable);\r\n assemblyscript.setMemoryBase(compilerOptions, args.memoryBase >>> 0);\r\n assemblyscript.setSourceMap(compilerOptions, args.sourceMap != null);\r\n\r\n // Initialize default aliases\r\n assemblyscript.setGlobalAlias(compilerOptions, \"Math\", \"NativeMath\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"Mathf\", \"NativeMathf\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"abort\", \"~lib/env/abort\");\r\n\r\n // Add or override aliases if specified\r\n var aliases = args.use;\r\n if (aliases != null) {\r\n if (typeof aliases === \"string\") aliases = aliases.split(\",\");\r\n for (let i = 0, k = aliases.length; i < k; ++i) {\r\n let part = aliases[i];\r\n let p = part.indexOf(\"=\");\r\n if (p < 0) return callback(Error(\"Global alias '\" + part + \"' is invalid.\"));\r\n let name = part.substring(0, p).trim();\r\n let alias = part.substring(p + 1).trim();\r\n if (!name.length || !alias.length) return callback(Error(\"Global alias '\" + part + \"' is invalid.\"));\r\n assemblyscript.setGlobalAlias(compilerOptions, name, alias);\r\n }\r\n }\r\n\r\n // Enable additional features if specified\r\n var features = args.enable;\r\n if (features != null) {\r\n if (typeof features === \"string\") features = features.split(\",\");\r\n for (let i = 0, k = features.length; i < k; ++i) {\r\n let name = features[i].trim();\r\n let flag = assemblyscript[\"FEATURE_\" + name.replace(/\\-/g, \"_\").toUpperCase()];\r\n if (!flag) return callback(Error(\"Feature '\" + name + \"' is unknown.\"));\r\n assemblyscript.enableFeature(compilerOptions, flag);\r\n }\r\n }\r\n\r\n var module;\r\n stats.compileCount++;\r\n (() => {\r\n try {\r\n stats.compileTime += measure(() => {\r\n module = assemblyscript.compileProgram(program, compilerOptions);\r\n });\r\n } catch (e) {\r\n return callback(e);\r\n }\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\r\n if (args[\"s\"]) {\r\n shrinkLevel = 1;\r\n } else if (args[\"z\"]) {\r\n shrinkLevel = 2;\r\n }\r\n\r\n if (typeof args.optimizeLevel === \"number\") {\r\n optimizeLevel = args.optimizeLevel;\r\n }\r\n\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\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 }\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\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 let hasOutput = 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\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 wasm;\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n wasm = module.toBinary(sourceMapURL)\r\n });\r\n\r\n if (args.binaryFile.length) {\r\n writeFile(path.join(baseDir, args.binaryFile), wasm.output);\r\n } else {\r\n writeStdout(wasm.output);\r\n hasStdout = true;\r\n }\r\n hasOutput = true;\r\n\r\n // Post-process source map\r\n if (wasm.sourceMap != null) {\r\n if (args.binaryFile.length) {\r\n let sourceMap = JSON.parse(wasm.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 let stdName = name.substring(exports.libraryPrefix.length).replace(/\\.ts$/, \"\");\r\n if (exports.libraryFiles.hasOwnProperty(stdName)) {\r\n text = exports.libraryFiles[stdName];\r\n } else {\r\n for (let i = 0, k = customLibDirs.length; i < k; ++i) {\r\n text = readFile(path.join(\r\n customLibDirs[i],\r\n name.substring(exports.libraryPrefix.length))\r\n );\r\n if (text !== null) break;\r\n }\r\n }\r\n } else {\r\n text = readFile(path.join(baseDir, name));\r\n }\r\n if (text === null) {\r\n return callback(Error(\"Source file '\" + name + \"' not found.\"));\r\n }\r\n if (!sourceMap.sourceContents) 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)\" + EOL);\r\n }\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 hasOutput = true;\r\n }\r\n\r\n // Write WebIDL\r\n if (args.idlFile != null) {\r\n let idl;\r\n if (args.idlFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n idl = assemblyscript.buildIDL(program);\r\n });\r\n writeFile(path.join(baseDir, args.idlFile), idl);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n idl = assemblyscript.buildIDL(program);\r\n });\r\n writeStdout(idl);\r\n hasStdout = true;\r\n }\r\n hasOutput = true;\r\n }\r\n\r\n // Write TypeScript definition\r\n if (args.tsdFile != null) {\r\n let tsd;\r\n if (args.tsdFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n tsd = assemblyscript.buildTSD(program);\r\n });\r\n writeFile(path.join(baseDir, args.tsdFile), tsd);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n tsd = assemblyscript.buildTSD(program);\r\n });\r\n writeStdout(tsd);\r\n hasStdout = true;\r\n }\r\n hasOutput = true;\r\n }\r\n\r\n // Write text (must be last)\r\n if (args.textFile != null || !hasOutput) {\r\n let wat;\r\n if (args.textFile && args.textFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n wat = module.toText();\r\n });\r\n writeFile(path.join(baseDir, args.textFile), wat);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n wat = module.toText()\r\n });\r\n writeStdout(wat);\r\n }\r\n }\r\n }\r\n\r\n module.dispose();\r\n if (args.measure) {\r\n printStats(stats, stderr);\r\n }\r\n return callback(null);\r\n\r\n function readFileNode(filename) {\r\n try {\r\n let 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 });\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\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 }\r\n if (opt.default !== undefined) {\r\n (opts.default || (opts.default = {}))[key] = opt.default;\r\n }\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 });\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 EOL + EOL\r\n );\r\n if (assemblyscript.isError(diagnostic)) 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) 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\nfunction formatTime(time) {\r\n return time ? (time / 1e6).toFixed(3) + \" ms\" : \"N/A\";\r\n}\r\n\r\nexports.formatTime = formatTime;\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 formatTime(time);\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(EOL) + EOL);\r\n}\r\n\r\nexports.printStats = printStats;\r\n\r\nvar allocBuffer = typeof global !== \"undefined\" && global.Buffer\r\n ? global.Buffer.allocUnsafe || function(len) { return new global.Buffer(len); }\r\n : function(len) { return new Uint8Array(len) };\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 (fn) fn(chunk);\r\n if (typeof chunk === \"string\") {\r\n let buffer = allocBuffer(utf8.length(chunk));\r\n utf8.write(chunk, buffer, 0);\r\n chunk = buffer;\r\n }\r\n this.push(chunk);\r\n };\r\n stream.toBuffer = function() {\r\n var offset = 0, i = 0, k = this.length;\r\n while (i < k) offset += this[i++].length;\r\n var buffer = allocBuffer(offset);\r\n offset = i = 0;\r\n while (i < k) {\r\n buffer.set(this[i], offset);\r\n offset += this[i].length;\r\n ++i;\r\n }\r\n return buffer;\r\n };\r\n stream.toString = function() {\r\n var buffer = this.toBuffer();\r\n return utf8.read(buffer, 0, buffer.length);\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 68224ee6..a38b0227 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){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=28)}([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)}),a=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}}}},s=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),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.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 s};Object.defineProperty(t,"__esModule",{value:!0});var o=r(2),c=r(7),p=r(4),l=r(3);t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER;var u,h=function(){return function(){}}(),d=function(){return function(){}}(),_=function(){return function(){}}();function y(e){switch(e){case"[]":return u.INDEXED_GET;case"[]=":return u.INDEXED_SET;case"{}":return u.UNCHECKED_INDEXED_GET;case"{}=":return u.UNCHECKED_INDEXED_SET;case"+":return u.ADD;case"-":return u.SUB;case"*":return u.MUL;case"/":return u.DIV;case"%":return u.REM;case"**":return u.POW;case"&":return u.AND;case"|":return u.OR;case"^":return u.XOR;case"==":return u.EQ;case"!=":return u.NE;case">":return u.GT;case">=":return u.GE;case"<":return u.LT;case"<=":return u.LE}return u.INVALID}!function(e){e[e.INVALID=0]="INVALID",e[e.INDEXED_GET=1]="INDEXED_GET",e[e.INDEXED_SET=2]="INDEXED_SET",e[e.UNCHECKED_INDEXED_GET=3]="UNCHECKED_INDEXED_GET",e[e.UNCHECKED_INDEXED_SET=4]="UNCHECKED_INDEXED_SET",e[e.ADD=5]="ADD",e[e.SUB=6]="SUB",e[e.MUL=7]="MUL",e[e.DIV=8]="DIV",e[e.REM=9]="REM",e[e.POW=10]="POW",e[e.AND=11]="AND",e[e.OR=12]="OR",e[e.XOR=13]="XOR",e[e.EQ=14]="EQ",e[e.NE=15]="NE",e[e.GT=16]="GT",e[e.GE=17]="GE",e[e.LT=18]="LT",e[e.LE=19]="LE"}(u=t.OperatorKind||(t.OperatorKind={}));var m,g,f,E=new Map,T=function(e){function r(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elementsLookup=new Map,r.instancesLookup=new Map,r.typesLookup=E,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayPrototype=null,r.arrayBufferViewPrototype=null,r.stringInstance=null,r.resolvedThisExpression=null,r.resolvedElementExpression=null,r.sources=[],r}return i(r,e),r.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r",u+="<"+I+">")}else if(r){var v=r.get(u);if(v)return v}}return(_=this.typesLookup.get(h))||(_=this.typesLookup.get(u))?_:(n&&this.error(o.DiagnosticCode.Cannot_find_name_0,s.name.range,u),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,p.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),c=0;c"),n=new x(this,K,w,C||l,t),this.instances.set(r,n),this.program.instancesLookup.set(K,n),n},r.prototype.resolvePartial=function(e){assert(this.is(g.INSTANCE));var n=assert(this.classPrototype);if(!e||!e.length)return this;var i=this.simpleName,a=c.typesToString(e),s=new r(this.program,i,n.internalName+"<"+a+">"+t.INSTANCE_DELIMITER+i,this.declaration,n,this.decoratorFlags);return s.flags=this.flags,s.operatorKind=this.operatorKind,s.classTypeArguments=e,s},r.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;return!this.is(g.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},r.prototype.resolveBuiltinTypeArguments=function(e,t){assert(this.is(g.BUILTIN));var r=null;if(e){var n=e.length;r=new Array(n);for(var i=0;i=0),assert(null!=e.type),e.type.toNativeType()){case l.NativeType.I32:t=this.tempI32s||(this.tempI32s=[]);break;case l.NativeType.I64:t=this.tempI64s||(this.tempI64s=[]);break;case l.NativeType.F32:t=this.tempF32s||(this.tempF32s=[]);break;case l.NativeType.F64:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case l.NativeType.I32:r=this.tempI32s||(this.tempI32s=[]);break;case l.NativeType.I64:r=this.tempI64s||(this.tempI64s=[]);break;case l.NativeType.F32:r=this.tempF32s||(this.tempF32s=[]);break;case l.NativeType.F64:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},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)for(var r=this.debugLocations,n=0,i=r.length;n",S+="<"+n+">"),(i=new P(this,C,S,e,A)).contextualTypeArguments=r,this.instances.set(n,i),this.program.instancesLookup.set(S,i);var O,L,b,k,x,R,B,D,w=0;if(A&&(w=A.currentMemoryOffset,A.members)){i.members||(i.members=new Map);try{for(var M=a(A.members.values()),G=M.next();!G.done;G=M.next()){var K=G.value;i.members.set(K.simpleName,K)}}catch(e){b={error:e}}finally{try{G&&!G.done&&(k=M.return)&&k.call(M)}finally{if(b)throw b.error}}}if(this.constructorPrototype){var z=this.constructorPrototype.resolvePartial(e);z&&(i.constructorInstance=z.resolve())}if(this.instanceMembers)try{for(var V=a(this.instanceMembers.values()),H=V.next();!H.done;H=V.next()){var X=H.value;switch(X.kind){case m.FIELD_PROTOTYPE:i.members||(i.members=new Map);var W=X.declaration;if(!W.type)throw new Error("type expected");var Y=this.program.resolveType(W.type,i.contextualTypeArguments);if(Y){var Q=new U(X,S+t.INSTANCE_DELIMITER+X.simpleName,Y,W,i);switch(Y.byteSize){case 1:break;case 2:1&w&&++w;break;case 4:3&w&&(w=1+(3|w));break;case 8:7&w&&(w=1+(7|w));break;default:assert(!1)}Q.memoryOffset=w,w+=Y.byteSize,i.members.set(X.simpleName,Q)}break;case m.FUNCTION_PROTOTYPE:i.members||(i.members=new Map);var q=X.resolvePartial(e);q&&(q.internalName=S+t.INSTANCE_DELIMITER+q.simpleName,i.members.set(X.simpleName,q));break;case m.PROPERTY:i.members||(i.members=new Map);var j=assert(X.getterPrototype),Z=X.setterPrototype,$=new F(this.program,X.simpleName,S+t.INSTANCE_DELIMITER+X.simpleName,this),J=j.resolvePartial(e);if(!J)return null;if(J.internalName=S+t.INSTANCE_DELIMITER+J.simpleName,$.getterPrototype=J,Z){var ee=Z.resolvePartial(e);if(!ee)return null;ee.internalName=S+t.INSTANCE_DELIMITER+ee.simpleName,$.setterPrototype=ee}i.members.set(X.simpleName,$);break;default:assert(!1)}}}catch(e){x={error:e}}finally{try{H&&!H.done&&(R=V.return)&&R.call(V)}finally{if(x)throw x.error}}try{for(var te=a(this.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=s(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=u.INVALID);var se=void 0;if(ae.is(g.INSTANCE)){var oe=ae.resolvePartial(e);if(!oe)continue;se=oe.resolve()}else se=ae.resolve();if(se){var ce=i.overloads;ce||(i.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){B={error:e}}finally{try{re&&!re.done&&(D=te.return)&&D.call(te)}finally{if(B)throw B.error}}return i.currentMemoryOffset=w,i},r.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;if(this.is(g.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)},r.prototype.toString=function(){return this.simpleName},r}(v);t.ClassPrototype=D;var P=function(e){function t(t,r,n,i,o){void 0===i&&(i=null),void 0===o&&(o=null);var c=e.call(this,t.program,r,n)||this;if(c.kind=m.CLASS,c.contextualTypeArguments=null,c.currentMemoryOffset=0,c.constructorInstance=null,c.overloads=null,c.prototype=t,c.flags=t.flags,c.decoratorFlags=t.decoratorFlags,c.typeArguments=i,c.type=t.program.options.usizeType.asClass(c),c.base=o,o){var p=o.contextualTypeArguments;if(p){c.contextualTypeArguments||(c.contextualTypeArguments=new Map);try{for(var l=a(p),u=l.next();!u.done;u=l.next()){var h=s(u.value,2),d=h[0],_=h[1];c.contextualTypeArguments.set(d,_)}}catch(e){f={error:e}}finally{try{u&&!u.done&&(E=l.return)&&E.call(l)}finally{if(f)throw f.error}}}}var y,g,f,E,T=c.prototype.declaration;if(T){var I=T.typeParameters;if(i){if((g=i.length)!=I.length)throw new Error("type argument count mismatch");if(g)for(c.contextualTypeArguments||(c.contextualTypeArguments=new Map),y=0;y=r.length)return!1;t=r[n],e-=64*(n+1)}return i64_ne(i64_and(t,i64_shl(i64_one,i64_new(e))),i64_zero)},e.prototype.setLocalWrapped=function(e,t){var r,n=-1;if(e<64){if(e<0)return;r=this.wrappedLocals}else{var i=this.wrappedLocalsExt;for(n=(e-64)/64|0,i||(this.wrappedLocalsExt=i=new Array(n+1),i.length=0);i.length<=n;)i.push(i64_new(0));r=i[n],e-=64*(n+1)}r=t?i64_or(r,i64_shl(i64_one,i64_new(e))):i64_and(r,i64_not(i64_shl(i64_one,i64_new(e)))),n>=0?this.wrappedLocalsExt[n]=r:this.wrappedLocals=r},e.prototype.inherit=function(e){this.flags|=4127&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&4127,this.wrappedLocals=i64_and(e.wrappedLocals,t.wrappedLocals);var r=e.wrappedLocalsExt,n=t.wrappedLocalsExt;if(null!=r&&null!=n){var i=this.wrappedLocalsExt,a=min(r.length,n.length);if(a){if(i)for(;i.lengtha):this.canOverflow(l.getBinaryLeft(e),t)&&!(l.getExpressionId(r=l.getBinaryRight(e))==l.ExpressionId.Const&&l.getConstValueI32(r)>=a);case l.BinaryOp.DivU32:case l.BinaryOp.RemI32:case l.BinaryOp.RemU32:return this.canOverflow(l.getBinaryLeft(e),t)||this.canOverflow(l.getBinaryRight(e),t)}break;case l.ExpressionId.Unary:switch(l.getUnaryOp(e)){case l.UnaryOp.EqzI32:case l.UnaryOp.EqzI64:return!1;case l.UnaryOp.ClzI32:case l.UnaryOp.CtzI32:case l.UnaryOp.PopcntI32:return t.size<7}break;case l.ExpressionId.Const:var s=0;switch(l.getExpressionType(e)){case l.NativeType.I32:s=l.getConstValueI32(e);break;case l.NativeType.I64:s=l.getConstValueI64Low(e);break;case l.NativeType.F32:s=i32(l.getConstValueF32(e));break;case l.NativeType.F64:s=i32(l.getConstValueF64(e));break;default:assert(!1)}switch(t.kind){case 0:return si8.MAX_VALUE;case 1:return si16.MAX_VALUE;case 5:return s<0||s>u8.MAX_VALUE;case 6:return s<0||s>u16.MAX_VALUE;case 10:return 0!=(-2&s)}break;case l.ExpressionId.Load:var o=void 0;switch(l.getLoadBytes(e)){case 1:o=l.isLoadSigned(e)?c.Type.i8:c.Type.u8;break;case 2:o=l.isLoadSigned(e)?c.Type.i16:c.Type.u16;break;default:o=l.isLoadSigned(e)?c.Type.i32:c.Type.u32}return K(o,t);case l.ExpressionId.Block:if(!l.getBlockName(e)){var p=assert(l.getBlockChildCount(e)),u=l.getBlockChild(e,p-1);return this.canOverflow(u,t)}break;case l.ExpressionId.If:return this.canOverflow(l.getIfTrue(e),t)||this.canOverflow(assert(l.getIfFalse(e)),t);case l.ExpressionId.Select:return this.canOverflow(l.getSelectThen(e),t)||this.canOverflow(l.getSelectElse(e),t);case l.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(l.getCallTarget(e))));assert(d.kind==m.FUNCTION);var _=d.signature.returnType;return!d.flow.is(4096)||K(_,t);case l.ExpressionId.Unreachable:return!1}return!0},e.prototype.finalize=function(){assert(null==this.parent),this.continueLabel=null,this.breakLabel=null,this.returnLabel=null,this.contextualTypeArguments=null},e}();function K(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=G},function(e,t,r){"use strict";function n(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}Object.defineProperty(t,"__esModule",{value:!0}),n(r(20)),n(r(19)),n(r(18)),n(r(17))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(8),a=r(1),s=r(8);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.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=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var p=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,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},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?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=h(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=h(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.createCallIndirect=function(e,t,r){var n=u(t),i=h(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}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=h(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=h(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{free_memory(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(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=h(e),i=h(t),a=h(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=h(e),i=h(t),a=h(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=h(e),a=h(t),s=h(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=h(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 s=h(i),o=r.length,c=new Array(o),u=new Array(o),d=new Array(o),_=0;_=0;--_)free_memory(c[_]);free_memory(s)}},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.precomputeFunction=function(e){var t=this.cachedPrecomputeNames;if(!t){var r=h("precompute");this.cachedPrecomputeName=r,this.cachedPrecomputeNames=t=l([r])}_BinaryenFunctionRunPasses(e,this.ref,t,1)},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=h(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=d(t);var a=d(t+4);i=d(t+8);var s=new y;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function u(e){return l(e)}function h(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 d(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function _(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=c,t.readString=_;var y=function(){return function(){}}();t.BinaryModule=y},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(0),s=r(6);t.Token=s.Token,t.Range=s.Range;var o,c=r(1);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.PARAMETER=3]="PARAMETER",e[e.SIGNATURE=4]="SIGNATURE",e[e.IDENTIFIER=5]="IDENTIFIER",e[e.ASSERTION=6]="ASSERTION",e[e.BINARY=7]="BINARY",e[e.CALL=8]="CALL",e[e.COMMA=9]="COMMA",e[e.ELEMENTACCESS=10]="ELEMENTACCESS",e[e.FALSE=11]="FALSE",e[e.FUNCTION=12]="FUNCTION",e[e.LITERAL=13]="LITERAL",e[e.NEW=14]="NEW",e[e.NULL=15]="NULL",e[e.PARENTHESIZED=16]="PARENTHESIZED",e[e.PROPERTYACCESS=17]="PROPERTYACCESS",e[e.TERNARY=18]="TERNARY",e[e.SUPER=19]="SUPER",e[e.THIS=20]="THIS",e[e.TRUE=21]="TRUE",e[e.CONSTRUCTOR=22]="CONSTRUCTOR",e[e.UNARYPOSTFIX=23]="UNARYPOSTFIX",e[e.UNARYPREFIX=24]="UNARYPREFIX",e[e.BLOCK=25]="BLOCK",e[e.BREAK=26]="BREAK",e[e.CONTINUE=27]="CONTINUE",e[e.DO=28]="DO",e[e.EMPTY=29]="EMPTY",e[e.EXPORT=30]="EXPORT",e[e.EXPORTIMPORT=31]="EXPORTIMPORT",e[e.EXPRESSION=32]="EXPRESSION",e[e.FOR=33]="FOR",e[e.IF=34]="IF",e[e.IMPORT=35]="IMPORT",e[e.RETURN=36]="RETURN",e[e.SWITCH=37]="SWITCH",e[e.THROW=38]="THROW",e[e.TRY=39]="TRY",e[e.VARIABLE=40]="VARIABLE",e[e.VOID=41]="VOID",e[e.WHILE=42]="WHILE",e[e.CLASSDECLARATION=43]="CLASSDECLARATION",e[e.ENUMDECLARATION=44]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=45]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=46]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=47]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=48]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=49]="INTERFACEDECLARATION",e[e.METHODDECLARATION=50]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=51]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=52]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=53]="VARIABLEDECLARATION",e[e.DECORATOR=54]="DECORATOR",e[e.EXPORTMEMBER=55]="EXPORTMEMBER",e[e.SWITCHCASE=56]="SWITCHCASE",e[e.COMMENT=57]="COMMENT"}(o=t.NodeKind||(t.NodeKind={}));var p=function(){function e(){this.parent=null,this.flags=a.CommonFlags.NONE}return e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.set=function(e){this.flags|=e},e.createType=function(e,t,r,n){var i=new u;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&xe(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new h;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new d;return a.range=i,a.name=e,e.parent=a,a.type=t,t&&(t.parent=a),a.initializer=r,r&&(r.parent=a),a.parameterKind=n,a},e.createSignature=function(e,t,r,n,i){var a=new y;return a.range=i,a.parameterTypes=e,xe(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new g;return n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&xe(t,n),n.decoratorKind=e.kind==o.IDENTIFIER?m(e.text):_.CUSTOM,n},e.createComment=function(e,t,r){var n=new f;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new I;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new I;return t.range=e,t.text="",t},e.createArrayLiteralExpression=function(e,t){var r=new A;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(j);t.ClassDeclaration=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.CONTINUE,t}return i(t,e),t}(Q);t.ContinueStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.DO,t}return i(t,e),t}(Q);t.DoStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EMPTY,t}return i(t,e),t}(Q);t.EmptyStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.ENUMDECLARATION,t}return i(t,e),t}(j);t.EnumDeclaration=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.ENUMVALUEDECLARATION,t}return i(t,e),t}(j);t.EnumValueDeclaration=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORTIMPORT,t}return i(t,e),t}(p);t.ExportImportStatement=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORTMEMBER,t}return i(t,e),t}(p);t.ExportMember=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORT,t}return i(t,e),t}(Q);t.ExportStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPRESSION,t}return i(t,e),t}(Q);t.ExpressionStatement=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FIELDDECLARATION,t.parameterIndex=-1,t}return i(t,e),t}(Z);t.FieldDeclaration=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FOR,t}return i(t,e),t}(Q);t.ForStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FUNCTIONDECLARATION,t}return i(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(j);t.FunctionDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IF,t}return i(t,e),t}(Q);t.IfStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IMPORTDECLARATION,t}return i(t,e),t}(j);t.ImportDeclaration=_e;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IMPORT,t}return i(t,e),t}(Q);t.ImportStatement=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.INTERFACEDECLARATION,t}return i(t,e),t}(ee);t.InterfaceDeclaration=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.METHODDECLARATION,t}return i(t,e),t}(he);t.MethodDeclaration=ge;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.NAMESPACEDECLARATION,t}return i(t,e),t}(j);t.NamespaceDeclaration=fe;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.RETURN,t}return i(t,e),t}(Q);t.ReturnStatement=Ee;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.SWITCHCASE,t}return i(t,e),t}(p);t.SwitchCase=Te;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.SWITCH,t}return i(t,e),t}(Q);t.SwitchStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.THROW,t}return i(t,e),t}(Q);t.ThrowStatement=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.TRY,t}return i(t,e),t}(Q);t.TryStatement=Ae;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.TYPEDECLARATION,t}return i(t,e),t}(j);t.TypeDeclaration=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VARIABLEDECLARATION,t}return i(t,e),t}(Z);t.VariableDeclaration=Ce;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VARIABLE,t}return i(t,e),t}(Q);t.VariableStatement=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VOID,t}return i(t,e),t}(Q);t.VoidStatement=Oe;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.WHILE,t}return i(t,e),t}(Q);function be(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=o.VARIABLEDECLARATION||n.kind!=o.VARIABLE||(n=n.parent))?n.kind==o.CLASSDECLARATION?be(n,t)+(e.is(a.CommonFlags.STATIC)?a.STATIC_DELIMITER:a.INSTANCE_DELIMITER)+r:n.kind==o.NAMESPACEDECLARATION||n.kind==o.ENUMDECLARATION?be(n,t)+a.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+a.PATH_DELIMITER+r:r}function ke(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function xe(e,t){for(var r=0,n=e.length;r";case a.LESSTHAN_EQUALS:return"<=";case a.GREATERTHAN_EQUALS:return">=";case a.EQUALS_EQUALS:return"==";case a.EXCLAMATION_EQUALS:return"!=";case a.EQUALS_EQUALS_EQUALS:return"===";case a.EXCLAMATION_EQUALS_EQUALS:return"!==";case a.PLUS:return"+";case a.MINUS:return"-";case a.ASTERISK_ASTERISK:return"**";case a.ASTERISK:return"*";case a.SLASH:return"/";case a.PERCENT:return"%";case a.PLUS_PLUS:return"++";case a.MINUS_MINUS:return"--";case a.LESSTHAN_LESSTHAN:return"<<";case a.GREATERTHAN_GREATERTHAN:return">>";case a.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case a.AMPERSAND:return"&";case a.BAR:return"|";case a.CARET:return"^";case a.EXCLAMATION:return"!";case a.TILDE:return"~";case a.AMPERSAND_AMPERSAND:return"&&";case a.BAR_BAR:return"||";case a.EQUALS:return"=";case a.PLUS_EQUALS:return"+=";case a.MINUS_EQUALS:return"-=";case a.ASTERISK_EQUALS:return"*=";case a.ASTERISK_ASTERISK_EQUALS:return"**=";case a.SLASH_EQUALS:return"/=";case a.PERCENT_EQUALS:return"%=";case a.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case a.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case a.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case a.AMPERSAND_EQUALS:return"&=";case a.BAR_EQUALS:return"|=";case a.CARET_EQUALS:return"^=";default:return assert(!1),""}};var h=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=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=h;var d=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.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,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(p.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=o}return this.nextToken},t.prototype.skipIdentifier=function(){return this.skip(a.IDENTIFIER,s.PREFER)},t.prototype.skipIdentifierName=function(){return this.skip(a.IDENTIFIER,s.ALWAYS)},t.prototype.skip=function(e,t){void 0===t&&(t=s.DEFAULT);var r=this.pos,n=this.token,i=this.tokenPos,o=i32.MAX_VALUE;switch(e){case a.GREATERTHAN:o=1}return this.token=this.unsafeNext(t,o),this.token==e?(this.nextToken=-1,!0):(this.pos=r,this.token=n,this.tokenPos=i,!1)},t.prototype.mark=function(){var e;return y?(e=y,y=null):e=new _,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){y=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,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 h(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(p.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(p.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=d;var _=function(){return function(){}}();t.State=_;var y=null},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:return this;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){var t=this.is(2)?this.size:this.size-1;return-1>>>e.size-t},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.asClass=function(t){assert(9==this.kind&&!this.classReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classReference=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.signatureReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.signatureReference=t,r},e.prototype.asNullable=function(){return assert(this.is(256)),this.cachedNullableType||(assert(!this.is(512)),this.cachedNullableType=new e(this.kind,512|this.flags,this.size),this.cachedNullableType.classReference=this.classReference,this.cachedNullableType.signatureReference=this.signatureReference),this.cachedNullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256))if(r=this.classReference){if(n=e.classReference)return r.isAssignableTo(n)}else if((i=this.signatureReference)&&(a=e.signatureReference))return i.isAssignableTo(a)}else if(!e.is(256))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:var t=this.signatureReference;return e||!t?"u32":t.toString(!0);case 8:return"u64";case 9:var r=this.classReference;return e||!r?"usize":r.toString();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;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=p&&u!=l?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t,r){"use strict";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.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_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.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",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.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",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.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",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.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",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.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",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=function(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"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";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 1038:return"A 'declare' modifier cannot be used in an already ambient context.";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 1176:return"Interface declaration cannot have 'implements' clause.";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 1317:return"A parameter property cannot be declared using a rest parameter.";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 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";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""}}},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)}),a=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 s,o=r(21),c=r(2),p=r(3),l=r(0),u=r(6),h=r(4),d=r(7),_=r(1);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var y=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.noMemory=!1,this.importMemory=!1,this.importTable=!1,this.memoryBase=0,this.sourceMap=!1,this.globalAliases=null,this.features=0}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==s.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==s.WASM64?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?d.Type.isize64:d.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?p.NativeType.I64:p.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=y,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var m=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.outerFunction=null,n.currentEnum=null,n.currentType=d.Type.void,n.startFunctionBody=[],n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,r||(r=new y),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),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(){var e=this.options,t=this.module,r=this.program;r.initialize(e);var n=assert(r.elementsLookup.get("start"));assert(n.kind==l.ElementKind.FUNCTION_PROTOTYPE);var i=new l.Function(n,n.internalName,new d.Signature([],d.Type.void));this.startFunction=i,this.currentFunction=i;for(var a=r.sources,s=0,o=a.length;s"),!1;e.type=this.currentType}else assert(!1);if(e.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.isAny(l.CommonFlags.CONST)||e.is(l.CommonFlags.STATIC|l.CommonFlags.READONLY);if(e.is(l.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(l.CommonFlags.MODULE_IMPORT),t.addGlobalImport(e.internalName,e.parent?e.parent.simpleName:"env",e.simpleName,a),e.set(l.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;e.is(l.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type,1,1)),p.getExpressionId(n)!=p.ExpressionId.Const&&(s?(n=this.precomputeExpressionRef(n),p.getExpressionId(n)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(o)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(s){switch(p.getExpressionType(n)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(p.getConstValueI32(n),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(p.getConstValueI64Low(n),p.getConstValueI64High(n));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=p.getConstValueF32(n);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=p.getConstValueF64(n);break;default:return assert(!1),!1}e.set(l.CommonFlags.INLINED),e.is(l.CommonFlags.MODULE_EXPORT)?(t.addGlobal(u,a,!1,n),t.addGlobalExport(u,g(e))):r&&r.isTopLevel&&t.addGlobal(u,a,!1,n)}else t.addGlobal(u,a,!s,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==l.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(l.CommonFlags.COMPILED))return!0;e.set(l.CommonFlags.COMPILED);var t=this.module;this.currentEnum=e;var r,n,i=null;if(e.members)try{for(var s=a(e.members.values()),o=s.next();!o.done;o=s.next()){var u=o.value;if(u.kind==l.ElementKind.ENUMVALUE){var h=!1,_=u,y=_.declaration;if(_.set(l.CommonFlags.COMPILED),_.is(l.CommonFlags.INLINED))e.declaration.isTopLevelExport&&t.addGlobal(_.internalName,p.NativeType.I32,!1,t.createI32(_.constantValue));else{var m=void 0;y.value?(m=this.compileExpression(y.value,d.Type.i32,1,0),p.getExpressionId(m)!=p.ExpressionId.Const&&(m=this.precomputeExpressionRef(m),p.getExpressionId(m)!=p.ExpressionId.Const&&(e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0))):null==i?m=t.createI32(0):i.is(l.CommonFlags.INLINED)?m=t.createI32(i.constantValue+1):(m=t.createBinary(p.BinaryOp.AddI32,t.createGetGlobal(i.internalName,p.NativeType.I32),t.createI32(1)),e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h?(t.addGlobal(_.internalName,p.NativeType.I32,!0,t.createI32(0)),this.startFunctionBody.push(t.createSetGlobal(_.internalName,m))):(t.addGlobal(_.internalName,p.NativeType.I32,!1,m),p.getExpressionType(m)==p.NativeType.I32?(_.constantValue=p.getConstValueI32(m),_.set(l.CommonFlags.INLINED)):(assert(!1),_.constantValue=0))}i=_,e.is(l.CommonFlags.MODULE_EXPORT)&&(u.is(l.CommonFlags.INLINED)||this.options.hasFeature(2)?t.addGlobalExport(u.internalName,g(u)):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=e.resolveUsingTypeArguments(t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(l.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+u.toString(10):"break")+"|"+n);var y=t.createBlock("case0|"+n,c,p.NativeType.None),m=!0,g=!0,f=!0,E=!0;for(h=0;h=0){v=r.flow;m&&v.set(1),g&&v.set(4096),f&&v.set(2),E&&v.set(16)}return y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),t.set(1),o.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunction&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var s=0;s");continue}m=this.currentType}var f=!1;if(_.is(l.CommonFlags.CONST))if(g)if(g=this.precomputeExpressionRef(g),p.getExpressionId(g)==p.ExpressionId.Const){var E=new l.Local(r,y,-1,m);switch(p.getExpressionType(g)){case p.NativeType.I32:E=E.withConstantIntegerValue(p.getConstValueI32(g),0);break;case p.NativeType.I64:E=E.withConstantIntegerValue(p.getConstValueI64Low(g),p.getConstValueI64High(g));break;case p.NativeType.F32:E=E.withConstantFloatValue(p.getConstValueF32(g));break;case p.NativeType.F64:E=E.withConstantFloatValue(p.getConstValueF64(g));break;default:return assert(!1),this.module.createUnreachable()}var T=n.flow.scopedLocals;if(T){if(T.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,_.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=T=new Map;T.set(y,E),f=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,_.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,_.range);if(!f){E=void 0;E=_.isAny(l.CommonFlags.LET|l.CommonFlags.CONST)||u.is(1024)?u.addScopedLocal(m,y,!1,_):n.addLocal(m,y,_),g?(o.push(this.compileAssignmentWithValue(_.name,g)),E.type.is(36)&&u.setLocalWrapped(E.index,!u.canOverflow(g,m))):E.type.is(36)&&u.setLocalWrapped(E.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,p.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)){var n=this.precomputeExpressionRef(r);if(p.getExpressionId(n)==p.ExpressionId.Const&&p.getExpressionType(n)==p.NativeType.I32){if(!p.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow.enterBranchOrScope();i.flow=s;var o="break|"+a;s.breakLabel=o;var c="continue|"+a;s.continueLabel=c;var u=this.compileStatement(e.statement);i.flow=s.leaveBranchOrScope(),i.leaveBreakContext();var h=t.createBlock(o,[t.createLoop(c,t.createIf(r,s.isAny(13)?u:t.createBlock(null,[u,t.createBreak(c)],p.NativeType.None)))],p.NativeType.None);return h},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(l.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a: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 12:if(!e.is(l.CommonFlags.BUILTIN)||t!=d.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=d.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);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: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.SUPER: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);break;default:assert(!1),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=p.getFunctionBody(n);return t.removeTemporaryFunction(),i},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),s.createUnreachable()):13==r.kind?s.createDrop(e):(1!=n||t.isAssignableTo(r)||this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=s.createUnary(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(p.UnaryOp.TruncF32ToI64,e):s.createUnary(p.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(p.UnaryOp.TruncF32ToU64,e):s.createUnary(p.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(p.UnaryOp.TruncF64ToI64,e):s.createUnary(p.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(p.UnaryOp.TruncF64ToU64,e):s.createUnary(p.UnaryOp.TruncF64ToU32,e):(assert(0==r.flags,"void type expected"),e=s.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?s.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(p.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?p.UnaryOp.ExtendI32:p.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.GtI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.GtU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.GtU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.GtF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.GtF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.LE)){o=this.compileBinaryOverload(v,_,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.LeI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.LeU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.LeU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.LeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.LeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.GE)){o=this.compileBinaryOverload(v,_,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.GeI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.GeU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.GeU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.GeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.GeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EQUALS_EQUALS)if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.EQ)){o=this.compileBinaryOverload(v,_,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.EqI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.EqI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.EqF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.EqF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EXCLAMATION_EQUALS)if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.NE)){o=this.compileBinaryOverload(v,_,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.NeI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.NeI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.NeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.NeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(_,y,t);case u.Token.PLUS_EQUALS:m=!0;case u.Token.PLUS:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.ADD)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0);else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.AddI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.AddI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.AddF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.AddF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.MINUS_EQUALS:m=!0;case u.Token.MINUS:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.SUB)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.SubI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.SubI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.SubF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.SubF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:m=!0;case u.Token.ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.MUL)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1);else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.MulI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.MulI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.MulF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.MulF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:m=!0;case u.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.POW)){o=this.compileBinaryOverload(v,_,y,e);break}var f=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(y,d.Type.f32,1,0),a=this.currentType,!(f=this.f32PowInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=h.createUnreachable();break}if(!(T=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=h.createUnreachable();break}assert(T.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=f=T.resolve()}}else if(r=this.convertExpression(r,this.currentType,d.Type.f64,1,0,_),n=this.currentType,i=this.compileExpression(y,d.Type.f64,1,0),a=this.currentType,!(f=this.f64PowInstance)){if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(T=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=h.createUnreachable();break}assert(T.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=f=T.resolve()}o=f&&this.compileFunction(f)?this.makeCallDirect(f,[r,i]):h.createUnreachable();break;case u.Token.SLASH_EQUALS:m=!0;case u.Token.SLASH:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.DIV)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y)}switch(this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.DivI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.DivU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.DivU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.DivF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.DivF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.PERCENT_EQUALS:m=!0;case u.Token.PERCENT:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.REM)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y)}switch(this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.RemI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.RemU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.RemU64,r,i);break;case 11:if(!(f=this.f32ModInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=h.createUnreachable();break}if(!(T=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=h.createUnreachable();break}assert(T.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=f=T.resolve()}o=f&&this.compileFunction(f)?this.makeCallDirect(f,[r,i]):h.createUnreachable();break;case 12:if(!(f=this.f64ModInstance)){var E,T;if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(T=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=h.createUnreachable();break}assert(T.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=f=T.resolve()}o=f&&this.compileFunction(f)?this.makeCallDirect(f,[r,i]):h.createUnreachable();break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:m=!0;case u.Token.LESSTHAN_LESSTHAN:switch(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShlI64:p.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:m=!0;case u.Token.GREATERTHAN_GREATERTHAN:switch(r=this.compileExpressionRetainType(_,t.intType,1),n=this.currentType,i=this.compileExpression(y,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.ShrI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.ShrI64,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.ShrU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.ShrU64,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:m=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(r=this.compileExpressionRetainType(_,t.intType,1),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=h.createBinary(p.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:m=!0;case u.Token.AMPERSAND:if(r=this.compileExpressionRetainType(_,t.intType,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.AND)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.AndI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.AndI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.BAR_EQUALS:m=!0;case u.Token.BAR:if(r=this.compileExpressionRetainType(_,t.intType,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.OR)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.OrI32,r,i);break;case 2:case 7:o=h.createBinary(p.BinaryOp.OrI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.OrI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.CARET_EQUALS:m=!0;case u.Token.CARET:var I,v;if(r=this.compileExpressionRetainType(_,t.intType,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.XOR)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.XorI32,r,i);break;case 2:case 7:o=h.createBinary(p.BinaryOp.XorI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.XorI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,o=h.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=h.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),i,h.createGetLocal(assert(N).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,o=this.module.cloneExpression(r,!0,0))o=this.module.createIf(this.makeIsTrueish(r,this.currentType),o,i);else{A=this.currentFunction.flow,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),h.createGetLocal(assert(N).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return m?this.compileAssignmentWithValue(_,o,t!=d.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r){var n,i=0;if(e.is(l.CommonFlags.INSTANCE)){var a=assert(e.parent);assert(a.kind==l.ElementKind.CLASS),i=this.compileExpression(t,a.type,1,0),n=[]}else n=[t];return this.compileCallDirect(e,n,r,i,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n){var i,a=0;if(e.is(l.CommonFlags.INSTANCE)){var s=assert(e.parent);assert(s.kind==l.ElementKind.CLASS),a=this.compileExpression(t,s.type,1,0),i=[r]}else i=[t,r];return this.compileCallDirect(e,i,n,a,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case l.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=d.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=s.type;break;case l.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var p=o.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.signature.parameterTypes[0];break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=a.flow.is(2048),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:var a=i.type;if(this.currentType=r?a:d.Type.void,i.is(l.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(l.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(t=this.ensureSmallIntegerWrap(t,a),r){var o=a.toNativeType(),p=i.internalName;return n.createBlock(null,[n.createSetGlobal(p,t),n.createGetGlobal(p,o)],o)}return n.createSetGlobal(i.internalName,t);case l.ElementKind.FIELD:var u=i.declaration;if(i.is(l.CommonFlags.READONLY)&&!this.currentFunction.is(l.CommonFlags.CONSTRUCTOR)&&null!=u&&null==u.initializer)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(O=this.currentFunction).flow;var y=O.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,_,n.createGetLocal(y,o),o,i.memoryOffset),n.createGetLocal(y,o)],o)}return n.createStore(a.byteSize,_,t,o,i.memoryOffset);case l.ElementKind.PROPERTY:var m=i.setterPrototype;if(m){var g=m.resolve();if(!g)return n.createUnreachable();if(!r){if(g.is(l.CommonFlags.INSTANCE)){h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.makeCallDirect(g,[_,t])}return this.makeCallDirect(g,[t])}var f=i.getterPrototype;assert(null!=f);var E=f.resolve();if(!E)return n.createUnreachable();var T=(k=E.signature.returnType).toNativeType();if(g.is(l.CommonFlags.INSTANCE)){h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(k,!1).index;return n.createBlock(null,[this.makeCallDirect(g,[n.createTeeLocal(y,_),t]),this.makeCallDirect(E,[n.createGetLocal(y,T)])],T)}return n.createBlock(null,[this.makeCallDirect(g,[t]),this.makeCallDirect(E)],T)}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case l.ElementKind.CLASS:var I=this.program.resolvedElementExpression;if(I){var v=this.currentFunction.flow.is(2048),A=i.lookupOverload(l.OperatorKind.INDEXED_GET,v);if(!A)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(l.OperatorKind.INDEXED_SET,v);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?A.signature.returnType:d.Type.void,n.createUnreachable();var C=i.type,S=(h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0),this.compileExpression(I,d.Type.i32,1,0));if(r){var O,L=(O=this.currentFunction).getTempLocal(C,!1),b=O.getAndFreeTempLocal(this.currentType,!1),k=A.signature.returnType;return this.currentFunction.freeTempLocal(L),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(L.index,_),n.createTeeLocal(b.index,S),t]),this.makeCallDirect(A,[n.createGetLocal(L.index,L.type.toNativeType()),n.createGetLocal(b.index,b.type.toNativeType())])],k.toNativeType())}return this.makeCallDirect(N,[_,S,t])}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r,n,i=this.module,a=this.currentFunction,s=this.program.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case l.ElementKind.FUNCTION_PROTOTYPE:var o=s,u=e.typeArguments;if(o.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var _=null;if(u){if(!o.is(l.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();_=o.resolveUsingTypeArguments(u,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(l.CommonFlags.GENERIC)){for(var y=new Map,m=assert(o.declaration.typeParameters),g=m.length,f=0;fs&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(l.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var o=n?a+1:a,c=new Array(o),p=0;n&&(c[0]=n,p=1);for(var u=s.parameterTypes,h=0;h=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,p=e.is(l.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=f,this.module.createGetLocal(E,f.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(g))return this.module.createUnreachable();var T=g.type;return assert(T!=d.Type.void),g.is(l.CommonFlags.INLINED)?this.compileInlineConstant(g,t,r):(this.currentType=T,this.module.createGetGlobal(g.internalName,T.toNativeType()));case l.ElementKind.ENUMVALUE:return g.is(l.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,g.is(l.CommonFlags.INLINED)?this.module.createI32(g.constantValue):this.module.createGetGlobal(g.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());case l.ElementKind.FUNCTION_PROTOTYPE:var I=g.resolve(null,i.flow.contextualTypeArguments);if(!I||!this.compileFunction(I))return n.createUnreachable();var v=this.ensureFunctionTableEntry(I);return this.currentType=I.signature.type,this.module.createI32(v)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:case 7:if(i64_is_i32(s)||i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_i32(s)||i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=d.Type.i32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=a.resolve([e]);if(!s)return i.createUnreachable();var o=s.type,u=t.length;if(u){var h=e.toNativeType(),d=void 0,y=void 0;switch(h){case p.NativeType.I32:d=changetype(new Int32Array(u)),y=4*u;break;case p.NativeType.I64:d=changetype(new Array(u)),y=8*u;break;case p.NativeType.F32:d=changetype(new Float32Array(u)),y=4*u;break;case p.NativeType.F64:d=changetype(new Float64Array(u)),y=8*u;break;default:return assert(!1),i.createUnreachable()}for(var m=new Array(u),g=void 0,f=0;f=0);var h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=a.type,i.createLoad(a.type.byteSize,a.type.is(5),h,a.type.toNativeType(),a.memoryOffset);case l.ElementKind.PROPERTY:var _=a.getterPrototype;if(_){var y=_.resolve(null);if(!y)return i.createUnreachable();var m=y.signature;if(!this.checkCallSignature(m,0,y.is(l.CommonFlags.INSTANCE),e))return i.createUnreachable();if(y.is(l.CommonFlags.INSTANCE)){o=assert(y.parent);assert(o.kind==l.ElementKind.CLASS);u=assert(n.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=m.returnType,this.compileCallDirect(y,[],e,h)}return this.currentType=m.returnType,this.compileCallDirect(y,[],e)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,a.simpleName,a.parent.toString()),i.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r,n,i,a,s=e.ifThen,o=e.ifElse,u=this.currentFunction,h=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)){var _=this.precomputeExpressionRef(h);if(p.getExpressionId(_)==p.ExpressionId.Const&&p.getExpressionType(_)==p.NativeType.I32)return p.getConstValueI32(_)?this.compileExpressionRetainType(s,t,0):this.compileExpressionRetainType(o,t,0);h=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}if(u.is(l.CommonFlags.CONSTRUCTOR)){var y=u.flow;y=y.enterBranchOrScope(),u.flow=y,r=this.compileExpressionRetainType(s,t,0),i=this.currentType;var m=y.is(16);y=y.leaveBranchOrScope(),u.flow=y,y=y.enterBranchOrScope(),u.flow=y,n=this.compileExpressionRetainType(o,t,0),a=this.currentType;var g=y.is(16);y=y.leaveBranchOrScope(),u.flow=y,m&&g&&y.set(16)}else r=this.compileExpressionRetainType(s,t,0),i=this.currentType,n=this.compileExpressionRetainType(o,t,0),a=this.currentType;var f=d.Type.commonCompatible(i,a,!1);return f?(r=this.convertExpression(r,i,f,1,0,s),n=this.convertExpression(n,a,f,1,0,o),this.currentType=f,this.module.createIf(h,r,n)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,i.toString(),a.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);if(p.getExpressionId(i)==p.ExpressionId.Unreachable)return i;var a,s,o,l=this.currentType;switch(e.operator){case u.Token.PLUS_PLUS:if(l.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=p.BinaryOp.AddI32,s=p.NativeType.I32,o=r.createI32(1);break;case 9:case 4:a=(h=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,s=h.nativeSizeType,o=l.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.AddI64,s=p.NativeType.I64,o=r.createI64(1);break;case 11:a=p.BinaryOp.AddF32,s=p.NativeType.F32,o=r.createF32(1);break;case 12:a=p.BinaryOp.AddF64,s=p.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(l.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=p.BinaryOp.SubI32,s=p.NativeType.I32,o=r.createI32(1);break;case 9:case 4:var h;a=(h=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,s=h.nativeSizeType,o=l.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.SubI64,s=p.NativeType.I64,o=r.createI64(1);break;case 11:a=p.BinaryOp.SubF32,s=p.NativeType.F32,o=r.createF32(1);break;case 12:a=p.BinaryOp.SubF64,s=p.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==d.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var _=n.getTempLocal(l,!1),y=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(_.index,s),o),!1);this.currentType=assert(_).type,n.freeTempLocal(_);var m=_.index;return r.createBlock(null,[r.createSetLocal(m,i),y,r.createGetLocal(m,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case u.Token.PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);break;case u.Token.MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();if(e.operand.kind!=h.NodeKind.LITERAL||e.operand.literalKind!=h.LiteralKind.INTEGER&&e.operand.literalKind!=h.LiteralKind.FLOAT)switch(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.SubI32,n.createI32(0),r);break;case 9:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(p.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(p.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(p.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}else r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break;case u.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();switch(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(p.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(p.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();switch(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.SubI32,r,n.createI32(1));break;case 9:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(p.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(p.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.EXCLAMATION:r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),r=this.makeIsFalseish(r,this.currentType),this.currentType=d.Type.bool;break;case u.Token.TILDE:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();switch(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,t==d.Type.void?0:1,0),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=d.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(p.UnaryOp.ExtendI8ToI32,e):r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(p.UnaryOp.ExtendI16ToI32,e):r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(p.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(p.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?p.UnaryOp.EqzI64:p.UnaryOp.EqzI32,e);case 11:return r.createBinary(p.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(p.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(p.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(p.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,i=this.module,s=this.currentFunction,c=this.options.nativeSizeType,p=s.getTempLocal(e.type,!1),u=new Array;if(u.push(i.createSetLocal(p.index,o.compileAllocate(this,e,t))),e.members)try{for(var h=a(e.members.values()),d=h.next();!d.done;d=h.next()){var _=d.value;if(_.kind==l.ElementKind.FIELD){var y=_,m=y.type,g=m.toNativeType(),f=y.prototype.declaration;if(assert(!y.isAny(l.CommonFlags.CONST)),f.initializer)u.push(i.createStore(m.byteSize,i.createGetLocal(p.index,c),this.compileExpression(f.initializer,m,1,0),g,y.memoryOffset));else{var E=y.prototype.declaration.parameterIndex;u.push(i.createStore(m.byteSize,i.createGetLocal(p.index,c),E>=0?i.createGetLocal(1+E,g):m.toNativeZero(i),g,y.memoryOffset))}}}}catch(e){r={error:e}}finally{try{d&&!d.done&&(n=h.return)&&n.call(h)}finally{if(r)throw r.error}}return u.push(i.createGetLocal(p.index,c)),s.freeTempLocal(p),this.currentType=e.type,i.createBlock(null,u,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(n==p.NativeType.I64?r.createBinary(p.BinaryOp.NeI64,r.createGetLocal(0,p.NativeType.I64),r.createI64(0)):r.createGetLocal(0,p.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(c.DiagnosticEmitter);function g(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?g(r)+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return g(r=assert(e.parent))+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+t;case l.ElementKind.CLASS:return(r=e.prototype.parent)?g(r)+l.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?g(r)+l.STATIC_DELIMITER+t:t}}t.Compiler=m},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(0),s=r(6),o=r(2),c=r(1),p=r(4),l=a.LIBRARY_PREFIX+"builtins.ts",u=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.onComment=null,t.tryParseSignatureIsSignature=!1,t.program=new a.Program(t.diagnostics),t}return i(t,e),t.prototype.parseFile=function(e,t,r){for(var n=this.program,i=c.normalizePath(t),o=p.mangleInternalPath(i),u=n.sources,h=0,d=u.length;h"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var m=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(m,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=l,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(),")"),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var l=null;if(e.skip(s.Token.EQUALS)){if(i&a.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(l=this.parseExpression(e,1)))return null}else i&a.CommonFlags.CONST?i&a.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(n,c,l,r,i,s.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var l=this.parseEnumValue(e,a.CommonFlags.NONE);if(!l)return null;if(c.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=p.Node.createEnumDeclaration(i,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,1))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);for(var r=new Array,n=null,i=!1,a=!1;!e.skip(s.Token.CLOSEPAREN);){var c=this.parseParameter(e,t);if(!c)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),c.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,c.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=c}if(r.push(c),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null,c=a.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(i=e.range(),c|=a.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(i=e.range(),c|=a.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(i=e.range(),c|=a.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var l=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(l),i||(i=e.range()),c|=a.CommonFlags.READONLY):e.reset(l)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):i=e.range(),r=!0),e.skipIdentifier()){r||(i=e.range());var u=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=p.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,1))))return null;var _=p.Node.createParameter(u,h,d,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,s.Range.join(i,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=0!=(t&a.CommonFlags.SET);h&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),t&a.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var d=null;if(e.skip(s.Token.COLON)&&!(d=this.parseType(e,!0,h)))return null;d||(d=p.Node.createOmittedType(e.range(e.pos)),h||this.error(o.DiagnosticCode.Type_expected,d.range));var _=p.Node.createSignature(u,d,null,!1,e.range(c,e.pos)),y=null;if(e.skip(s.Token.OPENBRACE)){if(t&a.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else t&a.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var m=p.Node.createFunctionDeclaration(i,l,_,y,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),m},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i,c){void 0===i&&(i=-1),void 0===c&&(c=-1),i<0&&(i=t.range.start),c<0&&(c=i);var l=null;if(e.skip(s.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=p.Node.createSignature(r,l,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=p.Node.createFunctionDeclaration(t,null,h,u,null,n?a.CommonFlags.ARROW:a.CommonFlags.NONE,e.range(i,e.pos));return p.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var i=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){i&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;i||(d||(d=[]),d.push(_))}while(e.skip(s.Token.COMMA))}if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;var y,m=new Array;if(i?(assert(!d),y=p.Node.createInterfaceDeclaration(l,c,u,m,r,t,e.range(n,e.pos))):y=p.Node.createClassDeclaration(l,c,u,d,m,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,y);if(!g)return null;g.parent=y,m.push(g)}while(!e.skip(s.Token.CLOSEBRACE));return y},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(s.Token.AT);){var i=this.parseDecorator(e);if(!i)break;n.push(i)}var c=t.flags&a.CommonFlags.AMBIENT;e.skip(s.Token.PUBLIC)?c|=a.CommonFlags.PUBLIC:e.skip(s.Token.PRIVATE)?c|=a.CommonFlags.PRIVATE:e.skip(s.Token.PROTECTED)&&(c|=a.CommonFlags.PROTECTED);var l=0,u=0,h=0,d=0;e.skip(s.Token.STATIC)?(c|=a.CommonFlags.STATIC,l=e.tokenPos,u=e.pos):(e.skip(s.Token.ABSTRACT)?(c|=a.CommonFlags.ABSTRACT|a.CommonFlags.INSTANCE,h=e.tokenPos,d=e.pos):c|=a.CommonFlags.INSTANCE,t.flags&a.CommonFlags.GENERIC&&(c|=a.CommonFlags.GENERIC_CONTEXT));var _=0,y=0;e.skip(s.Token.READONLY)&&(c|=a.CommonFlags.READONLY,_=e.tokenPos,y=e.pos);var m=e.mark(),g=!1,f=!1,E=!1,T=0,I=0;if(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.GET,f=!0,T=e.tokenPos,I=e.pos,c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.SET|a.CommonFlags.SET,E=!0,T=e.tokenPos,I=e.pos,c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(g=!0,(c|=a.CommonFlags.CONSTRUCTOR)&a.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(l,u),"static"),c&a.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,d),"abstract"),c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")),!g&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var v=g?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),A=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(A=this.parseTypeParameters(e)))return null;g?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):f||E?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):c|=a.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var C=e.tokenPos,S=this.parseParameters(e,g);if(!S)return null;if(g)for(var O=0,L=S.length;O"),null):null;case s.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var d=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,1);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.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;for(var n,i,a=r.range.start;(n=this.tryParseTypeArgumentsBeforeArguments(e))||e.skip(s.Token.OPENPAREN);){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,n,c,e.range(a,e.pos))}for(var l,u=null;(l=h(i=e.peek()))>=t;)switch(e.next(),i){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,_,e.range(a,e.pos));break;case s.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(a,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(i,r,e.range(a,e.pos));break;case s.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e,t>0?1:0);if(!m)return null;r=p.Node.createTernaryExpression(r,y,m,e.range(a,e.pos));break;case s.Token.COMMA:var g=[r];do{if(!(r=this.parseExpression(e,1)))return null;g.push(r)}while(e.skip(s.Token.COMMA));r=p.Node.createCommaExpression(g,e.range(a,e.pos));break;default:if(!(u=this.parseExpression(e,d(i)?l:l+1)))return null;if(i==s.Token.DOT)if(u.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,u,e.range(a,e.pos));else{if(u.kind!=p.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,u.range),null;var f=u;if(f.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=p.Node.createPropertyAccessExpression(r,f.expression,e.range(a,e.pos)),r=f}else r=p.Node.createBinaryExpression(i,r,u,e.range(a,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t}(o.DiagnosticEmitter);function h(e){switch(e){case s.Token.COMMA:return 0;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 3;case s.Token.QUESTION:return 4;case s.Token.BAR_BAR:return 5;case s.Token.AMPERSAND_AMPERSAND:return 6;case s.Token.BAR:return 7;case s.Token.CARET:return 8;case s.Token.AMPERSAND:return 9;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 11;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case s.Token.PLUS:case s.Token.MINUS:return 13;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 14;case s.Token.ASTERISK_ASTERISK:return 15;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 17;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 19;default:return-1}}function d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.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";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)}),a=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}}}},s=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),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.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 s};Object.defineProperty(t,"__esModule",{value:!0});var o=r(0),c=r(1),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){try{for(var e=a(this.program.moduleLevelExports.values()),t=e.next();!t.done;t=e.next()){var r=t.value;this.visitElement(r)}}catch(e){n={error:e}}finally{try{t&&!t.done&&(i=e.return)&&i.call(e)}finally{if(n)throw n.error}}for(var n,i,s=this.todo;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(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(9),i=r(12),a=r(11),s=r(2);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(10),c=r(0);t.LIBRARY_PREFIX=c.LIBRARY_PREFIX,t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),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=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[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:g;if(t){if(e<0)return f;if(e>=_)return A}else{if(e<=-y)return N;if(e+1>=y)return v}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=o,n.fromNumber=c,n.fromBits=p;var l=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return g;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(l(r,8)),a=g,s=0;s>>0:this.low},C.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},C.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return p+s;for(;p.length<6;)p="0"+p;s=""+p+s}},C.getHighBits=function(){return this.high},C.getHighBitsUnsigned=function(){return this.high>>>0},C.getLowBits=function(){return this.low},C.getLowBitsUnsigned=function(){return this.low>>>0},C.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},C.isOdd=function(){return 1==(1&this.low)},C.isEven=function(){return 0==(1&this.low)},C.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)},C.eq=C.equals,C.notEquals=function(e){return!this.eq(e)},C.neq=C.notEquals,C.ne=C.notEquals,C.lessThan=function(e){return this.comp(e)<0},C.lt=C.lessThan,C.lessThanOrEqual=function(e){return this.comp(e)<=0},C.lte=C.lessThanOrEqual,C.le=C.lessThanOrEqual,C.greaterThan=function(e){return this.comp(e)>0},C.gt=C.greaterThan,C.greaterThanOrEqual=function(e){return this.comp(e)>=0},C.gte=C.greaterThanOrEqual,C.ge=C.greaterThanOrEqual,C.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},C.comp=C.compare,C.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(E)},C.neg=C.negate,C.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,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},C.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},C.sub=C.subtract,C.multiply=function(e){if(this.isZero())return g;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 g;if(this.eq(N))return e.isOdd()?N:g;if(e.eq(N))return this.isOdd()?N:g;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,s=65535&this.low,o=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,y=0,f=0,E=0;return f+=(E+=s*d)>>>16,y+=(f+=a*d)>>>16,f&=65535,y+=(f+=s*u)>>>16,_+=(y+=n*d)>>>16,y&=65535,_+=(y+=a*u)>>>16,y&=65535,_+=(y+=s*l)>>>16,_+=t*d+n*u+a*l+s*o,p((f&=65535)<<16|(E&=65535),(_&=65535)<<16|(y&=65535),this.unsigned)},C.mul=C.multiply,C.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:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return f;if(e.gt(this.shru(1)))return T;a=f}else{if(this.eq(N))return e.eq(E)||e.eq(I)?N:e.eq(N)?E:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?E:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?f:g;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=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=E),a=a.add(u),n=n.sub(d)}return a},C.div=C.divide,C.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))},C.mod=C.modulo,C.rem=C.modulo,C.not=function(){return p(~this.low,~this.high,this.unsigned)},C.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},C.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},C.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},C.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)},C.shr=C.shiftRight,C.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)},C.shru=C.shiftRightUnsigned,C.shr_u=C.shiftRightUnsigned,C.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},C.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},C.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},C.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]},C.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(15);e.i64_zero=t.ZERO,e.i64_one=t.ONE,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_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},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),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},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(5))},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},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.normalizePath=i,t.resolvePath=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(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable()):r&&1==r.length?(y=e.compileExpression(c[0],e.options.usizeType,1,0),(b=2==c.length?u(e,c[1]):0)<0?E.createUnreachable():(e.currentType=r[0],E.createLoad(r[0].byteSize,r[0].is(5),y,r[0].is(4)&&h.is(4)&&h.size>r[0].size?(e.currentType=h).toNativeType():(e.currentType=r[0]).toNativeType(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"store":if(e.currentType=a.Type.void,c.length<2||c.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],r[0],r[0].is(4)?0:1,0);T=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();var L;if(!(L=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable();var b=void 0;if(c.length){if(c[0].kind!=i.NodeKind.LITERAL||c[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,c[0].range),E.createUnreachable();var k=c[0].value,x=L.members?L.members.get(k):null;if(!x||x.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,c[0].range,L.internalName,k),E.createUnreachable();b=x.memoryOffset}else b=L.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,E.createI32(b)):E.createI64(b):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,E.createI64(b)):E.createI32(b);case"select":if(3!=c.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();y=e.compileExpression(c[0],r[0],1,0)}else y=e.compileExpressionRetainType(c[0],a.Type.i32,0);T=e.currentType;switch(m=e.compileExpression(c[1],T,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=T,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:f=E.createSelect(y,m,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),f=E.createUnreachable()}return f;case"unreachable":return 0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),y=E.createUnreachable()):y=e.compileExpression(c[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.GrowMemory,null,[y]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],e.options.usizeType,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],a.Type.u32,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=r[0],E.createUnreachable()):(y=e.compileExpressionRetainType(c[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"assert":if(c.length<1||c.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):c.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();y=e.compileExpression(c[0],r[0],1,1)}else y=e.compileExpressionRetainType(c[0],a.Type.bool,1);T=e.currentType;if(e.currentType=T.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,E.createNop()):y;var R=_(e,2==c.length?c[1]:null,d);if(e.currentType=T.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:f=E.createIf(E.createUnary(s.UnaryOp.EqzI32,y),R);break;case 3:case 8:f=E.createIf(E.createUnary(s.UnaryOp.EqzI64,y),R);break;case 4:case 9:f=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),R);break;case 11:f=E.createIf(E.createBinary(s.BinaryOp.EqF32,y,E.createF32(0)),R);break;case 12:f=E.createIf(E.createBinary(s.BinaryOp.EqF64,y,E.createF64(0)),R);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),f=R}e.currentType=a.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:A=e.currentFunction.flow,v=e.currentFunction.getAndFreeTempLocal(e.currentType,!A.canOverflow(y,e.currentType));f=E.createIf(E.createTeeLocal(v.index,y),E.createGetLocal(v.index,s.NativeType.I32),R);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);f=E.createIf(E.createTeeLocal(v.index,y),E.createGetLocal(v.index,s.NativeType.I32),R);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);f=E.createIf(E.createUnary(s.UnaryOp.EqzI64,E.createTeeLocal(v.index,y)),R,E.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,E.createTeeLocal(v.index,y)),R,E.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);f=E.createIf(E.createBinary(s.BinaryOp.EqF32,E.createTeeLocal(v.index,y),E.createF32(0)),R,E.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);f=E.createIf(E.createBinary(s.BinaryOp.EqF64,E.createTeeLocal(v.index,y),E.createF64(0)),R,E.createGetLocal(v.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),f=R}return f;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable()):((A=e.currentFunction.flow).set(2048),f=e.compileExpressionRetainType(c[0],h,0),A.unset(2048),f);case"i8":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.i8,E.createUnreachable()):e.compileExpression(c[0],a.Type.i8,2,0);case"i16":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.i16,E.createUnreachable()):e.compileExpression(c[0],a.Type.i16,2,0);case"i32":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.i32,E.createUnreachable()):e.compileExpression(c[0],a.Type.i32,2,0);case"i64":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.i64,E.createUnreachable()):e.compileExpression(c[0],a.Type.i64,2,0);case"isize":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=e.options.isWasm64?a.Type.isize64:a.Type.isize32,E.createUnreachable()):e.compileExpression(c[0],e.options.isWasm64?a.Type.isize64:a.Type.isize32,2,0);case"u8":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.u8,E.createUnreachable()):e.compileExpression(c[0],a.Type.u8,2,0);case"u16":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.u16,E.createUnreachable()):e.compileExpression(c[0],a.Type.u16,2,0);case"u32":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.u32,E.createUnreachable()):e.compileExpression(c[0],a.Type.u32,2,0);case"u64":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.u64,E.createUnreachable()):e.compileExpression(c[0],a.Type.u64,2,0);case"usize":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=e.options.usizeType,E.createUnreachable()):e.compileExpression(c[0],e.options.usizeType,2,0);case"bool":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.bool,E.createUnreachable()):e.compileExpression(c[0],a.Type.bool,2,0);case"f32":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.f32,E.createUnreachable()):e.compileExpression(c[0],a.Type.f32,2,0);case"f64":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.f64,E.createUnreachable()):e.compileExpression(c[0],a.Type.f64,2,0)}var B=function(e,t,r,n,i){switch(t.internalName){case"i32.clz":return p("clz",e,a.Type.i32,r,a.Type.i32,i);case"i64.clz":return p("clz",e,a.Type.i64,r,a.Type.i64,i);case"i32.ctz":return p("ctz",e,a.Type.i32,r,a.Type.i32,i);case"i64.ctz":return p("ctz",e,a.Type.i64,r,a.Type.i64,i);case"i32.popcnt":return p("popcnt",e,a.Type.i32,r,a.Type.i32,i);case"i64.popcnt":return p("popcnt",e,a.Type.i64,r,a.Type.i64,i);case"i32.rotl":return p("rotl",e,a.Type.i32,r,a.Type.i32,i);case"i64.rotl":return p("rotl",e,a.Type.i64,r,a.Type.i64,i);case"i32.rotr":return p("rotr",e,a.Type.i32,r,a.Type.i32,i);case"i64.rotr":return p("rotr",e,a.Type.i64,r,a.Type.i64,i);case"f32.abs":return p("abs",e,a.Type.f32,r,a.Type.f32,i);case"f64.abs":return p("abs",e,a.Type.f64,r,a.Type.f64,i);case"f32.max":return p("max",e,a.Type.f32,r,a.Type.f32,i);case"f64.max":return p("max",e,a.Type.f64,r,a.Type.f64,i);case"f32.min":return p("min",e,a.Type.f32,r,a.Type.f32,i);case"f64.min":return p("min",e,a.Type.f64,r,a.Type.f64,i);case"f32.ceil":return p("ceil",e,a.Type.f32,r,a.Type.f32,i);case"f64.ceil":return p("ceil",e,a.Type.f64,r,a.Type.f64,i);case"f32.floor":return p("floor",e,a.Type.f32,r,a.Type.f32,i);case"f64.floor":return p("floor",e,a.Type.f64,r,a.Type.f64,i);case"f32.copysign":return p("copysign",e,a.Type.f32,r,a.Type.f32,i);case"f64.copysign":return p("copysign",e,a.Type.f64,r,a.Type.f64,i);case"f32.nearest":return p("nearest",e,a.Type.f32,r,a.Type.f32,i);case"f64.nearest":return p("nearest",e,a.Type.f64,r,a.Type.f64,i);case"i32.reinterpret_f32":return p("reinterpret",e,a.Type.i32,r,a.Type.f32,i);case"i64.reinterpret_f64":return p("reinterpret",e,a.Type.i64,r,a.Type.f64,i);case"f32.reinterpret_i32":return p("reinterpret",e,a.Type.f32,r,a.Type.i32,i);case"f64.reinterpret_i64":return p("reinterpret",e,a.Type.f64,r,a.Type.i64,i);case"f32.sqrt":return p("sqrt",e,a.Type.f32,r,a.Type.f32,i);case"f64.sqrt":return p("sqrt",e,a.Type.f64,r,a.Type.f64,i);case"f32.trunc":return p("trunc",e,a.Type.f32,r,a.Type.f32,i);case"f64.trunc":return p("trunc",e,a.Type.f64,r,a.Type.f64,i);case"i32.load8_s":return p("load",e,a.Type.i8,r,a.Type.i32,i);case"i32.load8_u":return p("load",e,a.Type.u8,r,a.Type.u32,i);case"i32.load16_s":return p("load",e,a.Type.i16,r,a.Type.i32,i);case"i32.load16_u":return p("load",e,a.Type.u16,r,a.Type.u32,i);case"i32.load":return p("load",e,a.Type.i32,r,a.Type.i32,i);case"i64.load8_s":return p("load",e,a.Type.i8,r,a.Type.i64,i);case"i64.load8_u":return p("load",e,a.Type.u8,r,a.Type.u64,i);case"i64.load16_s":return p("load",e,a.Type.i16,r,a.Type.i64,i);case"i64.load16_u":return p("load",e,a.Type.u16,r,a.Type.u64,i);case"i64.load32_s":return p("load",e,a.Type.i32,r,a.Type.i64,i);case"i64.load32_u":return p("load",e,a.Type.u32,r,a.Type.u64,i);case"i64.load":return p("load",e,a.Type.i64,r,a.Type.i64,i);case"f32.load":return p("load",e,a.Type.f32,r,a.Type.f32,i);case"f64.load":return p("load",e,a.Type.f64,r,a.Type.f64,i);case"i32.store8":return p("store",e,a.Type.i8,r,a.Type.i32,i);case"i32.store16":return p("store",e,a.Type.i16,r,a.Type.i32,i);case"i32.store":return p("store",e,a.Type.i32,r,a.Type.i32,i);case"i64.store8":return p("store",e,a.Type.i8,r,a.Type.i64,i);case"i64.store16":return p("store",e,a.Type.i16,r,a.Type.i64,i);case"i64.store32":return p("store",e,a.Type.i32,r,a.Type.i64,i);case"i64.store":return p("store",e,a.Type.i64,r,a.Type.i64,i);case"f32.store":return p("store",e,a.Type.f32,r,a.Type.f32,i);case"f64.store":return p("store",e,a.Type.f64,r,a.Type.f64,i)}return 0}(e,t,c,0,d);return B?(r&&r.length&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),B):(e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable())}function p(e,t,r,n,i,a){var s=assert(t.program.elementsLookup.get(e));return assert(s.kind==o.ElementKind.FUNCTION_PROTOTYPE),c(t,s,[r],n,i,a)}function l(e,t,r,i){if(0==r.length)return t&&1==t.length?t[0]:(e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t?t.length.toString(10):"0"),null);if(1==r.length){if(t)if(1==t.length)e.compileExpression(r[0],t[0],1,0);else{if(t.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),null;e.compileExpressionRetainType(r[0],a.Type.i32,0)}else e.compileExpressionRetainType(r[0],a.Type.i32,0);return e.currentType}return t&&t.length>1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function u(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=c;var h="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(h);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,h),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=c.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var d="abort";function _(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(d);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=p.resolve();if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=_},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(22);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(3).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(5))},function(e,t){e.exports=(e=>{var t=new Uint8Array(0),r=0;e.allocate_memory=function(e){if(!(e>>>=0))return 0;if(r+e>t.length){var n=t;(t=new Uint8Array(Math.max(65536,t.length+e,2*t.length))).set(n)}var i=r;return 7&(r+=e)&&(r=1+(7|r)),i},e.free_memory=function(e){},e.move_memory=function(e,r,n){t.copyWithin(e,r,r+n)},e.store=function(e,r,n){t[e+(0|n)]=r},e.load=function(e,r){return t[e+(0|r)]}})},function(e,t){e.exports=(e=>{e.JSMath=Math})},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function n(){Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function i(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,i):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_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),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_POSITIVE_VALUE:{value:2.2250738585072014e-308,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.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},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},n.prototype=Object.create(Error.prototype),n.prototype.name="UnreachableError",n.prototype.message="unreachable",t.unreachable=function(){throw new n},i.prototype=Object.create(Error.prototype),i.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new i(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)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},r(25)(t),r(24)(t)}).call(this,r(5))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(26),r(23),r(16),r(14)},function(e,t,r){r(27),e.exports=r(13)}])}); +!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){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=28)}([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)}),a=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}}}},s=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),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.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 s};Object.defineProperty(t,"__esModule",{value:!0});var o=r(2),c=r(7),p=r(4),l=r(3);t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER;var u,h=function(){return function(){}}(),d=function(){return function(){}}(),_=function(){return function(){}}();function y(e){switch(e){case"[]":return u.INDEXED_GET;case"[]=":return u.INDEXED_SET;case"{}":return u.UNCHECKED_INDEXED_GET;case"{}=":return u.UNCHECKED_INDEXED_SET;case"+":return u.ADD;case"-":return u.SUB;case"*":return u.MUL;case"/":return u.DIV;case"%":return u.REM;case"**":return u.POW;case"&":return u.AND;case"|":return u.OR;case"^":return u.XOR;case"==":return u.EQ;case"!=":return u.NE;case">":return u.GT;case">=":return u.GE;case"<":return u.LT;case"<=":return u.LE}return u.INVALID}!function(e){e[e.INVALID=0]="INVALID",e[e.INDEXED_GET=1]="INDEXED_GET",e[e.INDEXED_SET=2]="INDEXED_SET",e[e.UNCHECKED_INDEXED_GET=3]="UNCHECKED_INDEXED_GET",e[e.UNCHECKED_INDEXED_SET=4]="UNCHECKED_INDEXED_SET",e[e.ADD=5]="ADD",e[e.SUB=6]="SUB",e[e.MUL=7]="MUL",e[e.DIV=8]="DIV",e[e.REM=9]="REM",e[e.POW=10]="POW",e[e.AND=11]="AND",e[e.OR=12]="OR",e[e.XOR=13]="XOR",e[e.EQ=14]="EQ",e[e.NE=15]="NE",e[e.GT=16]="GT",e[e.GE=17]="GE",e[e.LT=18]="LT",e[e.LE=19]="LE"}(u=t.OperatorKind||(t.OperatorKind={}));var m,g,f,E=new Map,T=function(e){function r(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elementsLookup=new Map,r.instancesLookup=new Map,r.typesLookup=E,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayPrototype=null,r.arrayBufferViewPrototype=null,r.stringInstance=null,r.resolvedThisExpression=null,r.resolvedElementExpression=null,r.sources=[],r}return i(r,e),r.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r",u+="<"+I+">")}else if(r){var v=r.get(u);if(v)return v}}return(_=this.typesLookup.get(h))||(_=this.typesLookup.get(u))?_:(n&&this.error(o.DiagnosticCode.Cannot_find_name_0,s.name.range,u),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,p.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),c=0;c"),n=new x(this,K,w,C||l,t),this.instances.set(r,n),this.program.instancesLookup.set(K,n),n},r.prototype.resolvePartial=function(e){assert(this.is(g.INSTANCE));var n=assert(this.classPrototype);if(!e||!e.length)return this;var i=this.simpleName,a=c.typesToString(e),s=new r(this.program,i,n.internalName+"<"+a+">"+t.INSTANCE_DELIMITER+i,this.declaration,n,this.decoratorFlags);return s.flags=this.flags,s.operatorKind=this.operatorKind,s.classTypeArguments=e,s},r.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;return!this.is(g.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},r.prototype.resolveBuiltinTypeArguments=function(e,t){assert(this.is(g.BUILTIN));var r=null;if(e){var n=e.length;r=new Array(n);for(var i=0;i=0),assert(null!=e.type),e.type.toNativeType()){case l.NativeType.I32:t=this.tempI32s||(this.tempI32s=[]);break;case l.NativeType.I64:t=this.tempI64s||(this.tempI64s=[]);break;case l.NativeType.F32:t=this.tempF32s||(this.tempF32s=[]);break;case l.NativeType.F64:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case l.NativeType.I32:r=this.tempI32s||(this.tempI32s=[]);break;case l.NativeType.I64:r=this.tempI64s||(this.tempI64s=[]);break;case l.NativeType.F32:r=this.tempF32s||(this.tempF32s=[]);break;case l.NativeType.F64:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},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)for(var r=this.debugLocations,n=0,i=r.length;n",S+="<"+n+">"),(i=new P(this,C,S,e,A)).contextualTypeArguments=r,this.instances.set(n,i),this.program.instancesLookup.set(S,i);var O,L,b,k,x,R,B,D,w=0;if(A&&(w=A.currentMemoryOffset,A.members)){i.members||(i.members=new Map);try{for(var M=a(A.members.values()),G=M.next();!G.done;G=M.next()){var K=G.value;i.members.set(K.simpleName,K)}}catch(e){b={error:e}}finally{try{G&&!G.done&&(k=M.return)&&k.call(M)}finally{if(b)throw b.error}}}if(this.constructorPrototype){var z=this.constructorPrototype.resolvePartial(e);z&&(i.constructorInstance=z.resolve())}if(this.instanceMembers)try{for(var V=a(this.instanceMembers.values()),H=V.next();!H.done;H=V.next()){var X=H.value;switch(X.kind){case m.FIELD_PROTOTYPE:i.members||(i.members=new Map);var W=X.declaration;if(!W.type)throw new Error("type expected");var Y=this.program.resolveType(W.type,i.contextualTypeArguments);if(Y){var Q=new U(X,S+t.INSTANCE_DELIMITER+X.simpleName,Y,W,i);switch(Y.byteSize){case 1:break;case 2:1&w&&++w;break;case 4:3&w&&(w=1+(3|w));break;case 8:7&w&&(w=1+(7|w));break;default:assert(!1)}Q.memoryOffset=w,w+=Y.byteSize,i.members.set(X.simpleName,Q)}break;case m.FUNCTION_PROTOTYPE:i.members||(i.members=new Map);var q=X.resolvePartial(e);q&&(q.internalName=S+t.INSTANCE_DELIMITER+q.simpleName,i.members.set(X.simpleName,q));break;case m.PROPERTY:i.members||(i.members=new Map);var j=assert(X.getterPrototype),Z=X.setterPrototype,$=new F(this.program,X.simpleName,S+t.INSTANCE_DELIMITER+X.simpleName,this),J=j.resolvePartial(e);if(!J)return null;if(J.internalName=S+t.INSTANCE_DELIMITER+J.simpleName,$.getterPrototype=J,Z){var ee=Z.resolvePartial(e);if(!ee)return null;ee.internalName=S+t.INSTANCE_DELIMITER+ee.simpleName,$.setterPrototype=ee}i.members.set(X.simpleName,$);break;default:assert(!1)}}}catch(e){x={error:e}}finally{try{H&&!H.done&&(R=V.return)&&R.call(V)}finally{if(x)throw x.error}}try{for(var te=a(this.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=s(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=u.INVALID);var se=void 0;if(ae.is(g.INSTANCE)){var oe=ae.resolvePartial(e);if(!oe)continue;se=oe.resolve()}else se=ae.resolve();if(se){var ce=i.overloads;ce||(i.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){B={error:e}}finally{try{re&&!re.done&&(D=te.return)&&D.call(te)}finally{if(B)throw B.error}}return i.currentMemoryOffset=w,i},r.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;if(this.is(g.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)},r.prototype.toString=function(){return this.simpleName},r}(v);t.ClassPrototype=D;var P=function(e){function t(t,r,n,i,o){void 0===i&&(i=null),void 0===o&&(o=null);var c=e.call(this,t.program,r,n)||this;if(c.kind=m.CLASS,c.contextualTypeArguments=null,c.currentMemoryOffset=0,c.constructorInstance=null,c.overloads=null,c.prototype=t,c.flags=t.flags,c.decoratorFlags=t.decoratorFlags,c.typeArguments=i,c.type=t.program.options.usizeType.asClass(c),c.base=o,o){var p=o.contextualTypeArguments;if(p){c.contextualTypeArguments||(c.contextualTypeArguments=new Map);try{for(var l=a(p),u=l.next();!u.done;u=l.next()){var h=s(u.value,2),d=h[0],_=h[1];c.contextualTypeArguments.set(d,_)}}catch(e){f={error:e}}finally{try{u&&!u.done&&(E=l.return)&&E.call(l)}finally{if(f)throw f.error}}}}var y,g,f,E,T=c.prototype.declaration;if(T){var I=T.typeParameters;if(i){if((g=i.length)!=I.length)throw new Error("type argument count mismatch");if(g)for(c.contextualTypeArguments||(c.contextualTypeArguments=new Map),y=0;y=r.length)return!1;t=r[n],e-=64*(n+1)}return i64_ne(i64_and(t,i64_shl(i64_one,i64_new(e))),i64_zero)},e.prototype.setLocalWrapped=function(e,t){var r,n=-1;if(e<64){if(e<0)return;r=this.wrappedLocals}else{var i=this.wrappedLocalsExt;for(n=(e-64)/64|0,i||(this.wrappedLocalsExt=i=new Array(n+1),i.length=0);i.length<=n;)i.push(i64_new(0));r=i[n],e-=64*(n+1)}r=t?i64_or(r,i64_shl(i64_one,i64_new(e))):i64_and(r,i64_not(i64_shl(i64_one,i64_new(e)))),n>=0?this.wrappedLocalsExt[n]=r:this.wrappedLocals=r},e.prototype.inherit=function(e){this.flags|=4127&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&4127,this.wrappedLocals=i64_and(e.wrappedLocals,t.wrappedLocals);var r=e.wrappedLocalsExt,n=t.wrappedLocalsExt;if(null!=r&&null!=n){var i=this.wrappedLocalsExt,a=min(r.length,n.length);if(a){if(i)for(;i.lengtha):this.canOverflow(l.getBinaryLeft(e),t)&&!(l.getExpressionId(r=l.getBinaryRight(e))==l.ExpressionId.Const&&l.getConstValueI32(r)>=a);case l.BinaryOp.DivU32:case l.BinaryOp.RemI32:case l.BinaryOp.RemU32:return this.canOverflow(l.getBinaryLeft(e),t)||this.canOverflow(l.getBinaryRight(e),t)}break;case l.ExpressionId.Unary:switch(l.getUnaryOp(e)){case l.UnaryOp.EqzI32:case l.UnaryOp.EqzI64:return!1;case l.UnaryOp.ClzI32:case l.UnaryOp.CtzI32:case l.UnaryOp.PopcntI32:return t.size<7}break;case l.ExpressionId.Const:var s=0;switch(l.getExpressionType(e)){case l.NativeType.I32:s=l.getConstValueI32(e);break;case l.NativeType.I64:s=l.getConstValueI64Low(e);break;case l.NativeType.F32:s=i32(l.getConstValueF32(e));break;case l.NativeType.F64:s=i32(l.getConstValueF64(e));break;default:assert(!1)}switch(t.kind){case 0:return si8.MAX_VALUE;case 1:return si16.MAX_VALUE;case 5:return s<0||s>u8.MAX_VALUE;case 6:return s<0||s>u16.MAX_VALUE;case 10:return 0!=(-2&s)}break;case l.ExpressionId.Load:var o=void 0;switch(l.getLoadBytes(e)){case 1:o=l.isLoadSigned(e)?c.Type.i8:c.Type.u8;break;case 2:o=l.isLoadSigned(e)?c.Type.i16:c.Type.u16;break;default:o=l.isLoadSigned(e)?c.Type.i32:c.Type.u32}return K(o,t);case l.ExpressionId.Block:if(!l.getBlockName(e)){var p=assert(l.getBlockChildCount(e)),u=l.getBlockChild(e,p-1);return this.canOverflow(u,t)}break;case l.ExpressionId.If:return this.canOverflow(l.getIfTrue(e),t)||this.canOverflow(assert(l.getIfFalse(e)),t);case l.ExpressionId.Select:return this.canOverflow(l.getSelectThen(e),t)||this.canOverflow(l.getSelectElse(e),t);case l.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(l.getCallTarget(e))));assert(d.kind==m.FUNCTION);var _=d.signature.returnType;return!d.flow.is(4096)||K(_,t);case l.ExpressionId.Unreachable:return!1}return!0},e.prototype.finalize=function(){assert(null==this.parent),this.continueLabel=null,this.breakLabel=null,this.returnLabel=null,this.contextualTypeArguments=null},e}();function K(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=G},function(e,t,r){"use strict";function n(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}Object.defineProperty(t,"__esModule",{value:!0}),n(r(20)),n(r(19)),n(r(18)),n(r(17))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(8),a=r(1),s=r(8);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.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=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var p=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,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},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?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=h(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=h(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.createCallIndirect=function(e,t,r){var n=u(t),i=h(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}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=h(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=h(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{free_memory(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(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=h(e),i=h(t),a=h(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=h(e),i=h(t),a=h(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=h(e),a=h(t),s=h(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=h(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 s=h(i),o=r.length,c=new Array(o),u=new Array(o),d=new Array(o),_=0;_=0;--_)free_memory(c[_]);free_memory(s)}},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.precomputeFunction=function(e){var t=this.cachedPrecomputeNames;if(!t){var r=h("precompute");this.cachedPrecomputeName=r,this.cachedPrecomputeNames=t=l([r])}_BinaryenFunctionRunPasses(e,this.ref,t,1)},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=h(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=d(t);var a=d(t+4);i=d(t+8);var s=new y;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function u(e){return l(e)}function h(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 d(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function _(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=c,t.readString=_;var y=function(){return function(){}}();t.BinaryModule=y},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(0),s=r(6);t.Token=s.Token,t.Range=s.Range;var o,c=r(1);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.PARAMETER=3]="PARAMETER",e[e.SIGNATURE=4]="SIGNATURE",e[e.IDENTIFIER=5]="IDENTIFIER",e[e.ASSERTION=6]="ASSERTION",e[e.BINARY=7]="BINARY",e[e.CALL=8]="CALL",e[e.COMMA=9]="COMMA",e[e.ELEMENTACCESS=10]="ELEMENTACCESS",e[e.FALSE=11]="FALSE",e[e.FUNCTION=12]="FUNCTION",e[e.LITERAL=13]="LITERAL",e[e.NEW=14]="NEW",e[e.NULL=15]="NULL",e[e.PARENTHESIZED=16]="PARENTHESIZED",e[e.PROPERTYACCESS=17]="PROPERTYACCESS",e[e.TERNARY=18]="TERNARY",e[e.SUPER=19]="SUPER",e[e.THIS=20]="THIS",e[e.TRUE=21]="TRUE",e[e.CONSTRUCTOR=22]="CONSTRUCTOR",e[e.UNARYPOSTFIX=23]="UNARYPOSTFIX",e[e.UNARYPREFIX=24]="UNARYPREFIX",e[e.BLOCK=25]="BLOCK",e[e.BREAK=26]="BREAK",e[e.CONTINUE=27]="CONTINUE",e[e.DO=28]="DO",e[e.EMPTY=29]="EMPTY",e[e.EXPORT=30]="EXPORT",e[e.EXPORTIMPORT=31]="EXPORTIMPORT",e[e.EXPRESSION=32]="EXPRESSION",e[e.FOR=33]="FOR",e[e.IF=34]="IF",e[e.IMPORT=35]="IMPORT",e[e.RETURN=36]="RETURN",e[e.SWITCH=37]="SWITCH",e[e.THROW=38]="THROW",e[e.TRY=39]="TRY",e[e.VARIABLE=40]="VARIABLE",e[e.VOID=41]="VOID",e[e.WHILE=42]="WHILE",e[e.CLASSDECLARATION=43]="CLASSDECLARATION",e[e.ENUMDECLARATION=44]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=45]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=46]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=47]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=48]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=49]="INTERFACEDECLARATION",e[e.METHODDECLARATION=50]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=51]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=52]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=53]="VARIABLEDECLARATION",e[e.DECORATOR=54]="DECORATOR",e[e.EXPORTMEMBER=55]="EXPORTMEMBER",e[e.SWITCHCASE=56]="SWITCHCASE",e[e.COMMENT=57]="COMMENT"}(o=t.NodeKind||(t.NodeKind={}));var p=function(){function e(){this.parent=null,this.flags=a.CommonFlags.NONE}return e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.set=function(e){this.flags|=e},e.createType=function(e,t,r,n){var i=new u;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&xe(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new h;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new d;return a.range=i,a.name=e,e.parent=a,a.type=t,t&&(t.parent=a),a.initializer=r,r&&(r.parent=a),a.parameterKind=n,a},e.createSignature=function(e,t,r,n,i){var a=new y;return a.range=i,a.parameterTypes=e,xe(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new g;return n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&xe(t,n),n.decoratorKind=e.kind==o.IDENTIFIER?m(e.text):_.CUSTOM,n},e.createComment=function(e,t,r){var n=new f;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new I;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new I;return t.range=e,t.text="",t},e.createArrayLiteralExpression=function(e,t){var r=new A;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(j);t.ClassDeclaration=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.CONTINUE,t}return i(t,e),t}(Q);t.ContinueStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.DO,t}return i(t,e),t}(Q);t.DoStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EMPTY,t}return i(t,e),t}(Q);t.EmptyStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.ENUMDECLARATION,t}return i(t,e),t}(j);t.EnumDeclaration=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.ENUMVALUEDECLARATION,t}return i(t,e),t}(j);t.EnumValueDeclaration=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORTIMPORT,t}return i(t,e),t}(p);t.ExportImportStatement=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORTMEMBER,t}return i(t,e),t}(p);t.ExportMember=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORT,t}return i(t,e),t}(Q);t.ExportStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPRESSION,t}return i(t,e),t}(Q);t.ExpressionStatement=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FIELDDECLARATION,t.parameterIndex=-1,t}return i(t,e),t}(Z);t.FieldDeclaration=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FOR,t}return i(t,e),t}(Q);t.ForStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FUNCTIONDECLARATION,t}return i(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(j);t.FunctionDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IF,t}return i(t,e),t}(Q);t.IfStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IMPORTDECLARATION,t}return i(t,e),t}(j);t.ImportDeclaration=_e;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IMPORT,t}return i(t,e),t}(Q);t.ImportStatement=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.INTERFACEDECLARATION,t}return i(t,e),t}(ee);t.InterfaceDeclaration=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.METHODDECLARATION,t}return i(t,e),t}(he);t.MethodDeclaration=ge;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.NAMESPACEDECLARATION,t}return i(t,e),t}(j);t.NamespaceDeclaration=fe;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.RETURN,t}return i(t,e),t}(Q);t.ReturnStatement=Ee;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.SWITCHCASE,t}return i(t,e),t}(p);t.SwitchCase=Te;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.SWITCH,t}return i(t,e),t}(Q);t.SwitchStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.THROW,t}return i(t,e),t}(Q);t.ThrowStatement=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.TRY,t}return i(t,e),t}(Q);t.TryStatement=Ae;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.TYPEDECLARATION,t}return i(t,e),t}(j);t.TypeDeclaration=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VARIABLEDECLARATION,t}return i(t,e),t}(Z);t.VariableDeclaration=Ce;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VARIABLE,t}return i(t,e),t}(Q);t.VariableStatement=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VOID,t}return i(t,e),t}(Q);t.VoidStatement=Oe;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.WHILE,t}return i(t,e),t}(Q);function be(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=o.VARIABLEDECLARATION||n.kind!=o.VARIABLE||(n=n.parent))?n.kind==o.CLASSDECLARATION?be(n,t)+(e.is(a.CommonFlags.STATIC)?a.STATIC_DELIMITER:a.INSTANCE_DELIMITER)+r:n.kind==o.NAMESPACEDECLARATION||n.kind==o.ENUMDECLARATION?be(n,t)+a.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+a.PATH_DELIMITER+r:r}function ke(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function xe(e,t){for(var r=0,n=e.length;r";case a.LESSTHAN_EQUALS:return"<=";case a.GREATERTHAN_EQUALS:return">=";case a.EQUALS_EQUALS:return"==";case a.EXCLAMATION_EQUALS:return"!=";case a.EQUALS_EQUALS_EQUALS:return"===";case a.EXCLAMATION_EQUALS_EQUALS:return"!==";case a.PLUS:return"+";case a.MINUS:return"-";case a.ASTERISK_ASTERISK:return"**";case a.ASTERISK:return"*";case a.SLASH:return"/";case a.PERCENT:return"%";case a.PLUS_PLUS:return"++";case a.MINUS_MINUS:return"--";case a.LESSTHAN_LESSTHAN:return"<<";case a.GREATERTHAN_GREATERTHAN:return">>";case a.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case a.AMPERSAND:return"&";case a.BAR:return"|";case a.CARET:return"^";case a.EXCLAMATION:return"!";case a.TILDE:return"~";case a.AMPERSAND_AMPERSAND:return"&&";case a.BAR_BAR:return"||";case a.EQUALS:return"=";case a.PLUS_EQUALS:return"+=";case a.MINUS_EQUALS:return"-=";case a.ASTERISK_EQUALS:return"*=";case a.ASTERISK_ASTERISK_EQUALS:return"**=";case a.SLASH_EQUALS:return"/=";case a.PERCENT_EQUALS:return"%=";case a.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case a.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case a.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case a.AMPERSAND_EQUALS:return"&=";case a.BAR_EQUALS:return"|=";case a.CARET_EQUALS:return"^=";default:return assert(!1),""}};var h=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=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=h;var d=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.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,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(p.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=o}return this.nextToken},t.prototype.skipIdentifier=function(){return this.skip(a.IDENTIFIER,s.PREFER)},t.prototype.skipIdentifierName=function(){return this.skip(a.IDENTIFIER,s.ALWAYS)},t.prototype.skip=function(e,t){void 0===t&&(t=s.DEFAULT);var r=this.pos,n=this.token,i=this.tokenPos,o=i32.MAX_VALUE;switch(e){case a.GREATERTHAN:o=1}return this.token=this.unsafeNext(t,o),this.token==e?(this.nextToken=-1,!0):(this.pos=r,this.token=n,this.tokenPos=i,!1)},t.prototype.mark=function(){var e;return y?(e=y,y=null):e=new _,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){y=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,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 h(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(p.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(p.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=d;var _=function(){return function(){}}();t.State=_;var y=null},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:return this;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){var t=this.is(2)?this.size:this.size-1;return-1>>>e.size-t},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.asClass=function(t){assert(9==this.kind&&!this.classReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classReference=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.signatureReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.signatureReference=t,r},e.prototype.asNullable=function(){return assert(this.is(256)),this.cachedNullableType||(assert(!this.is(512)),this.cachedNullableType=new e(this.kind,512|this.flags,this.size),this.cachedNullableType.classReference=this.classReference,this.cachedNullableType.signatureReference=this.signatureReference),this.cachedNullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256))if(r=this.classReference){if(n=e.classReference)return r.isAssignableTo(n)}else if((i=this.signatureReference)&&(a=e.signatureReference))return i.isAssignableTo(a)}else if(!e.is(256))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:var t=this.signatureReference;return e||!t?"u32":t.toString(!0);case 8:return"u64";case 9:var r=this.classReference;return e||!r?"usize":r.toString();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;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=p&&u!=l?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t,r){"use strict";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.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_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.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",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.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",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.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",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.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",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.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",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=function(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"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";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 1038:return"A 'declare' modifier cannot be used in an already ambient context.";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 1176:return"Interface declaration cannot have 'implements' clause.";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 1317:return"A parameter property cannot be declared using a rest parameter.";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 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";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""}}},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)}),a=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 s,o=r(21),c=r(2),p=r(3),l=r(0),u=r(6),h=r(4),d=r(7),_=r(1);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var y=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.noMemory=!1,this.importMemory=!1,this.importTable=!1,this.memoryBase=0,this.sourceMap=!1,this.globalAliases=null,this.features=0}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==s.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==s.WASM64?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?d.Type.isize64:d.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?p.NativeType.I64:p.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=y,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var m=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.outerFunction=null,n.currentEnum=null,n.currentType=d.Type.void,n.startFunctionBody=[],n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,r||(r=new y),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),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(){var e=this.options,t=this.module,r=this.program;r.initialize(e);var n=assert(r.elementsLookup.get("start"));assert(n.kind==l.ElementKind.FUNCTION_PROTOTYPE);var i=new l.Function(n,n.internalName,new d.Signature([],d.Type.void));this.startFunction=i,this.currentFunction=i;for(var a=r.sources,s=0,o=a.length;s"),!1;e.type=this.currentType}else assert(!1);if(e.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.isAny(l.CommonFlags.CONST)||e.is(l.CommonFlags.STATIC|l.CommonFlags.READONLY);if(e.is(l.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(l.CommonFlags.MODULE_IMPORT),t.addGlobalImport(e.internalName,e.parent?e.parent.simpleName:"env",e.simpleName,a),e.set(l.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;e.is(l.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type,1,1)),p.getExpressionId(n)!=p.ExpressionId.Const&&(s?(n=this.precomputeExpressionRef(n),p.getExpressionId(n)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(o)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(s){switch(p.getExpressionType(n)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(p.getConstValueI32(n),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(p.getConstValueI64Low(n),p.getConstValueI64High(n));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=p.getConstValueF32(n);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=p.getConstValueF64(n);break;default:return assert(!1),!1}e.set(l.CommonFlags.INLINED),e.is(l.CommonFlags.MODULE_EXPORT)?(t.addGlobal(u,a,!1,n),t.addGlobalExport(u,g(e))):r&&r.isTopLevel&&t.addGlobal(u,a,!1,n)}else t.addGlobal(u,a,!s,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==l.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(l.CommonFlags.COMPILED))return!0;e.set(l.CommonFlags.COMPILED);var t=this.module;this.currentEnum=e;var r,n,i=null;if(e.members)try{for(var s=a(e.members.values()),o=s.next();!o.done;o=s.next()){var u=o.value;if(u.kind==l.ElementKind.ENUMVALUE){var h=!1,_=u,y=_.declaration;if(_.set(l.CommonFlags.COMPILED),_.is(l.CommonFlags.INLINED))e.declaration.isTopLevelExport&&t.addGlobal(_.internalName,p.NativeType.I32,!1,t.createI32(_.constantValue));else{var m=void 0;y.value?(m=this.compileExpression(y.value,d.Type.i32,1,0),p.getExpressionId(m)!=p.ExpressionId.Const&&(m=this.precomputeExpressionRef(m),p.getExpressionId(m)!=p.ExpressionId.Const&&(e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0))):null==i?m=t.createI32(0):i.is(l.CommonFlags.INLINED)?m=t.createI32(i.constantValue+1):(m=t.createBinary(p.BinaryOp.AddI32,t.createGetGlobal(i.internalName,p.NativeType.I32),t.createI32(1)),e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h?(t.addGlobal(_.internalName,p.NativeType.I32,!0,t.createI32(0)),this.startFunctionBody.push(t.createSetGlobal(_.internalName,m))):(t.addGlobal(_.internalName,p.NativeType.I32,!1,m),p.getExpressionType(m)==p.NativeType.I32?(_.constantValue=p.getConstValueI32(m),_.set(l.CommonFlags.INLINED)):(assert(!1),_.constantValue=0))}i=_,e.is(l.CommonFlags.MODULE_EXPORT)&&(u.is(l.CommonFlags.INLINED)||this.options.hasFeature(2)?t.addGlobalExport(u.internalName,g(u)):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=e.resolveUsingTypeArguments(t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(l.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+u.toString(10):"break")+"|"+n);var y=t.createBlock("case0|"+n,c,p.NativeType.None),m=!0,g=!0,f=!0,E=!0;for(h=0;h=0){v=r.flow;m&&v.set(1),g&&v.set(4096),f&&v.set(2),E&&v.set(16)}return y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),t.set(1),o.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunction&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var s=0;s");continue}m=this.currentType}var f=!1;if(_.is(l.CommonFlags.CONST))if(g)if(g=this.precomputeExpressionRef(g),p.getExpressionId(g)==p.ExpressionId.Const){var E=new l.Local(r,y,-1,m);switch(p.getExpressionType(g)){case p.NativeType.I32:E=E.withConstantIntegerValue(p.getConstValueI32(g),0);break;case p.NativeType.I64:E=E.withConstantIntegerValue(p.getConstValueI64Low(g),p.getConstValueI64High(g));break;case p.NativeType.F32:E=E.withConstantFloatValue(p.getConstValueF32(g));break;case p.NativeType.F64:E=E.withConstantFloatValue(p.getConstValueF64(g));break;default:return assert(!1),this.module.createUnreachable()}var T=n.flow.scopedLocals;if(T){if(T.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,_.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=T=new Map;T.set(y,E),f=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,_.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,_.range);if(!f){E=void 0;E=_.isAny(l.CommonFlags.LET|l.CommonFlags.CONST)||u.is(1024)?u.addScopedLocal(m,y,!1,_):n.addLocal(m,y,_),g?(o.push(this.compileAssignmentWithValue(_.name,g)),E.type.is(36)&&u.setLocalWrapped(E.index,!u.canOverflow(g,m))):E.type.is(36)&&u.setLocalWrapped(E.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,p.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)){var n=this.precomputeExpressionRef(r);if(p.getExpressionId(n)==p.ExpressionId.Const&&p.getExpressionType(n)==p.NativeType.I32){if(!p.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow.enterBranchOrScope();i.flow=s;var o="break|"+a;s.breakLabel=o;var c="continue|"+a;s.continueLabel=c;var u=this.compileStatement(e.statement);i.flow=s.leaveBranchOrScope(),i.leaveBreakContext();var h=t.createBlock(o,[t.createLoop(c,t.createIf(r,s.isAny(13)?u:t.createBlock(null,[u,t.createBreak(c)],p.NativeType.None)))],p.NativeType.None);return h},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(l.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a: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 12:if(!e.is(l.CommonFlags.BUILTIN)||t!=d.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=d.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);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: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.SUPER: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);break;default:assert(!1),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=p.getFunctionBody(n);return t.removeTemporaryFunction(),i},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),s.createUnreachable()):13==r.kind?s.createDrop(e):(1!=n||t.isAssignableTo(r)||this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=s.createUnary(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(p.UnaryOp.TruncF32ToI64,e):s.createUnary(p.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(p.UnaryOp.TruncF32ToU64,e):s.createUnary(p.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(p.UnaryOp.TruncF64ToI64,e):s.createUnary(p.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(p.UnaryOp.TruncF64ToU64,e):s.createUnary(p.UnaryOp.TruncF64ToU32,e):(assert(0==r.flags,"void type expected"),e=s.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?s.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(p.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?p.UnaryOp.ExtendI32:p.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.GtI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.GtU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.GtU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.GtF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.GtF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.LE)){o=this.compileBinaryOverload(v,_,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.LeI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.LeU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.LeU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.LeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.LeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.GE)){o=this.compileBinaryOverload(v,_,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.GeI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.GeU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.GeU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.GeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.GeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EQUALS_EQUALS)if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.EQ)){o=this.compileBinaryOverload(v,_,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.EqI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.EqI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.EqF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.EqF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EXCLAMATION_EQUALS)if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.NE)){o=this.compileBinaryOverload(v,_,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.NeI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.NeI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.NeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.NeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(_,y,t);case u.Token.PLUS_EQUALS:m=!0;case u.Token.PLUS:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.ADD)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0);else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.AddI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.AddI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.AddF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.AddF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.MINUS_EQUALS:m=!0;case u.Token.MINUS:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.SUB)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.SubI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.SubI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.SubF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.SubF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:m=!0;case u.Token.ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.MUL)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1);else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.MulI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.MulI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.MulF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.MulF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:m=!0;case u.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.POW)){o=this.compileBinaryOverload(v,_,y,e);break}var f=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(y,d.Type.f32,1,0),a=this.currentType,!(f=this.f32PowInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=h.createUnreachable();break}if(!(T=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=h.createUnreachable();break}assert(T.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=f=T.resolve()}}else if(r=this.convertExpression(r,this.currentType,d.Type.f64,1,0,_),n=this.currentType,i=this.compileExpression(y,d.Type.f64,1,0),a=this.currentType,!(f=this.f64PowInstance)){if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(T=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=h.createUnreachable();break}assert(T.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=f=T.resolve()}o=f&&this.compileFunction(f)?this.makeCallDirect(f,[r,i]):h.createUnreachable();break;case u.Token.SLASH_EQUALS:m=!0;case u.Token.SLASH:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.DIV)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y)}switch(this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.DivI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.DivU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.DivU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.DivF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.DivF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.PERCENT_EQUALS:m=!0;case u.Token.PERCENT:if(r=this.compileExpressionRetainType(_,t,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.REM)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y)}switch(this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.RemI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.RemU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.RemU64,r,i);break;case 11:if(!(f=this.f32ModInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=h.createUnreachable();break}if(!(T=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=h.createUnreachable();break}assert(T.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=f=T.resolve()}o=f&&this.compileFunction(f)?this.makeCallDirect(f,[r,i]):h.createUnreachable();break;case 12:if(!(f=this.f64ModInstance)){var E,T;if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(T=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=h.createUnreachable();break}assert(T.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=f=T.resolve()}o=f&&this.compileFunction(f)?this.makeCallDirect(f,[r,i]):h.createUnreachable();break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:m=!0;case u.Token.LESSTHAN_LESSTHAN:switch(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShlI64:p.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:m=!0;case u.Token.GREATERTHAN_GREATERTHAN:switch(r=this.compileExpressionRetainType(_,t.intType,1),n=this.currentType,i=this.compileExpression(y,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.ShrI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.ShrI64,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.ShrU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.ShrU64,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:m=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(r=this.compileExpressionRetainType(_,t.intType,1),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=h.createBinary(p.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:m=!0;case u.Token.AMPERSAND:if(r=this.compileExpressionRetainType(_,t.intType,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.AND)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.AndI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.AndI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.BAR_EQUALS:m=!0;case u.Token.BAR:if(r=this.compileExpressionRetainType(_,t.intType,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.OR)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.OrI32,r,i);break;case 2:case 7:o=h.createBinary(p.BinaryOp.OrI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.OrI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.CARET_EQUALS:m=!0;case u.Token.CARET:var I,v;if(r=this.compileExpressionRetainType(_,t.intType,0),I=(n=this.currentType).classReference)if(v=I.lookupOverload(l.OperatorKind.XOR)){o=this.compileBinaryOverload(v,_,y,e);break}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.XorI32,r,i);break;case 2:case 7:o=h.createBinary(p.BinaryOp.XorI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.XorI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,o=h.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=h.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),i,h.createGetLocal(assert(N).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,o=this.module.cloneExpression(r,!0,0))o=this.module.createIf(this.makeIsTrueish(r,this.currentType),o,i);else{A=this.currentFunction.flow,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),h.createGetLocal(assert(N).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return m?this.compileAssignmentWithValue(_,o,t!=d.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r){var n,i=0;if(e.is(l.CommonFlags.INSTANCE)){var a=assert(e.parent);assert(a.kind==l.ElementKind.CLASS),i=this.compileExpression(t,a.type,1,0),n=[]}else n=[t];return this.compileCallDirect(e,n,r,i,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n){var i,a=0;if(e.is(l.CommonFlags.INSTANCE)){var s=assert(e.parent);assert(s.kind==l.ElementKind.CLASS),a=this.compileExpression(t,s.type,1,0),i=[r]}else i=[t,r];return this.compileCallDirect(e,i,n,a,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case l.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=d.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=s.type;break;case l.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var p=o.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.signature.parameterTypes[0];break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=a.flow.is(2048),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:var a=i.type;if(this.currentType=r?a:d.Type.void,i.is(l.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(l.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(t=this.ensureSmallIntegerWrap(t,a),r){var o=a.toNativeType(),p=i.internalName;return n.createBlock(null,[n.createSetGlobal(p,t),n.createGetGlobal(p,o)],o)}return n.createSetGlobal(i.internalName,t);case l.ElementKind.FIELD:var u=i.declaration;if(i.is(l.CommonFlags.READONLY)&&!this.currentFunction.is(l.CommonFlags.CONSTRUCTOR)&&null!=u&&null==u.initializer)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(O=this.currentFunction).flow;var y=O.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,_,n.createGetLocal(y,o),o,i.memoryOffset),n.createGetLocal(y,o)],o)}return n.createStore(a.byteSize,_,t,o,i.memoryOffset);case l.ElementKind.PROPERTY:var m=i.setterPrototype;if(m){var g=m.resolve();if(!g)return n.createUnreachable();if(!r){if(g.is(l.CommonFlags.INSTANCE)){h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.makeCallDirect(g,[_,t])}return this.makeCallDirect(g,[t])}var f=i.getterPrototype;assert(null!=f);var E=f.resolve();if(!E)return n.createUnreachable();var T=(k=E.signature.returnType).toNativeType();if(g.is(l.CommonFlags.INSTANCE)){h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(k,!1).index;return n.createBlock(null,[this.makeCallDirect(g,[n.createTeeLocal(y,_),t]),this.makeCallDirect(E,[n.createGetLocal(y,T)])],T)}return n.createBlock(null,[this.makeCallDirect(g,[t]),this.makeCallDirect(E)],T)}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case l.ElementKind.CLASS:var I=this.program.resolvedElementExpression;if(I){var v=this.currentFunction.flow.is(2048),A=i.lookupOverload(l.OperatorKind.INDEXED_GET,v);if(!A)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(l.OperatorKind.INDEXED_SET,v);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?A.signature.returnType:d.Type.void,n.createUnreachable();var C=i.type,S=(h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0),this.compileExpression(I,d.Type.i32,1,0));if(r){var O,L=(O=this.currentFunction).getTempLocal(C,!1),b=O.getAndFreeTempLocal(this.currentType,!1),k=A.signature.returnType;return this.currentFunction.freeTempLocal(L),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(L.index,_),n.createTeeLocal(b.index,S),t]),this.makeCallDirect(A,[n.createGetLocal(L.index,L.type.toNativeType()),n.createGetLocal(b.index,b.type.toNativeType())])],k.toNativeType())}return this.makeCallDirect(N,[_,S,t])}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r,n,i=this.module,a=this.currentFunction,s=this.program.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case l.ElementKind.FUNCTION_PROTOTYPE:var o=s,u=e.typeArguments;if(o.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var _=null;if(u){if(!o.is(l.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();_=o.resolveUsingTypeArguments(u,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(l.CommonFlags.GENERIC)){for(var y=new Map,m=assert(o.declaration.typeParameters),g=m.length,f=0;fs&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(l.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var o=n?a+1:a,c=new Array(o),p=0;n&&(c[0]=n,p=1);for(var u=s.parameterTypes,h=0;h=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,p=e.is(l.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=f,this.module.createGetLocal(E,f.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(g))return this.module.createUnreachable();var T=g.type;return assert(T!=d.Type.void),g.is(l.CommonFlags.INLINED)?this.compileInlineConstant(g,t,r):(this.currentType=T,this.module.createGetGlobal(g.internalName,T.toNativeType()));case l.ElementKind.ENUMVALUE:return g.is(l.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,g.is(l.CommonFlags.INLINED)?this.module.createI32(g.constantValue):this.module.createGetGlobal(g.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());case l.ElementKind.FUNCTION_PROTOTYPE:var I=g.resolve(null,i.flow.contextualTypeArguments);if(!I||!this.compileFunction(I))return n.createUnreachable();var v=this.ensureFunctionTableEntry(I);return this.currentType=I.signature.type,this.module.createI32(v)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:case 7:if(i64_is_i32(s)||i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_i32(s)||i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=d.Type.i32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=a.resolve([e]);if(!s)return i.createUnreachable();var o=s.type,u=t.length;if(u){var h=e.toNativeType(),d=void 0,y=void 0;switch(h){case p.NativeType.I32:d=changetype(new Int32Array(u)),y=4*u;break;case p.NativeType.I64:d=changetype(new Array(u)),y=8*u;break;case p.NativeType.F32:d=changetype(new Float32Array(u)),y=4*u;break;case p.NativeType.F64:d=changetype(new Float64Array(u)),y=8*u;break;default:return assert(!1),i.createUnreachable()}for(var m=new Array(u),g=void 0,f=0;f=0);var h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=a.type,i.createLoad(a.type.byteSize,a.type.is(5),h,a.type.toNativeType(),a.memoryOffset);case l.ElementKind.PROPERTY:var _=a.getterPrototype;if(_){var y=_.resolve(null);if(!y)return i.createUnreachable();var m=y.signature;if(!this.checkCallSignature(m,0,y.is(l.CommonFlags.INSTANCE),e))return i.createUnreachable();if(y.is(l.CommonFlags.INSTANCE)){o=assert(y.parent);assert(o.kind==l.ElementKind.CLASS);u=assert(n.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=m.returnType,this.compileCallDirect(y,[],e,h)}return this.currentType=m.returnType,this.compileCallDirect(y,[],e)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,a.simpleName,a.parent.toString()),i.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r,n,i,a,s=e.ifThen,o=e.ifElse,u=this.currentFunction,h=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)){var _=this.precomputeExpressionRef(h);if(p.getExpressionId(_)==p.ExpressionId.Const&&p.getExpressionType(_)==p.NativeType.I32)return p.getConstValueI32(_)?this.compileExpressionRetainType(s,t,0):this.compileExpressionRetainType(o,t,0);h=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}if(u.is(l.CommonFlags.CONSTRUCTOR)){var y=u.flow;y=y.enterBranchOrScope(),u.flow=y,r=this.compileExpressionRetainType(s,t,0),i=this.currentType;var m=y.is(16);y=y.leaveBranchOrScope(),u.flow=y,y=y.enterBranchOrScope(),u.flow=y,n=this.compileExpressionRetainType(o,t,0),a=this.currentType;var g=y.is(16);y=y.leaveBranchOrScope(),u.flow=y,m&&g&&y.set(16)}else r=this.compileExpressionRetainType(s,t,0),i=this.currentType,n=this.compileExpressionRetainType(o,t,0),a=this.currentType;var f=d.Type.commonCompatible(i,a,!1);return f?(r=this.convertExpression(r,i,f,1,0,s),n=this.convertExpression(n,a,f,1,0,o),this.currentType=f,this.module.createIf(h,r,n)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,i.toString(),a.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);if(p.getExpressionId(i)==p.ExpressionId.Unreachable)return i;var a,s,o,l=this.currentType;switch(e.operator){case u.Token.PLUS_PLUS:if(l.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=p.BinaryOp.AddI32,s=p.NativeType.I32,o=r.createI32(1);break;case 9:case 4:a=(h=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,s=h.nativeSizeType,o=l.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.AddI64,s=p.NativeType.I64,o=r.createI64(1);break;case 11:a=p.BinaryOp.AddF32,s=p.NativeType.F32,o=r.createF32(1);break;case 12:a=p.BinaryOp.AddF64,s=p.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(l.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=p.BinaryOp.SubI32,s=p.NativeType.I32,o=r.createI32(1);break;case 9:case 4:var h;a=(h=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,s=h.nativeSizeType,o=l.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.SubI64,s=p.NativeType.I64,o=r.createI64(1);break;case 11:a=p.BinaryOp.SubF32,s=p.NativeType.F32,o=r.createF32(1);break;case 12:a=p.BinaryOp.SubF64,s=p.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==d.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var _=n.getTempLocal(l,!1),y=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(_.index,s),o),!1);this.currentType=assert(_).type,n.freeTempLocal(_);var m=_.index;return r.createBlock(null,[r.createSetLocal(m,i),y,r.createGetLocal(m,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case u.Token.PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);break;case u.Token.MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();if(e.operand.kind!=h.NodeKind.LITERAL||e.operand.literalKind!=h.LiteralKind.INTEGER&&e.operand.literalKind!=h.LiteralKind.FLOAT)switch(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.SubI32,n.createI32(0),r);break;case 9:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(p.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(p.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(p.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}else r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break;case u.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();switch(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(p.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(p.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();switch(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.SubI32,r,n.createI32(1));break;case 9:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(p.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(p.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.EXCLAMATION:r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),r=this.makeIsFalseish(r,this.currentType),this.currentType=d.Type.bool;break;case u.Token.TILDE:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();switch(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,t==d.Type.void?0:1,0),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=d.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(p.UnaryOp.ExtendI8ToI32,e):r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(p.UnaryOp.ExtendI16ToI32,e):r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(p.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(p.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?p.UnaryOp.EqzI64:p.UnaryOp.EqzI32,e);case 11:return r.createBinary(p.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(p.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(p.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(p.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,i=this.module,s=this.currentFunction,c=this.options.nativeSizeType,p=s.getTempLocal(e.type,!1),u=new Array;if(u.push(i.createSetLocal(p.index,o.compileAllocate(this,e,t))),e.members)try{for(var h=a(e.members.values()),d=h.next();!d.done;d=h.next()){var _=d.value;if(_.kind==l.ElementKind.FIELD){var y=_,m=y.type,g=m.toNativeType(),f=y.prototype.declaration;if(assert(!y.isAny(l.CommonFlags.CONST)),f.initializer)u.push(i.createStore(m.byteSize,i.createGetLocal(p.index,c),this.compileExpression(f.initializer,m,1,0),g,y.memoryOffset));else{var E=y.prototype.declaration.parameterIndex;u.push(i.createStore(m.byteSize,i.createGetLocal(p.index,c),E>=0?i.createGetLocal(1+E,g):m.toNativeZero(i),g,y.memoryOffset))}}}}catch(e){r={error:e}}finally{try{d&&!d.done&&(n=h.return)&&n.call(h)}finally{if(r)throw r.error}}return u.push(i.createGetLocal(p.index,c)),s.freeTempLocal(p),this.currentType=e.type,i.createBlock(null,u,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(n==p.NativeType.I64?r.createBinary(p.BinaryOp.NeI64,r.createGetLocal(0,p.NativeType.I64),r.createI64(0)):r.createGetLocal(0,p.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(c.DiagnosticEmitter);function g(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?g(r)+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return g(r=assert(e.parent))+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+t;case l.ElementKind.CLASS:return(r=e.prototype.parent)?g(r)+l.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?g(r)+l.STATIC_DELIMITER+t:t}}t.Compiler=m},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(0),s=r(6),o=r(2),c=r(1),p=r(4),l=a.LIBRARY_PREFIX+"builtins.ts",u=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.onComment=null,t.tryParseSignatureIsSignature=!1,t.program=new a.Program(t.diagnostics),t}return i(t,e),t.prototype.parseFile=function(e,t,r){for(var n=this.program,i=c.normalizePath(t),o=p.mangleInternalPath(i),u=n.sources,h=0,d=u.length;h"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var m=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(m,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=l,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(),")"),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var l=null;if(e.skip(s.Token.EQUALS)){if(i&a.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(l=this.parseExpression(e,1)))return null}else i&a.CommonFlags.CONST?i&a.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(n,c,l,r,i,s.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var l=this.parseEnumValue(e,a.CommonFlags.NONE);if(!l)return null;if(c.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=p.Node.createEnumDeclaration(i,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,1))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);for(var r=new Array,n=null,i=!1,a=!1;!e.skip(s.Token.CLOSEPAREN);){var c=this.parseParameter(e,t);if(!c)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),c.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,c.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=c}if(r.push(c),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null,c=a.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(i=e.range(),c|=a.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(i=e.range(),c|=a.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(i=e.range(),c|=a.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var l=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(l),i||(i=e.range()),c|=a.CommonFlags.READONLY):e.reset(l)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):i=e.range(),r=!0),e.skipIdentifier()){r||(i=e.range());var u=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=p.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,1))))return null;var _=p.Node.createParameter(u,h,d,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,s.Range.join(i,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=0!=(t&a.CommonFlags.SET);h&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),t&a.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var d=null;if(e.skip(s.Token.COLON)&&!(d=this.parseType(e,!0,h)))return null;d||(d=p.Node.createOmittedType(e.range(e.pos)),h||this.error(o.DiagnosticCode.Type_expected,d.range));var _=p.Node.createSignature(u,d,null,!1,e.range(c,e.pos)),y=null;if(e.skip(s.Token.OPENBRACE)){if(t&a.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else t&a.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var m=p.Node.createFunctionDeclaration(i,l,_,y,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),m},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i,c){void 0===i&&(i=-1),void 0===c&&(c=-1),i<0&&(i=t.range.start),c<0&&(c=i);var l=null;if(e.skip(s.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=p.Node.createSignature(r,l,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=p.Node.createFunctionDeclaration(t,null,h,u,null,n?a.CommonFlags.ARROW:a.CommonFlags.NONE,e.range(i,e.pos));return p.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var i=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){i&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;i||(d||(d=[]),d.push(_))}while(e.skip(s.Token.COMMA))}if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;var y,m=new Array;if(i?(assert(!d),y=p.Node.createInterfaceDeclaration(l,c,u,m,r,t,e.range(n,e.pos))):y=p.Node.createClassDeclaration(l,c,u,d,m,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,y);if(!g)return null;g.parent=y,m.push(g)}while(!e.skip(s.Token.CLOSEBRACE));return y},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(s.Token.AT);){var i=this.parseDecorator(e);if(!i)break;n.push(i)}var c=t.flags&a.CommonFlags.AMBIENT;e.skip(s.Token.PUBLIC)?c|=a.CommonFlags.PUBLIC:e.skip(s.Token.PRIVATE)?c|=a.CommonFlags.PRIVATE:e.skip(s.Token.PROTECTED)&&(c|=a.CommonFlags.PROTECTED);var l=0,u=0,h=0,d=0;e.skip(s.Token.STATIC)?(c|=a.CommonFlags.STATIC,l=e.tokenPos,u=e.pos):(e.skip(s.Token.ABSTRACT)?(c|=a.CommonFlags.ABSTRACT|a.CommonFlags.INSTANCE,h=e.tokenPos,d=e.pos):c|=a.CommonFlags.INSTANCE,t.flags&a.CommonFlags.GENERIC&&(c|=a.CommonFlags.GENERIC_CONTEXT));var _=0,y=0;e.skip(s.Token.READONLY)&&(c|=a.CommonFlags.READONLY,_=e.tokenPos,y=e.pos);var m=e.mark(),g=!1,f=!1,E=!1,T=0,I=0;if(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.GET,f=!0,T=e.tokenPos,I=e.pos,c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.SET|a.CommonFlags.SET,E=!0,T=e.tokenPos,I=e.pos,c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(g=!0,(c|=a.CommonFlags.CONSTRUCTOR)&a.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(l,u),"static"),c&a.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,d),"abstract"),c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")),!g&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var v=g?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),A=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(A=this.parseTypeParameters(e)))return null;g?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):f||E?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):c|=a.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var C=e.tokenPos,S=this.parseParameters(e,g);if(!S)return null;if(g)for(var O=0,L=S.length;O"),null):null;case s.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var d=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,1);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.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;for(var n,i,a=r.range.start;(n=this.tryParseTypeArgumentsBeforeArguments(e))||e.skip(s.Token.OPENPAREN);){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,n,c,e.range(a,e.pos))}for(var l,u=null;(l=h(i=e.peek()))>=t;)switch(e.next(),i){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,_,e.range(a,e.pos));break;case s.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(a,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(i,r,e.range(a,e.pos));break;case s.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e,t>0?1:0);if(!m)return null;r=p.Node.createTernaryExpression(r,y,m,e.range(a,e.pos));break;case s.Token.COMMA:var g=[r];do{if(!(r=this.parseExpression(e,1)))return null;g.push(r)}while(e.skip(s.Token.COMMA));r=p.Node.createCommaExpression(g,e.range(a,e.pos));break;default:if(!(u=this.parseExpression(e,d(i)?l:l+1)))return null;if(i==s.Token.DOT)if(u.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,u,e.range(a,e.pos));else{if(u.kind!=p.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,u.range),null;var f=u;if(f.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=p.Node.createPropertyAccessExpression(r,f.expression,e.range(a,e.pos)),r=f}else r=p.Node.createBinaryExpression(i,r,u,e.range(a,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t}(o.DiagnosticEmitter);function h(e){switch(e){case s.Token.COMMA:return 0;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 3;case s.Token.QUESTION:return 4;case s.Token.BAR_BAR:return 5;case s.Token.AMPERSAND_AMPERSAND:return 6;case s.Token.BAR:return 7;case s.Token.CARET:return 8;case s.Token.AMPERSAND:return 9;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 11;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case s.Token.PLUS:case s.Token.MINUS:return 13;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 14;case s.Token.ASTERISK_ASTERISK:return 15;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 17;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 19;default:return-1}}function d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.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";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)}),a=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}}}},s=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),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.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 s};Object.defineProperty(t,"__esModule",{value:!0});var o=r(0),c=r(1),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){try{for(var e=a(this.program.moduleLevelExports.values()),t=e.next();!t.done;t=e.next()){var r=t.value;this.visitElement(r)}}catch(e){n={error:e}}finally{try{t&&!t.done&&(i=e.return)&&i.call(e)}finally{if(n)throw n.error}}for(var n,i,s=this.todo;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(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(9),i=r(12),a=r(11),s=r(2);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(10),c=r(0);t.LIBRARY_PREFIX=c.LIBRARY_PREFIX,t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),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=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[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:g;if(t){if(e<0)return f;if(e>=_)return A}else{if(e<=-y)return N;if(e+1>=y)return v}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=o,n.fromNumber=c,n.fromBits=p;var l=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return g;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(l(r,8)),a=g,s=0;s>>0:this.low},C.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},C.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return p+s;for(;p.length<6;)p="0"+p;s=""+p+s}},C.getHighBits=function(){return this.high},C.getHighBitsUnsigned=function(){return this.high>>>0},C.getLowBits=function(){return this.low},C.getLowBitsUnsigned=function(){return this.low>>>0},C.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},C.isOdd=function(){return 1==(1&this.low)},C.isEven=function(){return 0==(1&this.low)},C.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)},C.eq=C.equals,C.notEquals=function(e){return!this.eq(e)},C.neq=C.notEquals,C.ne=C.notEquals,C.lessThan=function(e){return this.comp(e)<0},C.lt=C.lessThan,C.lessThanOrEqual=function(e){return this.comp(e)<=0},C.lte=C.lessThanOrEqual,C.le=C.lessThanOrEqual,C.greaterThan=function(e){return this.comp(e)>0},C.gt=C.greaterThan,C.greaterThanOrEqual=function(e){return this.comp(e)>=0},C.gte=C.greaterThanOrEqual,C.ge=C.greaterThanOrEqual,C.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},C.comp=C.compare,C.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(E)},C.neg=C.negate,C.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,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},C.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},C.sub=C.subtract,C.multiply=function(e){if(this.isZero())return g;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 g;if(this.eq(N))return e.isOdd()?N:g;if(e.eq(N))return this.isOdd()?N:g;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,s=65535&this.low,o=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,y=0,f=0,E=0;return f+=(E+=s*d)>>>16,y+=(f+=a*d)>>>16,f&=65535,y+=(f+=s*u)>>>16,_+=(y+=n*d)>>>16,y&=65535,_+=(y+=a*u)>>>16,y&=65535,_+=(y+=s*l)>>>16,_+=t*d+n*u+a*l+s*o,p((f&=65535)<<16|(E&=65535),(_&=65535)<<16|(y&=65535),this.unsigned)},C.mul=C.multiply,C.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:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return f;if(e.gt(this.shru(1)))return T;a=f}else{if(this.eq(N))return e.eq(E)||e.eq(I)?N:e.eq(N)?E:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?E:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?f:g;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=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=E),a=a.add(u),n=n.sub(d)}return a},C.div=C.divide,C.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))},C.mod=C.modulo,C.rem=C.modulo,C.not=function(){return p(~this.low,~this.high,this.unsigned)},C.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},C.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},C.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},C.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)},C.shr=C.shiftRight,C.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)},C.shru=C.shiftRightUnsigned,C.shr_u=C.shiftRightUnsigned,C.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},C.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},C.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},C.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]},C.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(15);e.i64_zero=t.ZERO,e.i64_one=t.ONE,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_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},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),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},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(5))},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},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.normalizePath=i,t.resolvePath=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(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable()):r&&1==r.length?(y=e.compileExpression(c[0],e.options.usizeType,1,0),(b=2==c.length?u(e,c[1]):0)<0?E.createUnreachable():(e.currentType=r[0],E.createLoad(r[0].byteSize,r[0].is(5),y,r[0].is(4)&&h.is(4)&&h.size>r[0].size?(e.currentType=h).toNativeType():(e.currentType=r[0]).toNativeType(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"store":if(e.currentType=a.Type.void,c.length<2||c.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],r[0],r[0].is(4)?0:1,0);T=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();var L;if(!(L=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable();var b=void 0;if(c.length){if(c[0].kind!=i.NodeKind.LITERAL||c[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,c[0].range),E.createUnreachable();var k=c[0].value,x=L.members?L.members.get(k):null;if(!x||x.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,c[0].range,L.internalName,k),E.createUnreachable();b=x.memoryOffset}else b=L.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,E.createI32(b)):E.createI64(b):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,E.createI64(b)):E.createI32(b);case"select":if(3!=c.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();y=e.compileExpression(c[0],r[0],1,0)}else y=e.compileExpressionRetainType(c[0],a.Type.i32,0);T=e.currentType;switch(m=e.compileExpression(c[1],T,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=T,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:f=E.createSelect(y,m,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),f=E.createUnreachable()}return f;case"unreachable":return 0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),y=E.createUnreachable()):y=e.compileExpression(c[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.GrowMemory,null,[y]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],e.options.usizeType,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],a.Type.u32,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=r[0],E.createUnreachable()):(y=e.compileExpressionRetainType(c[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"assert":if(c.length<1||c.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):c.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();y=e.compileExpression(c[0],r[0],1,1)}else y=e.compileExpressionRetainType(c[0],a.Type.bool,1);T=e.currentType;if(e.currentType=T.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,E.createNop()):y;var R=_(e,2==c.length?c[1]:null,d);if(e.currentType=T.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:f=E.createIf(E.createUnary(s.UnaryOp.EqzI32,y),R);break;case 3:case 8:f=E.createIf(E.createUnary(s.UnaryOp.EqzI64,y),R);break;case 4:case 9:f=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),R);break;case 11:f=E.createIf(E.createBinary(s.BinaryOp.EqF32,y,E.createF32(0)),R);break;case 12:f=E.createIf(E.createBinary(s.BinaryOp.EqF64,y,E.createF64(0)),R);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),f=R}e.currentType=a.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:A=e.currentFunction.flow,v=e.currentFunction.getAndFreeTempLocal(e.currentType,!A.canOverflow(y,e.currentType));f=E.createIf(E.createTeeLocal(v.index,y),E.createGetLocal(v.index,s.NativeType.I32),R);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);f=E.createIf(E.createTeeLocal(v.index,y),E.createGetLocal(v.index,s.NativeType.I32),R);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);f=E.createIf(E.createUnary(s.UnaryOp.EqzI64,E.createTeeLocal(v.index,y)),R,E.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,E.createTeeLocal(v.index,y)),R,E.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);f=E.createIf(E.createBinary(s.BinaryOp.EqF32,E.createTeeLocal(v.index,y),E.createF32(0)),R,E.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);f=E.createIf(E.createBinary(s.BinaryOp.EqF64,E.createTeeLocal(v.index,y),E.createF64(0)),R,E.createGetLocal(v.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),f=R}return f;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable()):((A=e.currentFunction.flow).set(2048),f=e.compileExpressionRetainType(c[0],h,0),A.unset(2048),f);case"i8":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.i8,E.createUnreachable()):e.compileExpression(c[0],a.Type.i8,2,0);case"i16":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.i16,E.createUnreachable()):e.compileExpression(c[0],a.Type.i16,2,0);case"i32":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.i32,E.createUnreachable()):e.compileExpression(c[0],a.Type.i32,2,0);case"i64":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.i64,E.createUnreachable()):e.compileExpression(c[0],a.Type.i64,2,0);case"isize":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=e.options.isWasm64?a.Type.isize64:a.Type.isize32,E.createUnreachable()):e.compileExpression(c[0],e.options.isWasm64?a.Type.isize64:a.Type.isize32,2,0);case"u8":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.u8,E.createUnreachable()):e.compileExpression(c[0],a.Type.u8,2,0);case"u16":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.u16,E.createUnreachable()):e.compileExpression(c[0],a.Type.u16,2,0);case"u32":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.u32,E.createUnreachable()):e.compileExpression(c[0],a.Type.u32,2,0);case"u64":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.u64,E.createUnreachable()):e.compileExpression(c[0],a.Type.u64,2,0);case"usize":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=e.options.usizeType,E.createUnreachable()):e.compileExpression(c[0],e.options.usizeType,2,0);case"bool":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.bool,E.createUnreachable()):e.compileExpression(c[0],a.Type.bool,2,0);case"f32":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.f32,E.createUnreachable()):e.compileExpression(c[0],a.Type.f32,2,0);case"f64":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=a.Type.f64,E.createUnreachable()):e.compileExpression(c[0],a.Type.f64,2,0)}var B=function(e,t,r,n,i){switch(t.internalName){case"i32.clz":return p("clz",e,a.Type.i32,r,a.Type.i32,i);case"i64.clz":return p("clz",e,a.Type.i64,r,a.Type.i64,i);case"i32.ctz":return p("ctz",e,a.Type.i32,r,a.Type.i32,i);case"i64.ctz":return p("ctz",e,a.Type.i64,r,a.Type.i64,i);case"i32.popcnt":return p("popcnt",e,a.Type.i32,r,a.Type.i32,i);case"i64.popcnt":return p("popcnt",e,a.Type.i64,r,a.Type.i64,i);case"i32.rotl":return p("rotl",e,a.Type.i32,r,a.Type.i32,i);case"i64.rotl":return p("rotl",e,a.Type.i64,r,a.Type.i64,i);case"i32.rotr":return p("rotr",e,a.Type.i32,r,a.Type.i32,i);case"i64.rotr":return p("rotr",e,a.Type.i64,r,a.Type.i64,i);case"f32.abs":return p("abs",e,a.Type.f32,r,a.Type.f32,i);case"f64.abs":return p("abs",e,a.Type.f64,r,a.Type.f64,i);case"f32.max":return p("max",e,a.Type.f32,r,a.Type.f32,i);case"f64.max":return p("max",e,a.Type.f64,r,a.Type.f64,i);case"f32.min":return p("min",e,a.Type.f32,r,a.Type.f32,i);case"f64.min":return p("min",e,a.Type.f64,r,a.Type.f64,i);case"f32.ceil":return p("ceil",e,a.Type.f32,r,a.Type.f32,i);case"f64.ceil":return p("ceil",e,a.Type.f64,r,a.Type.f64,i);case"f32.floor":return p("floor",e,a.Type.f32,r,a.Type.f32,i);case"f64.floor":return p("floor",e,a.Type.f64,r,a.Type.f64,i);case"f32.copysign":return p("copysign",e,a.Type.f32,r,a.Type.f32,i);case"f64.copysign":return p("copysign",e,a.Type.f64,r,a.Type.f64,i);case"f32.nearest":return p("nearest",e,a.Type.f32,r,a.Type.f32,i);case"f64.nearest":return p("nearest",e,a.Type.f64,r,a.Type.f64,i);case"i32.reinterpret_f32":return p("reinterpret",e,a.Type.i32,r,a.Type.f32,i);case"i64.reinterpret_f64":return p("reinterpret",e,a.Type.i64,r,a.Type.f64,i);case"f32.reinterpret_i32":return p("reinterpret",e,a.Type.f32,r,a.Type.i32,i);case"f64.reinterpret_i64":return p("reinterpret",e,a.Type.f64,r,a.Type.i64,i);case"f32.sqrt":return p("sqrt",e,a.Type.f32,r,a.Type.f32,i);case"f64.sqrt":return p("sqrt",e,a.Type.f64,r,a.Type.f64,i);case"f32.trunc":return p("trunc",e,a.Type.f32,r,a.Type.f32,i);case"f64.trunc":return p("trunc",e,a.Type.f64,r,a.Type.f64,i);case"i32.load8_s":return p("load",e,a.Type.i8,r,a.Type.i32,i);case"i32.load8_u":return p("load",e,a.Type.u8,r,a.Type.u32,i);case"i32.load16_s":return p("load",e,a.Type.i16,r,a.Type.i32,i);case"i32.load16_u":return p("load",e,a.Type.u16,r,a.Type.u32,i);case"i32.load":return p("load",e,a.Type.i32,r,a.Type.i32,i);case"i64.load8_s":return p("load",e,a.Type.i8,r,a.Type.i64,i);case"i64.load8_u":return p("load",e,a.Type.u8,r,a.Type.u64,i);case"i64.load16_s":return p("load",e,a.Type.i16,r,a.Type.i64,i);case"i64.load16_u":return p("load",e,a.Type.u16,r,a.Type.u64,i);case"i64.load32_s":return p("load",e,a.Type.i32,r,a.Type.i64,i);case"i64.load32_u":return p("load",e,a.Type.u32,r,a.Type.u64,i);case"i64.load":return p("load",e,a.Type.i64,r,a.Type.i64,i);case"f32.load":return p("load",e,a.Type.f32,r,a.Type.f32,i);case"f64.load":return p("load",e,a.Type.f64,r,a.Type.f64,i);case"i32.store8":return p("store",e,a.Type.i8,r,a.Type.i32,i);case"i32.store16":return p("store",e,a.Type.i16,r,a.Type.i32,i);case"i32.store":return p("store",e,a.Type.i32,r,a.Type.i32,i);case"i64.store8":return p("store",e,a.Type.i8,r,a.Type.i64,i);case"i64.store16":return p("store",e,a.Type.i16,r,a.Type.i64,i);case"i64.store32":return p("store",e,a.Type.i32,r,a.Type.i64,i);case"i64.store":return p("store",e,a.Type.i64,r,a.Type.i64,i);case"f32.store":return p("store",e,a.Type.f32,r,a.Type.f32,i);case"f64.store":return p("store",e,a.Type.f64,r,a.Type.f64,i)}return 0}(e,t,c,0,d);return B?(r&&r.length&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),B):(e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable())}function p(e,t,r,n,i,a){var s=assert(t.program.elementsLookup.get(e));return assert(s.kind==o.ElementKind.FUNCTION_PROTOTYPE),c(t,s,[r],n,i,a)}function l(e,t,r,i){if(0==r.length)return t&&1==t.length?t[0]:(e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t?t.length.toString(10):"0"),null);if(1==r.length){if(t)if(1==t.length)e.compileExpression(r[0],t[0],1,0);else{if(t.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),null;e.compileExpressionRetainType(r[0],a.Type.i32,0)}else e.compileExpressionRetainType(r[0],a.Type.i32,0);return e.currentType}return t&&t.length>1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function u(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=c;var h="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(h);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,h),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=c.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var d="abort";function _(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(d);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=p.resolve();if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=_},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(22);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(3).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(5))},function(e,t){e.exports=(e=>{var t=new Uint8Array(0),r=0;e.allocate_memory=function(e){if(!(e>>>=0))return 0;if(r+e>t.length){var n=t;(t=new Uint8Array(Math.max(65536,t.length+e,2*t.length))).set(n)}var i=r;return 7&(r+=e)&&(r=1+(7|r)),i},e.free_memory=function(e){},e.move_memory=function(e,r,n){t.copyWithin(e,r,r+n)},e.store=function(e,r,n){t[e+(0|n)]=r},e.load=function(e,r){return t[e+(0|r)]}})},function(e,t){e.exports=(e=>{e.JSMath=Math})},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function n(){Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function i(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,i):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_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),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_POSITIVE_VALUE:{value:2.2250738585072014e-308,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.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},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},n.prototype=Object.create(Error.prototype),n.prototype.name="UnreachableError",n.prototype.message="unreachable",t.unreachable=function(){throw new n},i.prototype=Object.create(Error.prototype),i.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new i(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)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},r(25)(t),r(24)(t)}).call(this,r(5))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(26),r(23),r(16),r(14)},function(e,t,r){r(27),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 a96dc119..9ec4cad8 100644 --- a/dist/assemblyscript.js.map +++ b/dist/assemblyscript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable/memory.js","webpack://assemblyscript/./std/portable/math.js","webpack://assemblyscript/./std/portable.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__22__","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","diagnostics_1","types_1","ast_1","module_1","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","OperatorKind","QueuedExport","QueuedImport","TypeAlias","operatorKindFromString","str","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","DIV","REM","POW","AND","OR","XOR","EQ","NE","GT","GE","LT","LE","INVALID","ElementKind","CommonFlags","DecoratorFlags","noTypesYet","Map","Program","_super","diagnostics","_this","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayPrototype","arrayBufferViewPrototype","stringInstance","resolvedThisExpression","resolvedElementExpression","sources","__extends","getSource","normalizedPath","k","length","source","lookupSourceByPath","normalizedPathWithoutExtension","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","queuedExports","queuedImports","Array","queuedExtends","queuedImplements","statements","j","statement","kind","NodeKind","CLASSDECLARATION","initializeClass","ENUMDECLARATION","initializeEnum","EXPORT","initializeExports","FUNCTIONDECLARATION","initializeFunction","IMPORT","initializeImports","INTERFACEDECLARATION","initializeInterface","NAMESPACEDECLARATION","initializeNamespace","TYPEDECLARATION","initializeTypeAlias","VARIABLE","initializeVariables","queuedImport","element","tryResolveImport","referencedName","set","internalName","splice","referencedNameAlt","error","DiagnosticCode","Module_0_has_no_exported_member_1","declaration","range","parent","path","externalName","text","queuedExports_1","__values","queuedExports_1_1","next","done","_a","__read","exportName","queuedExport","currentExport","isReExport","member","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","assert","extendsType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_c","alias","INTERFACE_PROTOTYPE","stringPrototype","resolve","has","Duplicate_identifier_0","programLevelInternalName","type","filterDecorators","decorators","acceptedFlags","presentFlags","NONE","decorator","IDENTIFIER","flag","decoratorKindToFlag","stringToDecoratorKind","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobalOptions","parentNode","hasDecorator","GLOBAL","is","BUILTIN","isLibrary","SOURCE","globalName","namespace","fileLevelInternalName","simpleName","ClassPrototype","SEALED","UNMANAGED","implementsTypes","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Range","join","push","members","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isAny","GET","SET","initializeAccessor","initializeMethod","Error","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","decoratorFlags","OPERATOR","INLINE","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","decoratorKind","DecoratorKind","numArgs","arguments","firstArg","LITERAL","literalKind","LiteralKind","STRING","Operation_not_supported","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","toString","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","values","initializeEnumValue","enm","EnumValue","initializeExport","internalPath","identifier","referencedElement","seen","Set","add","declarations","initializeImport","namespaceName","indexPart","endsWith","substring","InterfacePrototype","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","typeParameters","global_1","resolveSignature","node","contextualTypeArguments","reportNotFound","explicitThisType","thisType","resolveType","parameterTypeNodes","parameterTypes","numParameters","parameterNames","requiredParameters","hasRest","parameterTypeNode","parameterKind","ParameterKind","DEFAULT","REST","parameterType","returnType","returnTypeNode","signature","Signature","SIGNATURE","asFunction","typeNode","localName","instance","resolveUsingTypeArguments","typeArguments","paramTypes","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","expression","target","resolveExpression","propertyName","LOCAL","FIELD","classReference","Property_0_does_not_exist_on_type_1","CLASS","elementExpression","indexedGet","lookupOverload","Index_signature_is_missing_in_type_0","base","resolveElementAccess","elementAccess","PARENTHESIZED","ASSERTION","toType","classType","BINARY","THIS","explicitLocal","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","PROPERTYACCESS","ELEMENTACCESS","CALL","FUNCTION_PROTOTYPE","signatureReference","functionTarget","cachedFunctionTarget","FunctionTarget","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","DiagnosticEmitter","Element","program","flags","NAMESPACE","ENUM","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","CONST","INLINED","withConstantFloatValue","constantFloatValue","Parameter","initializer","Local","index","scopedGlobal","instances","classTypeArguments","functionTypeArguments","isInstance","INSTANCE","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialKey","partialPrototype","reportNode","resolvedTypeArguments","GENERIC","resolveBuiltinTypeArguments","resolvedType","FUNCTION","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","AMBIENT","DECLARE","localIndex","local","inheritedTypeArguments_2","inheritedTypeArguments_2_1","parameterName","getParameterName","Flow","create","addLocal","getTempLocal","wrapped","temps","toNativeType","NativeType","I32","I64","F32","F64","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","debugInfoIndex","line","column","FUNCTION_TARGET","toSignatureString","FIELD_PROTOTYPE","Field","memoryOffset","inheritedTypeArguments_3","inheritedTypeArguments_3_1","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","Class","currentMemoryOffset","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","instanceProperty","partialGetterPrototype","partialSetterPrototype","_j","_k","_l","operatorInstance","operatorPartial","asClass","inheritedTypeArguments_4","inheritedTypeArguments_4_1","baseType","isAssignableTo","current","unchecked","uncheckedOverload","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","enterBranchOrScope","branch","slice","leaveBranchOrScope","_b","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritMutual","left","right","leftExt","rightExt","thisExt","minLength","min","canOverflow","expr","operand","getExpressionId","ExpressionId","GetLocal","getGetLocalIndex","canConversionOverflow","SetLocal","isTeeLocal","getSetLocalValue","GetGlobal","Binary","getBinaryOp","BinaryOp","EqI32","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","LtI32","LtU32","LtI64","LtU64","LtF32","LtF64","LeI32","LeU32","LeI64","LeU64","LeF32","LeF64","GtI32","GtU32","GtI64","GtU64","GtF32","GtF64","GeI32","GeU32","GeI64","GeU64","GeF32","GeF64","MulI32","getBinaryLeft","Const","getConstValueI32","getBinaryRight","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","Unary","getUnaryOp","UnaryOp","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","getExpressionType","getConstValueI64Low","getConstValueF32","getConstValueF64","MIN_VALUE","MAX_VALUE","Load","fromType","getLoadBytes","isLoadSigned","Block","getBlockName","getBlockChildCount","last","getBlockChild","If","getIfTrue","getIfFalse","Select","getSelectThen","getSelectElse","Call","getCallTarget","Unreachable","fromSize","toSize","__export","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","formatDiagnosticContext","useColors","len","start","end","isLineBreak","charCodeAt","sb","formatDiagnosticMessage","showContext","emitDiagnostic","info","warning","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","_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","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","_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","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","_BinaryenModuleCreate","cachedByValue","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","removeFunctionType","_BinaryenRemoveFunctionType","createI32","out","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","_BinaryenUnary","createBinary","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","_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","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","numNames","strs","_BinaryenSwitch","createCall","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","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","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","precomputeFunction","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","readString","toText","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","nested1","nested2","_BinaryenExpressionGetId","_BinaryenExpressionGetType","_BinaryenConstGetValueI32","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","_BinaryenConstGetValueF32","_BinaryenConstGetValueF64","_BinaryenGetLocalGetIndex","_BinaryenGetGlobalGetName","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","getConstValueI64High","getSetLocalIndex","_BinaryenSetLocalGetIndex","_BinaryenSetLocalGetValue","_BinaryenSetLocalIsTee","getUnaryValue","getLoadOffset","getLoadPtr","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","_BinaryenBlockGetName","_BinaryenBlockGetNumChildren","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","_BinaryenIfGetIfTrue","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","_BinaryenSelectGetIfTrue","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","_BinaryenFunctionGetBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","program_1","tokenizer_1","Token","Node","createType","isNullable","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","elem","TypeParameterNode","createParameter","ParameterNode","createSignature","parameters","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","CUSTOM","createComment","CommentNode","commentKind","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","setParentIfNotNull","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","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","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalizePath","startsWith","resolvePath","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","apply","TYPE","TYPEPARAMETER","PARAMETER","implicitFieldDeclaration","DECORATOR","CommentKind","COMMENT","Expression","LiteralExpression","ARRAY","AssertionKind","COMMA","FLOAT","INTEGER","NEW","NULL","REGEXP","TERNARY","TRUE","FALSE","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","BREAK","CONTINUE","DO","EMPTY","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","parameterIndex","FOR","IF","IMPORTDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","VARIABLEDECLARATION","VOID","WHILE","asGlobal","g","eval","e","window","IdentifierHandling","tokenFromKeyword","ABSTRACT","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","INSTANCEOF","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","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","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","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","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","TypeKind","TypeFlags","cachedNullableType","ceil","nonNullableType","computeSmallIntegerShift","targetType","asNullable","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","isize32","isize64","usize32","usize64","typesToNativeTypes","types","numTypes","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","builtins_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","importTable","memoryBase","features","hasFeature","feature","Feature","ConversionKind","WrapMode","Compiler","outerFunction","currentEnum","currentType","startFunctionBody","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionPrototype","startFunctionInstance","startFunction","compileSource","funcRef","ensureFunctionType","i64_align","isWasm64","pages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","File_0_not_found","COMPILED","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","Type_expected","compileExpression","Type_0_is_not_assignable_to_type_1","nativeType","isConstant","MODULE_IMPORT","initializeInStart","compileInlineConstant","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","mangleExportName","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","nativeSizeType","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","ensureTrampoline","ensureArgcSet","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","ctorInstance","_e","getterName","setterName","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","numStatements","stmts","count","Nop","blockFlow","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","condExpr","makeIsTrueish","alwaysTrue","compileExpressionRetainType","condPre","incrExpr","bodyExpr","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifFalseFlow","ifTrueExpr","ifFalseExpr","context","tempLocal","tempLocalIndex","numCases","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","fallsThrough","nextLabel","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","precomputeExpression","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU64","DivF32","DivF64","RemI64","RemU64","intType","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI64","ShrU64","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","argumentExpressions","thisArg","compileCallDirect","valueExpression","elementType","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","valueExpr","valueWithCorrectType","tee","thisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","argumentExpression","inferredType","concreteType","compileCallIndirect","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","compileCallInlineUnchecked","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","retainConstantType","scopedThis","superType","localType","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileArrayLiteral","floatValue","intValue","i64_sub","i64_is_i8","i64_is_u8","i64_is_i16","i64_is_u16","i64_is_i32","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","arrayInstance","arrayType","elementCount","nativeElementType","byteLength","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","nativeArrayType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenExpr","ifElseExpr","ifThenType","ifElseType","ifThenAllocates","ifElseAllocates","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","compileAllocate","field","nativeFieldType","builtinsFile","Parser","backlog","seenlog","tryParseSignatureIsSignature","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","t","A_rest_parameter_cannot_be_optional","OPTIONAL","param","parseArguments","parseVariableDeclaration","parentFlags","parentDecorators","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","typeParameter","parseTypeParameter","Type_parameter_list_cannot_be_empty","parseParameters","seenRest","seenOptional","reportedRest","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","accessFlags","A_parameter_property_cannot_be_declared_using_a_rest_parameter","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","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","isArrow","parseFunctionExpressionCommon","isInterface","Interface_declaration_cannot_have_implements_clause","parseClassMember","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","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","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","precedence","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","ctor","Decompiler","functionId","decompile","decompiler","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Break","Switch","CallImport","CallIndirect","SetGlobal","Store","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","Drop","Return","Host","CurrentMemory","GrowMemory","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","definitions_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setNoMemory","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","finishParsing","compileProgram","decompileModule","buildIDL","buildTSD","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","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","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","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","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_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","readI32","readI64","readF32","readF64","valueI64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","mid","compiler","evaluateConstantType","tempLocal0","tempLocal1","evaluateConstantOffset","alignLog2","fieldName","Type_0_has_no_property_1","abort","deferASM","deferASMCall","typeArgument","valueType","allocateInternalName","allocatePrototype","allocateInstance","abortInternalName","abortPrototype","abortInstance","messageArg","filenameArg","binaryen","Binaryen","key","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","arg","isArray"],"mappings":"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,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,MAA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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})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__22__) {\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 = 28);\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\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 TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeNode,\r\n TypeParameterNode,\r\n ParameterKind,\r\n SignatureNode,\r\n DecoratorNode,\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 VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n stringToDecoratorKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\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/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_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\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n INDEXED_GET,\r\n INDEXED_SET,\r\n UNCHECKED_INDEXED_GET,\r\n UNCHECKED_INDEXED_SET,\r\n ADD,\r\n SUB,\r\n MUL,\r\n DIV,\r\n REM,\r\n POW,\r\n AND,\r\n OR,\r\n XOR,\r\n EQ,\r\n NE,\r\n GT,\r\n GE,\r\n LT,\r\n LE\r\n}\r\n\r\nfunction operatorKindFromString(str: string): OperatorKind {\r\n switch (str) {\r\n case \"[]\" : return OperatorKind.INDEXED_GET;\r\n case \"[]=\": return OperatorKind.INDEXED_SET;\r\n case \"{}\" : return OperatorKind.UNCHECKED_INDEXED_GET;\r\n case \"{}=\": return OperatorKind.UNCHECKED_INDEXED_SET;\r\n case \"+\" : return OperatorKind.ADD;\r\n case \"-\" : return OperatorKind.SUB;\r\n case \"*\" : return OperatorKind.MUL;\r\n case \"/\" : return OperatorKind.DIV;\r\n case \"%\" : return OperatorKind.REM;\r\n case \"**\" : return OperatorKind.POW;\r\n case \"&\" : return OperatorKind.AND;\r\n case \"|\" : return OperatorKind.OR;\r\n case \"^\" : return OperatorKind.XOR;\r\n case \"==\" : return OperatorKind.EQ;\r\n case \"!=\" : return OperatorKind.NE;\r\n case \">\" : return OperatorKind.GT;\r\n case \">=\" : return OperatorKind.GE;\r\n case \"<\" : return OperatorKind.LT;\r\n case \"<=\" : return OperatorKind.LE;\r\n }\r\n return OperatorKind.INVALID;\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 elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** ArrayBufferView prototype reference. */\r\n arrayBufferViewPrototype: InterfacePrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n resolvedThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n resolvedElementExpression : Expression | null = null;\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 /** Gets a source by its exact path. */\r\n getSource(normalizedPath: string): Source | null {\r\n var sources = this.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == normalizedPath) return source;\r\n }\r\n return null;\r\n }\r\n\r\n /** Looks up the source for the specified possibly ambiguous path. */\r\n lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null {\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource(LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(LIBRARY_PREFIX + normalizedPathWithoutExtension + \"/index.ts\")\r\n );\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 this.typesLookup = 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 queuedExtends = new Array();\r\n var queuedImplements = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedExtends, queuedImplements);\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(statement, queuedExports);\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(statement, queuedExports, queuedImports);\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(statement, queuedExtends, queuedImplements);\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\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let element = this.tryResolveImport(queuedImport.referencedName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports)) {\r\n this.elementsLookup.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 (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.fileLevelExports.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 ((queuedExport.member.parent).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.elementsLookup.get(currentExport.referencedName)) ||\r\n // library re-export\r\n (element = this.elementsLookup.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 (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = this.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n var globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n let element = this.elementsLookup.get(name); // TODO: error? has no source range\r\n if (element) this.elementsLookup.set(alias, element);\r\n }\r\n }\r\n\r\n // register 'Array'\r\n var arrayPrototype = this.elementsLookup.get(\"Array\");\r\n if (arrayPrototype) {\r\n assert(arrayPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = arrayPrototype;\r\n }\r\n\r\n // register 'ArrayBufferView'\r\n var arrayBufferViewPrototype = this.elementsLookup.get(\"ArrayBufferView\");\r\n if (arrayBufferViewPrototype) {\r\n assert(arrayBufferViewPrototype.kind == ElementKind.INTERFACE_PROTOTYPE);\r\n this.arrayBufferViewPrototype = arrayBufferViewPrototype;\r\n }\r\n\r\n // register 'String'\r\n var stringPrototype = this.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = (stringPrototype).resolve(null); // reports\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\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 var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(referencedName)) return element;\r\n let 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.elementsLookup.get(queuedExport.referencedName);\r\n } while (true);\r\n }\r\n\r\n private filterDecorators(decorators: DecoratorNode[], acceptedFlags: DecoratorFlags): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.name.kind == NodeKind.IDENTIFIER) {\r\n let name = (decorator.name).text;\r\n let kind = stringToDecoratorKind(name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, name\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, name\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Processes global options, if present. */\r\n private checkGlobalOptions(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\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.elementsLookup.set(globalName, element);\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\r\n }\r\n }\r\n\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.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 decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.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(simpleName)) {\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(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\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\r\n this.checkGlobalOptions(prototype, declaration);\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 var decorators = declaration.decorators;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (this.elementsLookup.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 let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\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 let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.filterDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n // TBD: no need to mark as MODULE_EXPORT\r\n }\r\n }\r\n\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.OPERATOR |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.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(simpleName)) {\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 simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\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 simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\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(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\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 (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == DecoratorKind.OPERATOR) {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromString((firstArg).value);\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\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 }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\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 ) != null\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 simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.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 let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\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 } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\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 let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\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(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\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.elementsLookup.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 simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\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(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, element);\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobalOptions(element, declaration);\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 if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\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 (let 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.fileLevelExports.set(name, element);\r\n if (identifier.range.source.isLibrary) { // add global alias\r\n if (this.elementsLookup.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.elementsLookup.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.fileLevelExports.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.elementsLookup.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.elementsLookup.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 let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.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.elementsLookup.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.elementsLookup.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 simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\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(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.parent = namespace;\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\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 (let 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) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.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.elementsLookup.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.fileLevelExports.get(referencedName)) {\r\n this.elementsLookup.set(internalName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const 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.elementsLookup.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 decorators = declaration.decorators;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\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 if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let 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 if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\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 this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobalOptions(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\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(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 namespace.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, namespace);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, 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], queuedExtends, queuedImplements, 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\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.typesLookup.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 var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, 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 (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.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 let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\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(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, global);\r\n }\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, global);\r\n }\r\n }\r\n this.checkGlobalOptions(global, declaration);\r\n }\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(\r\n explicitThisType,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameterTypes;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(\r\n returnTypeNode,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportNotFound);\r\n if (!signature) return null;\r\n return Type.u32.asFunction(signature);\r\n }\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName;\r\n\r\n var element: Element | null;\r\n\r\n // check file-global / program-global element\r\n if ((element = this.elementsLookup.get(localName)) || (element = this.elementsLookup.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = (element).resolveUsingTypeArguments(\r\n typeNode.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\r\n // check (global) type alias\r\n var alias = this.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportNotFound);\r\n\r\n // resolve parameters\r\n if (typeNode.typeArguments) {\r\n let k = typeNode.typeArguments.length;\r\n let paramTypes = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeNode.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 let 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 let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\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.typesLookup.get(localName)) || (type = this.typesLookup.get(globalName))) {\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 typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | 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 (let i = 0; i < parameterCount; ++i) {\r\n let 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 ): Element | 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 this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // ENUMVALUE\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 this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // LOCAL\r\n }\r\n\r\n // check outer scope locals\r\n // let outerScope = contextualFunction.outerScope;\r\n // while (outerScope) {\r\n // if (element = outerScope.getScopedLocal(name)) {\r\n // let scopedLocal = element;\r\n // let scopedGlobal = scopedLocal.scopedGlobal;\r\n // if (!scopedGlobal) scopedGlobal = outerScope.addScopedGlobal(scopedLocal);\r\n // if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n // return resolvedElement.set(scopedGlobal);\r\n // }\r\n // outerScope = outerScope.currentFunction.outerScope;\r\n // }\r\n\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.parent) {\r\n do {\r\n if (element = this.elementsLookup.get(namespace.internalName + STATIC_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // LOCAL\r\n }\r\n } while (namespace = namespace.parent);\r\n }\r\n }\r\n\r\n // search current file\r\n if (element = this.elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = this.elementsLookup.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\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 ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\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\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let classReference = (target).type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n let classReference = getter.signature.returnType.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, getter.signature.returnType.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolvedElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\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 let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if 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 // traverse inherited instance members on the base class if 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 let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n break;\r\n }\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(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType((expression).toType); // reports\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\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 (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\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.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.resolvedThisExpression = expression;\r\n this.resolvedElementExpression = null;\r\n return this.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (target).resolveUsingTypeArguments( // reports\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\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 targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n break;\r\n }\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/** 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 FunctionTarget}. */\r\n FUNCTION_TARGET,\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 a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is an operator overload. */\r\n OPERATOR = 1 << 1,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 2,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 3,\r\n /** Is always inlined. */\r\n INLINE = 1 << 4\r\n}\r\n\r\nexport function decoratorKindToFlag(kind: DecoratorKind): DecoratorFlags {\r\n switch (kind) {\r\n case DecoratorKind.GLOBAL: return DecoratorFlags.GLOBAL;\r\n case DecoratorKind.OPERATOR: return DecoratorFlags.OPERATOR;\r\n case DecoratorKind.UNMANAGED: return DecoratorFlags.UNMANAGED;\r\n case DecoratorKind.SEALED: return DecoratorFlags.SEALED;\r\n case DecoratorKind.INLINE: return DecoratorFlags.INLINE;\r\n default: return DecoratorFlags.NONE;\r\n }\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 /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n /** Decorator flags indicating annotated traits. */\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent element, if applicable. */\r\n parent: 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: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this element has any of the specified flags. */\r\n isAny(flags: CommonFlags): bool { return (this.flags & flags) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n /** Tests if this element has a specific decorator flag or flags. */\r\n hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == 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 this.flags = declaration.flags;\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 this.flags = declaration.flags;\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 /** 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.parent = 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 | null;\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 protected constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.type = type;\r\n this.declaration = declaration;\r\n }\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(CommonFlags.CONST | CommonFlags.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(CommonFlags.CONST | CommonFlags.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 type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\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 /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\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. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\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 decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\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 var isInstance = this.is(CommonFlags.INSTANCE);\r\n var classPrototype = this.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = assert(classPrototype).resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameterTypes;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (this.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (this.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n this,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves this prototype partially by applying the specified inherited class type arguments. */\r\n resolvePartial(classTypeArguments: Type[] | null): FunctionPrototype | null {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(this.classPrototype);\r\n\r\n if (!(classTypeArguments && classTypeArguments.length)) return this; // no need to clone\r\n\r\n var simpleName = this.simpleName;\r\n var partialKey = typesToString(classTypeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n this.declaration,\r\n classPrototype,\r\n this.decoratorFlags\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.operatorKind = this.operatorKind;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | 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(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments( // reports\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 /** Resolves the type arguments to use when compiling a built-in call. Must be a built-in. */\r\n resolveBuiltinTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null\r\n ): Type[] | null {\r\n assert(this.is(CommonFlags.BUILTIN));\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (typeArgumentNodes) {\r\n let k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let resolvedType = this.program.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return null;\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n return resolvedTypeArguments;\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 /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\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[] = [];\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 /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\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, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\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 declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\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, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\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, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\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) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\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 let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let 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\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\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 this.flags = declaration.flags;\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(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\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 /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null\r\n ): 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 (let [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 let baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\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.hasDecorator(DecoratorFlags.SEALED)) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != this.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_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 simpleName = this.simpleName;\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, 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 (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n // Resolve constructor\r\n if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n\r\n // Resolve instance members\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let 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 let fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (fieldType) {\r\n let fieldInstance = new Field(\r\n member,\r\n internalName + INSTANCE_DELIMITER + (member).simpleName,\r\n fieldType,\r\n fieldDeclaration,\r\n instance\r\n );\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: {\r\n if (memoryOffset & 1) ++memoryOffset;\r\n break;\r\n }\r\n case 4: {\r\n if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n }\r\n case 8: {\r\n if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n }\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\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (partialPrototype) {\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n }\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype);\r\n let setterPrototype = (member).setterPrototype;\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n this\r\n );\r\n let partialGetterPrototype = getterPrototype.resolvePartial(typeArguments);\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName\r\n );\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = setterPrototype.resolvePartial(typeArguments);\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName\r\n );\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, prototype] of this.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (prototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = prototype.resolvePartial(typeArguments); // reports\r\n if (!operatorPartial) continue;\r\n operatorInstance = operatorPartial.resolve(); // reports\r\n } else {\r\n operatorInstance = prototype.resolve(); // reports\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n\r\n instance.currentMemoryOffset = memoryOffset; // offsetof() is the class' byte size in memory\r\n return instance;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | 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(CommonFlags.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 /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\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 let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\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 let 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 if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.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 decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\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 simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, 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\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always throws. */\r\n THROWS = 1 << 1,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 2,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 3,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 4,\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 5,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 6,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 7,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 8,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 9,\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 10,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 11,\r\n /** This branch returns a properly wrapped value. */\r\n RETURNS_WRAPPED = 1 << 12\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 /** The label we break to when encountering a return statement, when inlining. */\r\n returnLabel: string | null;\r\n /** The current return type. */\r\n returnType: Type;\r\n /** The current contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Scoped local variables. */\r\n scopedLocals: Map | null = null;\r\n /** Local variable wrap states for the first 64 locals. */\r\n wrappedLocals: I64;\r\n /** Local variable wrap states for locals with index >= 64. */\r\n wrappedLocalsExt: I64[] | 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 parentFlow.returnLabel = null;\r\n parentFlow.returnType = currentFunction.signature.returnType;\r\n parentFlow.contextualTypeArguments = currentFunction.contextualTypeArguments;\r\n parentFlow.wrappedLocals = i64_new(0);\r\n parentFlow.wrappedLocalsExt = 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 /** Tests if this flow has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets the specified flag or flags. */\r\n set(flag: FlowFlags): void { this.flags |= flag; }\r\n /** Unsets the specified flag or flags. */\r\n unset(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 branch = new Flow();\r\n branch.parent = this;\r\n branch.flags = this.flags;\r\n branch.currentFunction = this.currentFunction;\r\n branch.continueLabel = this.continueLabel;\r\n branch.breakLabel = this.breakLabel;\r\n branch.returnLabel = this.returnLabel;\r\n branch.returnType = this.returnType;\r\n branch.contextualTypeArguments = this.contextualTypeArguments;\r\n branch.wrappedLocals = this.wrappedLocals;\r\n branch.wrappedLocalsExt = this.wrappedLocalsExt ? this.wrappedLocalsExt.slice() : null;\r\n return branch;\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 (let scopedLocal of this.scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n this.scopedLocals = null;\r\n }\r\n\r\n // Propagate conditionaal flags to parent\r\n if (this.is(FlowFlags.RETURNS)) {\r\n parent.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (this.is(FlowFlags.THROWS)) {\r\n parent.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (this.is(FlowFlags.BREAKS) && parent.breakLabel == this.breakLabel) {\r\n parent.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (this.is(FlowFlags.CONTINUES) && parent.continueLabel == this.continueLabel) {\r\n parent.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (this.is(FlowFlags.ALLOCATES)) {\r\n parent.set(FlowFlags.CONDITIONALLY_ALLOCATES);\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(type: Type, name: string, wrapped: bool, declaration?: VariableDeclaration): Local {\r\n var scopedLocal = this.currentFunction.getTempLocal(type, false);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n scopedLocal.set(CommonFlags.SCOPED);\r\n this.scopedLocals.set(name, scopedLocal);\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.setLocalWrapped(scopedLocal.index, wrapped);\r\n }\r\n return scopedLocal;\r\n }\r\n\r\n /** Adds a new scoped alias for the specified local. */\r\n addScopedLocalAlias(index: i32, type: Type, name: string): Local {\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n let declaration = existingLocal.declaration;\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n assert(index < this.currentFunction.localsByIndex.length);\r\n var scopedAlias = new Local( // not SCOPED as an indicator that it isn't automatically free'd\r\n this.currentFunction.program,\r\n name,\r\n index,\r\n type,\r\n null\r\n );\r\n this.scopedLocals.set(name, scopedAlias);\r\n return scopedAlias;\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.localsByName.get(name);\r\n }\r\n\r\n /** Tests if the local with the specified index is considered wrapped. */\r\n isLocalWrapped(index: i32): bool {\r\n var map: I64;\r\n var ext: I64[] | null;\r\n if (index < 64) {\r\n if (index < 0) return true; // inlined constant\r\n map = this.wrappedLocals;\r\n } else if (ext = this.wrappedLocalsExt) {\r\n let i = ((index - 64) / 64) | 0;\r\n if (i >= ext.length) return false;\r\n map = ext[i];\r\n index -= (i + 1) * 64;\r\n } else {\r\n return false;\r\n }\r\n return i64_ne(\r\n i64_and(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n ),\r\n i64_zero\r\n );\r\n }\r\n\r\n /** Sets if the local with the specified index is considered wrapped. */\r\n setLocalWrapped(index: i32, wrapped: bool): void {\r\n var map: I64;\r\n var off: i32 = -1;\r\n if (index < 64) {\r\n if (index < 0) return; // inlined constant\r\n map = this.wrappedLocals;\r\n } else {\r\n let ext = this.wrappedLocalsExt;\r\n off = ((index - 64) / 64) | 0;\r\n if (!ext) {\r\n this.wrappedLocalsExt = ext = new Array(off + 1);\r\n ext.length = 0;\r\n }\r\n while (ext.length <= off) ext.push(i64_new(0));\r\n map = ext[off];\r\n index -= (off + 1) * 64;\r\n }\r\n map = wrapped\r\n ? i64_or(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n : i64_and(\r\n map,\r\n i64_not(\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n );\r\n if (off >= 0) (this.wrappedLocalsExt)[off] = map;\r\n else this.wrappedLocals = map;\r\n }\r\n\r\n /** Inherits flags and local wrap states from the specified flow (e.g. on inner block). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (\r\n FlowFlags.RETURNS |\r\n FlowFlags.RETURNS_WRAPPED |\r\n FlowFlags.THROWS |\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.ALLOCATES\r\n );\r\n this.wrappedLocals = other.wrappedLocals;\r\n this.wrappedLocalsExt = other.wrappedLocalsExt; // no need to slice because other flow is finished\r\n }\r\n\r\n /** Inherits mutual flags and local wrap states from the specified flows (e.g. on then/else branches). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // flags set in both arms\r\n this.flags |= left.flags & right.flags & (\r\n FlowFlags.RETURNS |\r\n FlowFlags.RETURNS_WRAPPED |\r\n FlowFlags.THROWS |\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.ALLOCATES\r\n );\r\n // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(\r\n left.wrappedLocals,\r\n right.wrappedLocals\r\n );\r\n var leftExt = left.wrappedLocalsExt;\r\n var rightExt = right.wrappedLocalsExt;\r\n if (leftExt != null && rightExt != null) {\r\n let thisExt = this.wrappedLocalsExt;\r\n let minLength = min(leftExt.length, rightExt.length);\r\n if (minLength) {\r\n if (!thisExt) thisExt = new Array(minLength);\r\n else while (thisExt.length < minLength) thisExt.push(i64_new(0));\r\n for (let i = 0; i < minLength; ++i) {\r\n thisExt[i] = i64_and(\r\n leftExt[i],\r\n rightExt[i]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Tests if an expression can possibly overflow in the context of this flow. Assumes that the\r\n * expression might already have overflown and returns `false` only if the operation neglects\r\n * any possibly combination of garbage bits being present.\r\n */\r\n canOverflow(expr: ExpressionRef, type: Type): bool {\r\n // TODO: the following catches most common and a few uncommon cases, but there are additional\r\n // opportunities here, obviously.\r\n assert(type != Type.void);\r\n\r\n // types other than i8, u8, i16, u16 and bool do not overflow\r\n if (!type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) return false;\r\n\r\n var operand: ExpressionRef;\r\n switch (getExpressionId(expr)) {\r\n\r\n // overflows if the local isn't wrapped or the conversion does\r\n case ExpressionId.GetLocal: {\r\n let currentFunction = this.currentFunction;\r\n let local = currentFunction.localsByIndex[getGetLocalIndex(expr)];\r\n return !currentFunction.flow.isLocalWrapped(local.index)\r\n || canConversionOverflow(local.type, type);\r\n }\r\n\r\n // overflows if the value does\r\n case ExpressionId.SetLocal: {\r\n assert(isTeeLocal(expr));\r\n return this.canOverflow(getSetLocalValue(expr), type);\r\n }\r\n\r\n // never overflows because globals are wrapped on set\r\n case ExpressionId.GetGlobal: return false;\r\n\r\n case ExpressionId.Binary: {\r\n switch (getBinaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtU32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtU64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeU32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeU64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtU32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtU64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeU32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeU64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: return false;\r\n\r\n // result won't overflow if one side is 0 or if one side is 1 and the other wrapped\r\n case BinaryOp.MulI32: {\r\n return !(\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryRight(expr), type)\r\n )\r\n )\r\n ) || (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryLeft(expr), type)\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n // result won't overflow if one side is a constant less than this type's mask or one side\r\n // is wrapped\r\n case BinaryOp.AndI32: {\r\n // note that computeSmallIntegerMask returns the mask minus the MSB for signed types\r\n // because signed value garbage bits must be guaranteed to be equal to the MSB.\r\n return !(\r\n (\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n ) || (\r\n (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n )\r\n );\r\n }\r\n\r\n // overflows if the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShlI32: {\r\n let shift = 32 - type.size;\r\n return getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const\r\n || getConstValueI32(operand) < shift;\r\n }\r\n\r\n // overflows if the value does and the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShrI32: {\r\n let shift = 32 - type.size;\r\n return this.canOverflow(getBinaryLeft(expr), type) && (\r\n getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const ||\r\n getConstValueI32(operand) < shift\r\n );\r\n }\r\n\r\n // overflows if the shift does not clear potential garbage bits. if an unsigned value is\r\n // wrapped, it can't overflow.\r\n case BinaryOp.ShrU32: {\r\n let shift = 32 - type.size;\r\n return type.is(TypeFlags.SIGNED)\r\n ? !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) > shift // must clear MSB\r\n )\r\n : this.canOverflow(getBinaryLeft(expr), type) && !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) >= shift // can leave MSB\r\n );\r\n }\r\n\r\n // overflows if any side does\r\n case BinaryOp.DivU32:\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemU32: {\r\n return this.canOverflow(getBinaryLeft(expr), type)\r\n || this.canOverflow(getBinaryRight(expr), type);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: return false;\r\n\r\n // overflow if the maximum result (32) cannot be represented in the target type\r\n case UnaryOp.ClzI32:\r\n case UnaryOp.CtzI32:\r\n case UnaryOp.PopcntI32: return type.size < 7;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the value cannot be represented in the target type\r\n case ExpressionId.Const: {\r\n let value: i32 = 0;\r\n switch (getExpressionType(expr)) {\r\n case NativeType.I32: { value = getConstValueI32(expr); break; }\r\n case NativeType.I64: { value = getConstValueI64Low(expr); break; } // discards upper bits\r\n case NativeType.F32: { value = i32(getConstValueF32(expr)); break; }\r\n case NativeType.F64: { value = i32(getConstValueF64(expr)); break; }\r\n default: assert(false);\r\n }\r\n switch (type.kind) {\r\n case TypeKind.I8: return value < i8.MIN_VALUE || value > i8.MAX_VALUE;\r\n case TypeKind.I16: return value < i16.MIN_VALUE || value > i16.MAX_VALUE;\r\n case TypeKind.U8: return value < 0 || value > u8.MAX_VALUE;\r\n case TypeKind.U16: return value < 0 || value > u16.MAX_VALUE;\r\n case TypeKind.BOOL: return (value & ~1) != 0;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the conversion does\r\n case ExpressionId.Load: {\r\n let fromType: Type;\r\n switch (getLoadBytes(expr)) {\r\n case 1: { fromType = isLoadSigned(expr) ? Type.i8 : Type.u8; break; }\r\n case 2: { fromType = isLoadSigned(expr) ? Type.i16 : Type.u16; break; }\r\n default: { fromType = isLoadSigned(expr) ? Type.i32 : Type.u32; break; }\r\n }\r\n return canConversionOverflow(fromType, type);\r\n }\r\n\r\n // overflows if the result does, which is either\r\n // - the last expression of the block, by contract, if the block doesn't have a label\r\n // - the last expression or the value of an inner br if the block has a label (TODO)\r\n case ExpressionId.Block: {\r\n if (!getBlockName(expr)) {\r\n let size = assert(getBlockChildCount(expr));\r\n let last = getBlockChild(expr, size - 1);\r\n return this.canOverflow(last, type);\r\n }\r\n // actually, brs with a value that'd be handled here is not emitted atm\r\n break;\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.If: {\r\n return this.canOverflow(getIfTrue(expr), type)\r\n || this.canOverflow(assert(getIfFalse(expr)), type);\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.Select: {\r\n return this.canOverflow(getSelectThen(expr), type)\r\n || this.canOverflow(getSelectElse(expr), type);\r\n }\r\n\r\n // overflows if the call does not return a wrapped value or the conversion does\r\n case ExpressionId.Call: {\r\n let program = this.currentFunction.program;\r\n let instance = assert(program.instancesLookup.get(assert(getCallTarget(expr))));\r\n assert(instance.kind == ElementKind.FUNCTION);\r\n let returnType = (instance).signature.returnType;\r\n return !(instance).flow.is(FlowFlags.RETURNS_WRAPPED)\r\n || canConversionOverflow(returnType, type);\r\n }\r\n\r\n // doesn't technically overflow\r\n case ExpressionId.Unreachable: return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): void {\r\n assert(this.parent == null); // must be the topmost parent flow\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n this.returnLabel = null;\r\n this.contextualTypeArguments = null;\r\n }\r\n}\r\n\r\n/** Tests if a conversion from one type to another can technically overflow. */\r\nfunction canConversionOverflow(fromType: Type, toType: Type): bool {\r\n var fromSize = fromType.byteSize;\r\n var toSize = toType.byteSize;\r\n return !fromType.is(TypeFlags.INTEGER) // non-i32 locals or returns\r\n || fromSize > toSize\r\n || fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED);\r\n}\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\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\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\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: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private 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 /** Creates a new diagnostic message of the specified category. */\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 /** Creates a new informatory diagnostic message. */\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 /** Creates a new warning diagnostic message. */\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 /** Creates a new error diagnostic message. */\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 /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\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.line.toString(10) +\r\n \":\" +\r\n this.range.column.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\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\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(COLOR_RESET);\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 // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\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\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\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))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\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(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\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 ): void {\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 /** Emits an informatory diagnostic message. */\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 /** Emits a warning diagnostic message. */\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 /** Emits an error diagnostic message. */\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","/**\r\n * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\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/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\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): MemorySegment {\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\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = 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 let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = 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[] | null\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 ? paramTypes.length : 0);\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[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\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.cachedByValue;\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.cachedByValue;\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.cachedByValue;\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 = allocPtrArray(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 = allocPtrArray(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 numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++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, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 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 = allocPtrArray(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 = allocPtrArray(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 createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\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[] | null,\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 ? varTypes.length : 0, 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 private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\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 (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let 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 (let 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 = allocPtrArray(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 numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++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, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\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): BinaryModule {\r\n var out = this.cachedByValue;\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 let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\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 assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n 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 case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\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 let 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 (\r\n _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 }\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 }\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\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\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 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// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\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 numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++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 (let i = 0, k = i32s.length; i < k; ++i) {\r\n let 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 allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let 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 // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let 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\nfunction 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\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let 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 arr.push(cp);\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\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\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 normalizePath,\r\n resolvePath\r\n} from \"./util\";\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 PARAMETER,\r\n SIGNATURE,\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 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 VOID,\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 // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\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 /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\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 = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\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: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\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 createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameterTypes = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n expression: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\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 stmt.decoratorKind = expression.kind == NodeKind.IDENTIFIER\r\n ? stringToDecoratorKind((expression).text)\r\n : DecoratorKind.CUSTOM;\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\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 createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\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; setParentIfNotNull(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: CommonTypeNode,\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: CommonTypeNode[] | 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 ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\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: CommonTypeNode[] | 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: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\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; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, 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 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 decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, 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 flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\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 flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let 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 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 in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\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 typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\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.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 createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = 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: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, 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 typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = 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 decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, 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: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\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.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\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\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode 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; // can't be a function\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 ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameterTypes: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE\r\n}\r\n\r\n/** Returns the decorator kind represented by the specified string. */\r\nexport function stringToDecoratorKind(str: string): DecoratorKind {\r\n switch (str) {\r\n case \"global\": return DecoratorKind.GLOBAL;\r\n case \"operator\": return DecoratorKind.OPERATOR;\r\n case \"unmanaged\": return DecoratorKind.UNMANAGED;\r\n case \"sealed\": return DecoratorKind.SEALED;\r\n case \"inline\": return DecoratorKind.INLINE;\r\n default: return DecoratorKind.CUSTOM;\r\n }\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\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 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 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: CommonTypeNode;\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: CommonTypeNode[] | 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 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/** 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 decorators. */\r\n decorators: DecoratorNode[] | 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 this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\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: CommonTypeNode | 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: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\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/** 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 // 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 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 /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\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 /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && 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\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 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 parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\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\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 decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\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/** Tests if a specific decorator is present within the specified decorators. */\r\nexport function hasDecorator(name: string, decorators: DecoratorNode[] | null): bool {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let expression = decorators[i].name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\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 declaration.is(CommonFlags.STATIC)\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\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\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","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\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 CommentKind\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\";\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 enum IdentifierHandling {\r\n DEFAULT,\r\n PREFER,\r\n ALWAYS\r\n}\r\n\r\nexport function tokenFromKeyword(text: string): Token {\r\n switch (text.length && text.charCodeAt(0)) {\r\n case CharCode.a: {\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 }\r\n break;\r\n }\r\n case CharCode.b: {\r\n switch (text) {\r\n case \"break\": return Token.BREAK;\r\n }\r\n break;\r\n }\r\n case CharCode.c: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.d: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.e: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.f: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.g: {\r\n switch (text) {\r\n case \"get\": return Token.GET;\r\n }\r\n break;\r\n }\r\n case CharCode.i: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.k: {\r\n switch (text) {\r\n case \"keyof\": return Token.KEYOF;\r\n }\r\n break;\r\n }\r\n case CharCode.l: {\r\n switch (text) {\r\n case \"let\": return Token.LET;\r\n }\r\n break;\r\n }\r\n case CharCode.m: {\r\n switch (text) {\r\n case \"module\": return Token.MODULE;\r\n }\r\n break;\r\n }\r\n case CharCode.n: {\r\n switch (text) {\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n }\r\n break;\r\n }\r\n case CharCode.o: {\r\n switch (text) {\r\n case \"of\": return Token.OF;\r\n }\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.r: {\r\n switch (text) {\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n }\r\n break;\r\n }\r\n case CharCode.s: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.t: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.v: {\r\n switch (text) {\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n }\r\n break;\r\n }\r\n case CharCode.w: {\r\n switch (text) {\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n }\r\n break;\r\n }\r\n case CharCode.y: {\r\n switch (text) {\r\n case \"yield\": return Token.YIELD;\r\n }\r\n break;\r\n }\r\n }\r\n return Token.INVALID;\r\n}\r\n\r\nexport function tokenIsAlsoIdentifier(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: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(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: {\r\n assert(false);\r\n 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 line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\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 column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\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\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\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 nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\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(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\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 let commentStartPos = this.pos;\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 let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let 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 } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\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 let 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 let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\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 }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\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 let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\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 skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): 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 }\r\n this.token = this.unsafeNext(identifierHandling, 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 mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\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 let 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 case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\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 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: return \"\";\r\n default: 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 let 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 let 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 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 }\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: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let 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 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 }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let 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 let 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 let 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 let 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 let 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 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 // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): 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 let 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 readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\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 let 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\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\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\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\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 pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is 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. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\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.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the int type of this type. Defaults to `Type.i32` if this is not an int type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.I64:\r\n case TypeKind.ISIZE:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.USIZE: return this;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\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 var size = this.is(TypeFlags.UNSIGNED) ? this.size : this.size - 1;\r\n return ~0 >>> (targetType.size - size);\r\n }\r\n\r\n /** Tests if this type has (all of) the specified flags. */\r\n is(flags: TypeFlags): bool { return (this.flags & flags) == flags; }\r\n /** Tests if this type has any of the specified flags. */\r\n isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; }\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.classReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classReference = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(signature: Signature): Type {\r\n assert(this.kind == TypeKind.U32 && !this.signatureReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.signatureReference = signature;\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.is(TypeFlags.REFERENCE));\r\n if (!this.cachedNullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.cachedNullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.cachedNullableType.classReference = this.classReference; // either a class reference\r\n this.cachedNullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.cachedNullableType;\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: Signature | null;\r\n var targetFunction: Signature | null;\r\n if (this.is(TypeFlags.REFERENCE)) {\r\n if (target.is(TypeFlags.REFERENCE)) {\r\n if (currentClass = this.classReference) {\r\n if (targetClass = target.classReference) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.signatureReference) {\r\n if (targetFunction = target.signatureReference) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n } else if (!target.is(TypeFlags.REFERENCE)) {\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)) return left;\r\n else if (left.isAssignableTo(right, signednessIsImportant)) return right;\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: {\r\n let functionType = this.signatureReference;\r\n return kindOnly || !functionType ? \"u32\" : functionType.toString(true);\r\n }\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: {\r\n let classType = this.classReference;\r\n return kindOnly || !classType ? \"usize\" : classType.toString();\r\n }\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: {\r\n assert(false);\r\n return \"\";\r\n }\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 default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: 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 case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: 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 case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: 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 case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: 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 default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: 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.SHORT |\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.SHORT |\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.INTEGER |\r\n TypeFlags.POINTER |\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.INTEGER |\r\n TypeFlags.POINTER |\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.SHORT |\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.SHORT |\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.INTEGER |\r\n TypeFlags.POINTER |\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.INTEGER |\r\n TypeFlags.POINTER |\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.SHORT |\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 numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) ret[i] = types[i].toNativeType();\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 numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString();\r\n return sb.join(\",\");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters excluding `this`. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n /** Respective function type. */\r\n type: Type;\r\n\r\n /** Constructs a new signature. */\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n this.type = Type.u32.asFunction(this);\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getDefaultParameterName(index);\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: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) return false;\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) return false; // TODO\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) return false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) return false;\r\n }\r\n\r\n // check return type\r\n var thisReturnType = this.returnType;\r\n var targetReturnType = target.returnType;\r\n return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType);\r\n }\r\n\r\n /** Converts a signature to a function type string. */\r\n static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string {\r\n var sb = [];\r\n if (thisType) sb.push(thisType.toSignatureString());\r\n if (parameterTypes) {\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType);\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) sb.push((names)[i]);\r\n else sb.push(getDefaultParameterName(i));\r\n if (i >= optionalStart && i != restIndex) sb.push(\"?: \");\r\n else sb.push(\": \");\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached default parameter names used where names are unknown.\r\nvar cachedDefaultParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached default parameter name for the specified index. */\r\nexport function getDefaultParameterName(index: i32): string {\r\n if (!cachedDefaultParameterNames) cachedDefaultParameterNames = [];\r\n for (let i = cachedDefaultParameterNames.length; i <= index; ++i) {\r\n cachedDefaultParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedDefaultParameterNames[index - 1];\r\n}\r\n","/**\r\n * Generated from diagnosticsMessages.json. Do not edit.\r\n * @module diagnostics\r\n *//***/\r\n\r\n/* tslint:disable:max-line-length */\r\n\r\n/** Enum of available diagnostic codes. */\r\nexport enum DiagnosticCode {\r\n Operation_not_supported = 100,\r\n Operation_is_unsafe = 101,\r\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\r\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\r\n Type_0_cannot_be_changed_to_type_1 = 202,\r\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\r\n Basic_type_0_cannot_be_nullable = 204,\r\n Cannot_export_a_mutable_global = 205,\r\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\r\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\r\n Unmanaged_classes_cannot_implement_interfaces = 208,\r\n Invalid_regular_expression_flags = 209,\r\n Implementation_0_must_match_the_signature_1 = 210,\r\n Class_0_is_sealed_and_cannot_be_extended = 211,\r\n Decorator_0_is_not_valid_here = 212,\r\n Duplicate_decorator = 213,\r\n Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Enum_member_must_have_initializer = 1061,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\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 \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes 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 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\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 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\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 1176: return \"Interface declaration cannot have 'implements' clause.\";\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 1317: return \"A parameter property cannot be declared using a rest parameter.\";\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 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\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\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\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 FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex\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 FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n CommonFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags,\r\n\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\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 NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\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 FieldDeclaration\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\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 /** If true, imports the function table provided by the embedder. */\r\n importTable: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: u32 = 0;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Global aliases. */\r\n globalAliases: Map | null = null;\r\n /** Additional features to activate. */\r\n features: Feature = Feature.NONE;\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 /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\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/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\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 /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Outer function in compilation, if compiling a function expression. */\r\n outerFunction: Function | null = null;\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 /** Start function being compiled. */\r\n startFunction: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[] = [];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\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 if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\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 var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(program.elementsLookup.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 new Signature([], Type.void)\r\n );\r\n this.startFunction = startFunctionInstance;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) this.compileSource(sources[i]);\r\n }\r\n\r\n // compile the start function if not empty\r\n var startFunctionBody = this.startFunctionBody;\r\n if (startFunctionBody.length) {\r\n let signature = startFunctionInstance.signature;\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n this.ensureFunctionType(\r\n signature.parameterTypes,\r\n signature.returnType,\r\n signature.thisType\r\n ),\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!options.noMemory) {\r\n let memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n let pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n module.setMemory(\r\n i64_low(pages),\r\n this.options.isWasm64\r\n ? Module.MAX_MEMORY_WASM64\r\n : Module.MAX_MEMORY_WASM32,\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n }\r\n\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunction = this.startFunction;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\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 (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\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 let 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 default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunction;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let 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_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\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 WrapMode.WRAP\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\r\n // must either be annotated or have an initializer\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 } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isConstant = global.isAny(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n module.addGlobalImport(\r\n global.internalName,\r\n global.parent\r\n ? global.parent.simpleName\r\n : \"env\",\r\n global.simpleName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // inlined constant can be compiled as-is\r\n if (global.is(CommonFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n\r\n } else {\r\n\r\n // evaluate initializer if present\r\n if (declaration && declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n // check if the initializer is constant\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n\r\n // if a constant global, check if the initializer becomes constant after precompute\r\n if (isConstant) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(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\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (isConstant) {\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(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 getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (global.is(CommonFlags.MODULE_EXPORT)) {\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n module.addGlobalExport(internalName, mangleExportName(global));\r\n } else if (declaration && declaration.isTopLevel) { // might become re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !isConstant, initExpr);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n if (val.is(CommonFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\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 = module.createI32(0);\r\n } else if (previousValue.is(CommonFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(CommonFlags.CONST)) {\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 module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (getExpressionType(initExpr) == NativeType.I32) {\r\n val.constantValue = getConstValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n val.constantValue = 0;\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.is(CommonFlags.MODULE_EXPORT)) {\r\n if (member.is(CommonFlags.INLINED) || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n module.addGlobalExport(member.internalName, mangleExportName(member));\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 /** Compiles a top-level function given its declaration. */\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 = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || instance.internalName == \"abort\");\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching but still compile as-is\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\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 }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n stmt = this.compileStatement(body);\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmt = module.createBlock(null, [\r\n stmt,\r\n module.createGetLocal(0, nativeSizeType)\r\n ], nativeSizeType);\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmt = module.createBlock(null, [\r\n stmt,\r\n module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n )\r\n ], nativeSizeType);\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n\r\n // create the function import\r\n let parent = instance.prototype.parent;\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n parent\r\n ? parent.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n }\r\n\r\n // check module-level export\r\n if (instance.is(CommonFlags.MODULE_EXPORT)) {\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // export the trampoline if the function takes optional parameters\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n module.addFunctionExport(instance.internalName, mangleExportName(instance));\r\n }\r\n\r\n instance.finalize(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 (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\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 (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\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 (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.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(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\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\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var exports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = exports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.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(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n 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 let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n 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\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 = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\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.resolveUsingTypeArguments( // 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(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\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 // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\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 /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n 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 module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunction) {\r\n return module.createNop();\r\n }\r\n // otherwise fall-through\r\n }\r\n default: {\r\n assert(false);\r\n stmt = module.createUnreachable();\r\n }\r\n }\r\n if (this.options.sourceMap) this.addDebugLocation(stmt, statement.range);\r\n return stmt;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var numStatements = statements.length;\r\n var stmts = new Array(numStatements);\r\n var count = 0;\r\n var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numStatements; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)) break;\r\n }\r\n }\r\n stmts.length = count;\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n var blockFlow = this.currentFunction.flow.enterBranchOrScope();\r\n this.currentFunction.flow = blockFlow;\r\n\r\n var stmts = this.compileStatements(statements);\r\n var stmt = stmts.length == 0\r\n ? this.module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : this.module.createBlock(null, stmts, NativeType.None);\r\n\r\n // Switch back to the parent flow\r\n var parentFlow = blockFlow.leaveBranchOrScope();\r\n this.currentFunction.flow = parentFlow;\r\n parentFlow.inherit(blockFlow);\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n var module = this.module;\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 module.createUnreachable();\r\n }\r\n var flow = this.currentFunction.flow;\r\n var breakLabel = 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 module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.BREAKS);\r\n return module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n var module = this.module;\r\n var label = statement.label;\r\n if (label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var flow = this.currentFunction.flow;\r\n var continueLabel = 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 module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.CONTINUES);\r\n return module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // TODO: check if condition is always false and if so, omit it?\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n flow.isAny(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, condExpr)\r\n ], NativeType.None)\r\n )\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, WrapMode.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 // 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 currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initExpr = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : module.createNop();\r\n var condExpr: ExpressionRef = 0;\r\n var alwaysTrue = true;\r\n if (statement.condition) {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // check if the condition is always true\r\n let condPre = this.precomputeExpressionRef(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : module.createNop();\r\n var bodyExpr = this.compileStatement(statement.statement);\r\n\r\n // Switch back to the parent flow\r\n var parentFlow = flow.leaveBranchOrScope();\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n currentFunction.flow = parentFlow;\r\n currentFunction.leaveBreakContext();\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n initExpr,\r\n module.createLoop(continueLabel, module.createBlock(null, [\r\n module.createIf(condExpr, module.createBlock(null, [\r\n bodyExpr,\r\n incrExpr,\r\n 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, append a hint for Binaryen\r\n if (flow.isAny(FlowFlags.RETURNS | FlowFlags.THROWS)) {\r\n expr = module.createBlock(null, [\r\n expr,\r\n module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var ifTrueFlow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.leaveBranchOrScope();\r\n\r\n var ifFalseFlow: Flow | null;\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n ifFalseFlow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n let parentFlow = ifFalseFlow.leaveBranchOrScope();\r\n currentFunction.flow = parentFlow;\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n }\r\n return module.createIf(condExpr, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var expr: ExpressionRef = 0;\r\n var flow = currentFunction.flow;\r\n\r\n // Remember that this flow returns\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n if (statement.value) {\r\n let returnType = flow.returnType;\r\n expr = this.compileExpression(\r\n statement.value,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n currentFunction.is(CommonFlags.MODULE_EXPORT)\r\n ? WrapMode.WRAP\r\n : WrapMode.NONE\r\n );\r\n\r\n // Remember whether returning a properly wrapped value\r\n if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n }\r\n\r\n // When inlining, break to the end of the inlined function's block (no need to wrap)\r\n return flow.is(FlowFlags.INLINE_CONTEXT)\r\n ? module.createBreak(assert(flow.returnLabel), 0, expr)\r\n : module.createReturn(expr);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32, false);\r\n var tempLocalIndex = tempLocal.index;\r\n var cases = statement.cases;\r\n var numCases = 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 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\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 (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n 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] = 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 = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n var alwaysReturnsWrapped = true;\r\n var alwaysThrows = true;\r\n var alwaysAllocates = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let fallsThrough = i != numCases - 1;\r\n let nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n let stmts = new Array(1 + numStatements);\r\n stmts[0] = currentBlock;\r\n let count = 1;\r\n for (let j = 0; j < numStatements; ++j) {\r\n let stmt = this.compileStatement(statements[j]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.is(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)) break;\r\n }\r\n }\r\n stmts.length = count;\r\n if (!(fallsThrough || flow.is(FlowFlags.RETURNS))) alwaysReturns = false; // ignore fall-throughs\r\n if (!(fallsThrough || flow.is(FlowFlags.RETURNS_WRAPPED))) alwaysReturnsWrapped = false; // ignore fall-throughs\r\n if (!(fallsThrough || flow.is(FlowFlags.THROWS))) alwaysThrows = false;\r\n if (!(fallsThrough || flow.is(FlowFlags.ALLOCATES))) alwaysAllocates = false;\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentBlock = module.createBlock(nextLabel, stmts, NativeType.None); // must be a labeled block\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0) {\r\n let flow = currentFunction.flow;\r\n if (alwaysReturns) flow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) flow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) flow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileBuiltinAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\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 program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n 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 (let i = 0; i < numDeclarations; ++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 var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = program.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE,\r\n WrapMode.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 let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = 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 this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\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 (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\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 compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = false; // CONDITION_IS_ALWAYS_TRUE && flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate if condition is always true\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n flow.isAny(FlowFlags.CONTINUES | FlowFlags.BREAKS | FlowFlags.RETURNS)\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None)\r\n )\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 = module.createBlock(null, [\r\n expr,\r\n 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(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = 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 ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let 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 ); // recognized by canOverflow\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.F64: {\r\n if (!(element.is(CommonFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\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);\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 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.SUPER:\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);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\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 wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\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 wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> 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 module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) {\r\n return 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 ); // recoverable\r\n }\r\n\r\n // TODO: make this a proper switch?\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 = 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 = 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 = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\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 = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\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 = 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 = 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 = 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 = 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 = 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 // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : 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.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\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 = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\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 = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\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 = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\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 = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\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 leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n if (operator == Token.EQUALS_EQUALS) { // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\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 = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n if (operator == Token.EXCLAMATION_EQUALS) { // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\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 = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\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 case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = (prototype).resolve();\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = (prototype).resolve();\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\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 case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.WRAP); // !\r\n leftType = this.currentType; // ^ must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.WRAP);\r\n leftType = this.currentType; // ^ clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: operator overload?\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\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.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\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 expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\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 expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\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 leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n // checks and recompiles the argument according to its actual annotated type\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = this.compileExpression(value, (parent).type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ];\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n // checks and recompiles the arguments according to their actual annotated types\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = this.compileExpression(left, (parent).type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ];\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var target = program.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var elementType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n elementType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prototype = (target).setterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n elementType = instance.signature.parameterTypes[0];\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, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (program.resolvedElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n elementType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\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\r\n // compile the value and do the assignment\r\n var valueExpr = this.compileExpression(valueExpression, elementType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\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 module = this.module;\r\n var target = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\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, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\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 target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\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, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = (getterPrototype).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\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, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.program.resolvedElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameterTypes;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameterTypes[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.program.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n true\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = prototype.resolve(\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = prototype.resolve(\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.program.resolvedThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n break;\r\n } else {\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, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\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, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\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, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n ),\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 /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0,\r\n inline: bool = false\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // Inline if explicitly requested\r\n if (inline) {\r\n assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense\r\n return this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.parameterTypes[i].initializer),\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(initExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, initExpr)\r\n );\r\n }\r\n\r\n // Compile the called function's body in the scope of the inlined flow\r\n var bodyStatement = assert(declaration.body);\r\n if (bodyStatement.kind == NodeKind.BLOCK) {\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n body.push(stmt);\r\n if (flow.is(FlowFlags.RETURNS)) break;\r\n }\r\n }\r\n } else {\r\n body.push(this.compileStatement(bodyStatement));\r\n }\r\n\r\n // Free any new scoped locals and reset to the original flow\r\n var scopedLocals = flow.scopedLocals;\r\n if (scopedLocals) {\r\n for (let scopedLocal of scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n flow.scopedLocals = null;\r\n }\r\n flow.finalize();\r\n this.currentFunction.flow = previousFlow;\r\n this.currentType = returnType;\r\n\r\n // Check that all branches return\r\n if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return module.createBlock(returnLabel, body, returnType.toNativeType());\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameterTypes;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"oob\", [\r\n module.createSwitch(names, \"oob\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n assert(originalParameterDeclarations[minArguments + i].initializer),\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n )\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameterTypes;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = assert(parameterNodes[i].initializer);\r\n if (initializer.kind != NodeKind.LITERAL) {\r\n // TODO: other kinds might be constant as well\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\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 target = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\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\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\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.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : 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 var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.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.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\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.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.program.resolveIdentifier( // reports\r\n expression,\r\n currentFunction,\r\n this.currentEnum\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localType = (target).type;\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.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 ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = (target).resolve(\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\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\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let 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)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n if (i64_is_i32(intValue) || i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue) || i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return 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_i32(intValue) || i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\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 module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return 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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let 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 (let 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, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = (arrayPrototype).resolve([ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\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 return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance = classPrototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the first matching constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance = classInstance.constructorInstance;\r\n while (!constructorInstance && (currentClassInstance = classInstance.base)) {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n }\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\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 program = this.program;\r\n var module = this.module;\r\n\r\n var target = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (target).getterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(null); // reports\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, thisExpr);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var ifThen = expression.ifThen;\r\n var ifElse = expression.ifElse;\r\n var currentFunction = this.currentFunction;\r\n\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenExpr: ExpressionRef;\r\n var ifElseExpr: ExpressionRef;\r\n var ifThenType: Type;\r\n var ifElseType: Type;\r\n\r\n // if part of a constructor, keep track of memory allocations\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n let flow = currentFunction.flow;\r\n\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n ifThenType = this.currentType;\r\n let ifThenAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n ifElseType = this.currentType;\r\n let ifElseAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n if (ifThenAllocates && ifElseAllocates) flow.set(FlowFlags.ALLOCATES);\r\n\r\n // otherwise simplify\r\n } else {\r\n ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n ifThenType = this.currentType;\r\n ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n ifElseType = this.currentType;\r\n }\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) {\r\n // shortcut if compiling the getter already failed\r\n return getValue;\r\n }\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (currentType.kind) {\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 op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(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 = 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 = 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 = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (currentType.kind) {\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 op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(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 = 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 = 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 = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\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 WrapMode.NONE\r\n );\r\n switch (this.currentType.kind) {\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 = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 WrapMode.NONE\r\n );\r\n switch (this.currentType.kind) {\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 = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 WrapMode.NONE\r\n );\r\n switch (this.currentType.kind) {\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 = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\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 WrapMode.NONE\r\n );\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 WrapMode.NONE\r\n );\r\n switch (this.currentType.kind) {\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 = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\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 return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\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 /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : 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 }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : 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 }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\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 expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\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 expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileBuiltinAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, simpleName: string = element.simpleName): string {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION: {\r\n let parent = (element).parent || (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName\r\n : simpleName;\r\n }\r\n case ElementKind.FIELD: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.CLASS: {\r\n let parent = (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n default: {\r\n let parent = element.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n }\r\n}\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n Program,\r\n CommonFlags,\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 CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\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 DecoratorNode,\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 NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath\r\n} from \"./ast\";\r\n\r\nconst builtinsFile = LIBRARY_PREFIX + \"builtins.ts\";\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 /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\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 var program = this.program;\r\n\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].internalPath == internalPath) return;\r\n }\r\n this.seenlog.add(internalPath);\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 sources.push(source);\r\n\r\n // mark the special builtins library file\r\n if (source.normalizedPath == builtinsFile) {\r\n source.set(CommonFlags.BUILTIN);\r\n }\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n 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 namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // mark builtins\r\n flags |= (tn.source.flags & CommonFlags.BUILTIN);\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let 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 var backlog = this.backlog;\r\n return backlog.length ? 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 ): CommonTypeNode | 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: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\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.BAR)) {\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.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let 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 } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\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 // StringLiteral\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 // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let 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 let 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 let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let 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 // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\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 this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\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 let 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 flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, 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, decorators, flags, 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 parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\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 flags = parentFlags;\r\n\r\n var type: CommonTypeNode | 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 (flags & CommonFlags.AMBIENT) {\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 (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\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 parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\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 while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\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 ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\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 parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\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 parentFlags,\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 ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\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 if (typeParameters.length === 0) {\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 ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\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 isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor);\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 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 }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\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 return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | 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 } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let 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 let param = 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 param.flags |= accessFlags;\r\n return param;\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 flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\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 if (!tn.skipIdentifier()) {\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 name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\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 if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\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 name.range\r\n ); // recoverable\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 name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\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 (!(flags & CommonFlags.AMBIENT)) {\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 name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\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 name: 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 if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(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 name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\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 signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\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 name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\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 identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\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 let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\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\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\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 let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var flags = parent.flags & CommonFlags.AMBIENT; // inherit\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n if (tn.skip(Token.ABSTRACT)) {\r\n flags |= (CommonFlags.ABSTRACT | CommonFlags.INSTANCE);\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\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 name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else 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 name.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 name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.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, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\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 (!(flags & CommonFlags.AMBIENT)) {\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 let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\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 name.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 name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | 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 let 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 let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\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 flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let 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 let 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 let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath != null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\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.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\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 let 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.skipIdentifier()) {\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 let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let 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 let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\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.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\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 startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, 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.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 var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\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 statement = this.parseReturn(tn);\r\n break;\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 statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\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 let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\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(IdentifierHandling.PREFER);\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(IdentifierHandling.PREFER);\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 let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let 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 let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\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 let 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 let 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 let 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 let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let 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 let 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 let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let 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 let 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 let 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 let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let 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.skipIdentifier()) {\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 let 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 flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\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 parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\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 let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let 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(IdentifierHandling.PREFER);\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 let 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.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\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.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\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 }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\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 let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\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.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\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 return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let 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 let 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\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\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(state);\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 while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\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 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 with type arguments\r\n var typeArguments: CommonTypeNode[] | null;\r\n while (\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) ||\r\n tn.skip(Token.OPENPAREN)\r\n ) {\r\n let 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 switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let 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 let 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 let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA ? Precedence.COMMA + 1 : 0);\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 let 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 let 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 }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n // skipBlock(tn: Tokenizer): void {\r\n // var depth = 0;\r\n // var token: Token;\r\n // do {\r\n // token = tn.next();\r\n // if (token == Token.OPENBRACE) {\r\n // ++depth;\r\n // } else if (token == Token.CLOSEBRACE) {\r\n // if (depth) --depth;\r\n // if (!depth) break; // done\r\n // }\r\n // } while (token != Token.ENDOFFILE);\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 case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\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: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n default: 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 case Token.COMMA: return Precedence.COMMA;\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: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\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: return Precedence.EQUALITY;\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: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n default: 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 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: return true;\r\n default: return false;\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n Program,\r\n Element,\r\n CommonFlags,\r\n ElementKind,\r\n Global,\r\n Enum,\r\n EnumValue,\r\n Field,\r\n Function,\r\n FunctionPrototype,\r\n Class,\r\n ClassPrototype,\r\n Namespace,\r\n ConstantValueKind,\r\n Interface,\r\n Property\r\n} from \"./program\";\r\n\r\nimport {\r\n Type,\r\n TypeKind\r\n} from \"./types\";\r\n\r\nimport {\r\n indent\r\n} from \"./util\";\r\n\r\n/** Walker base class. */\r\nabstract class ExportsWalker {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Whether to include private members */\r\n includePrivate: bool;\r\n /** Elements still to do. */\r\n todo: Element[] = [];\r\n /** Already seen elements. */\r\n seen: Set = new Set();\r\n\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n this.program = program;\r\n this.includePrivate;\r\n }\r\n\r\n /** Walks all exports and calls the respective handlers. */\r\n walk(): void {\r\n for (let element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.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 this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\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: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\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 getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\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): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(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(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(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 = getExpressionId(expr);\r\n var type = getExpressionType(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 case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(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(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(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 case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\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(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(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(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(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 getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(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(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(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(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\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(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(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 (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\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 case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\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","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\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\nimport {\r\n Program,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\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) parser = new Parser();\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 `importTable` option. */\r\nexport function setImportTable(options: Options, importTable: bool): void {\r\n options.importTable = importTable;\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/** Sets a 'globalAliases' value. */\r\nexport function setGlobalAlias(options: Options, name: string, alias: string): void {\r\n var globalAliases = options.globalAliases;\r\n if (!globalAliases) options.globalAliases = globalAliases = new Map();\r\n globalAliases.set(name, alias);\r\n}\r\n\r\n/** Sign extension operations. */\r\nexport const FEATURE_SIGN_EXTENSION = Feature.SIGN_EXTENSION;\r\n/** Mutable global imports and exports. */\r\nexport const FEATURE_MUTABLE_GLOBAL = Feature.MUTABLE_GLOBAL;\r\n\r\n/** Enables a specific feature. */\r\nexport function enableFeature(options: Options, feature: Feature): void {\r\n options.features |= feature;\r\n}\r\n\r\n/** Finishes parsing. */\r\nexport function finishParsing(parser: Parser): Program {\r\n return parser.finish();\r\n}\r\n\r\n/** Compiles the sources computed by the parser to a module. */\r\nexport function compileProgram(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function decompileModule(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/** Builds WebIDL definitions for the specified program. */\r\nexport function buildIDL(program: Program): string {\r\n return IDLBuilder.build(program);\r\n}\r\n\r\n/** Builds TypeScript definitions for the specified program. */\r\nexport function buildTSD(program: Program): string {\r\n return TSDBuilder.build(program);\r\n}\r\n\r\n/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX };\r\n","const F64 = new Float64Array(1);\r\nconst F32 = new Float32Array(F64.buffer);\r\nconst I32 = new Int32Array(F64.buffer);\r\n\r\nglobal.f32_as_i32 = function(value) {\r\n F32[0] = value;\r\n return I32[0];\r\n};\r\n\r\nglobal.i32_as_f32 = function(value) {\r\n I32[0] = value;\r\n return F32[0];\r\n};\r\n\r\nglobal.f64_as_i64 = function(value) {\r\n F64[0] = value;\r\n return i64_new(I32[0], I32[1]);\r\n};\r\n\r\nglobal.i64_as_f64 = function(value) {\r\n I32[0] = i64_low(value);\r\n I32[1] = i64_high(value);\r\n return F64[0];\r\n};\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_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\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_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\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","/** @module util *//***/\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\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 normalizePath(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 let 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 resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\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","/** @module util *//***/\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 }\r\n default: {\r\n return false;\r\n }\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 }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid 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 a valid 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","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\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 BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags\r\n} from \"./program\";\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 // 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 // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 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 }\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], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 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 }\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 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 }\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\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 = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\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.is(TypeFlags.REFERENCE)) {\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 }\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 }\r\n return ret; // possibly overflows\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\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 = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\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.is(TypeFlags.REFERENCE)) {\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 }\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 }\r\n return ret; // possibly overflowws\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.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(tempLocal.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(tempLocal.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 let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.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.is(TypeFlags.REFERENCE)) {\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 }\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 }\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\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 let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\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 let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\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 let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\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 let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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.is(TypeFlags.REFERENCE)) {\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 let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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 }\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\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 let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\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 let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\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 let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\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 let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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.is(TypeFlags.REFERENCE)) {\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 let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 }\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 switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\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, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\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 }\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 ConversionKind.IMPLICIT,\r\n WrapMode.NONE\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.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\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.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\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 // case TypeKind.VOID:\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 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 }\r\n return ret;\r\n }\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(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let 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(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let 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 && 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 let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> 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 && 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 let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\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 ? 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 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 let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\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 = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other 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 }\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\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, ConversionKind.IMPLICIT, WrapMode.NONE);\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(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\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: u8, 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(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\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\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 }\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.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let 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 let 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 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 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 }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\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 let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.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 }\r\n return ret;\r\n }\r\n case \"unchecked\": {\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 return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\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(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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 WrapMode.NONE\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(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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 WrapMode.NONE\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(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\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 expr;\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\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\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 null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\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 null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\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.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 null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\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, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(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, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(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\nconst allocateInternalName = \"allocate_memory\";\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 classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\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, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = (allocatePrototype).resolve(); // reports\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\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 program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__22__;","// 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","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","module.exports = globalScope => {\r\n globalScope[\"JSMath\"] = Math;\r\n};\r\n","/** @module std/portable *//***/\r\n\r\nvar 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_POSITIVE_VALUE\": { value: Math.fround(1.175494351e-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_POSITIVE_VALUE\": { value: 2.2250738585072014e-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[\"ctz\"] = function ctz(value) {\r\n var c = Math.clz32(value & -value);\r\n return value ? 31 - c : c;\r\n};\r\n\r\nglobalScope[\"popcnt\"] = function popcnt(value) {\r\n value -= value >>> 1 & 0x55555555;\r\n value = (value & 0x33333333) + (value >>> 2 & 0x33333333);\r\n return (((value + (value >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\r\n};\r\n\r\nglobalScope[\"rotl\"] = function rotl(value, shift) {\r\n shift &= 31;\r\n return (value << shift) | (value >>> (32 - shift));\r\n};\r\n\r\nglobalScope[\"rotr\"] = function rotr(value, shift) {\r\n shift &= 31;\r\n return (value >>> shift) | (value << (32 - shift));\r\n};\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\n// Adopt code from https://github.com/rfk/wasm-polyfill\r\nglobalScope[\"nearest\"] = function nearest(value) {\r\n if (Math.abs(value - Math.trunc(value)) === 0.5) {\r\n return 2.0 * Math.round(value * 0.5);\r\n }\r\n return Math.round(value);\r\n};\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[\"copysign\"] = function copysign(x, y) {\r\n return Math.abs(x) * Math.sign(y);\r\n};\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\r\nglobalScope[\"isInteger\"] = Number.isInteger;\r\n\r\nglobalScope[\"isFloat\"] = function isFloat(arg) {\r\n return typeof arg === \"number\";\r\n};\r\n\r\nglobalScope[\"isReference\"] = function isClass(arg) {\r\n return typeof arg === \"object\" || typeof arg === \"string\";\r\n};\r\n\r\nglobalScope[\"isString\"] = function isString(arg) {\r\n return typeof arg === \"string\" || arg instanceof String;\r\n};\r\n\r\nglobalScope[\"isArray\"] = Array.isArray;\r\n\r\nglobalScope[\"unchecked\"] = function(expr) {\r\n return expr;\r\n};\r\n\r\nglobalScope[\"fmod\"] = function fmod(x, y) {\r\n return x % y;\r\n};\r\n\r\nglobalScope[\"fmodf\"] = function fmodf(x, y) {\r\n return Math.fround(x % y);\r\n};\r\n\r\nrequire(\"./portable/math\")(globalScope);\r\nrequire(\"./portable/memory\")(globalScope);\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\nimport \"../../../std/portable\";\r\nimport \"./binaryen\";\r\nimport \"./i64\";\r\nimport \"./float\";\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable/memory.js","webpack://assemblyscript/./std/portable/math.js","webpack://assemblyscript/./std/portable.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__22__","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","diagnostics_1","types_1","ast_1","module_1","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","OperatorKind","QueuedExport","QueuedImport","TypeAlias","operatorKindFromString","str","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","DIV","REM","POW","AND","OR","XOR","EQ","NE","GT","GE","LT","LE","INVALID","ElementKind","CommonFlags","DecoratorFlags","noTypesYet","Map","Program","_super","diagnostics","_this","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayPrototype","arrayBufferViewPrototype","stringInstance","resolvedThisExpression","resolvedElementExpression","sources","__extends","getSource","normalizedPath","k","length","source","lookupSourceByPath","normalizedPathWithoutExtension","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","queuedExports","queuedImports","Array","queuedExtends","queuedImplements","statements","j","statement","kind","NodeKind","CLASSDECLARATION","initializeClass","ENUMDECLARATION","initializeEnum","EXPORT","initializeExports","FUNCTIONDECLARATION","initializeFunction","IMPORT","initializeImports","INTERFACEDECLARATION","initializeInterface","NAMESPACEDECLARATION","initializeNamespace","TYPEDECLARATION","initializeTypeAlias","VARIABLE","initializeVariables","queuedImport","element","tryResolveImport","referencedName","set","internalName","splice","referencedNameAlt","error","DiagnosticCode","Module_0_has_no_exported_member_1","declaration","range","parent","path","externalName","text","queuedExports_1","__values","queuedExports_1_1","next","done","_a","__read","exportName","queuedExport","currentExport","isReExport","member","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","assert","extendsType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_c","alias","Error","INTERFACE_PROTOTYPE","stringPrototype","resolve","has","Duplicate_identifier_0","programLevelInternalName","type","filterDecorators","decorators","acceptedFlags","presentFlags","NONE","decorator","IDENTIFIER","flag","decoratorKindToFlag","stringToDecoratorKind","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobalOptions","parentNode","hasDecorator","GLOBAL","is","BUILTIN","isLibrary","SOURCE","globalName","namespace","fileLevelInternalName","simpleName","ClassPrototype","SEALED","UNMANAGED","implementsTypes","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Range","join","push","members","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isAny","GET","SET","initializeAccessor","initializeMethod","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","decoratorFlags","OPERATOR","INLINE","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","decoratorKind","DecoratorKind","numArgs","arguments","firstArg","LITERAL","literalKind","LiteralKind","STRING","Operation_not_supported","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","toString","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","values","initializeEnumValue","enm","EnumValue","initializeExport","internalPath","identifier","referencedElement","seen","Set","add","declarations","initializeImport","namespaceName","indexPart","endsWith","substring","InterfacePrototype","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","typeParameters","global_1","resolveSignature","node","contextualTypeArguments","reportNotFound","explicitThisType","thisType","resolveType","parameterTypeNodes","parameterTypes","numParameters","parameterNames","requiredParameters","hasRest","parameterTypeNode","parameterKind","ParameterKind","DEFAULT","REST","parameterType","returnType","returnTypeNode","signature","Signature","SIGNATURE","asFunction","typeNode","localName","instance","resolveUsingTypeArguments","typeArguments","paramTypes","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","expression","target","resolveExpression","propertyName","LOCAL","FIELD","classReference","Property_0_does_not_exist_on_type_1","CLASS","elementExpression","indexedGet","lookupOverload","Index_signature_is_missing_in_type_0","base","resolveElementAccess","elementAccess","PARENTHESIZED","ASSERTION","toType","classType","BINARY","THIS","explicitLocal","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","PROPERTYACCESS","ELEMENTACCESS","CALL","FUNCTION_PROTOTYPE","signatureReference","functionTarget","cachedFunctionTarget","FunctionTarget","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","DiagnosticEmitter","Element","program","flags","NAMESPACE","ENUM","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","CONST","INLINED","withConstantFloatValue","constantFloatValue","Parameter","initializer","Local","index","scopedGlobal","instances","classTypeArguments","functionTypeArguments","isInstance","INSTANCE","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialKey","partialPrototype","reportNode","resolvedTypeArguments","GENERIC","resolveBuiltinTypeArguments","resolvedType","FUNCTION","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","AMBIENT","DECLARE","localIndex","local","inheritedTypeArguments_2","inheritedTypeArguments_2_1","parameterName","getParameterName","Flow","create","addLocal","getTempLocal","wrapped","temps","toNativeType","NativeType","I32","I64","F32","F64","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","debugInfoIndex","line","column","FUNCTION_TARGET","toSignatureString","FIELD_PROTOTYPE","Field","memoryOffset","inheritedTypeArguments_3","inheritedTypeArguments_3_1","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","Class","currentMemoryOffset","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","instanceProperty","partialGetterPrototype","partialSetterPrototype","_j","_k","_l","operatorInstance","operatorPartial","asClass","inheritedTypeArguments_4","inheritedTypeArguments_4_1","baseType","isAssignableTo","current","unchecked","uncheckedOverload","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","enterBranchOrScope","branch","slice","leaveBranchOrScope","_b","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritMutual","left","right","leftExt","rightExt","thisExt","minLength","min","canOverflow","expr","operand","getExpressionId","ExpressionId","GetLocal","getGetLocalIndex","canConversionOverflow","SetLocal","isTeeLocal","getSetLocalValue","GetGlobal","Binary","getBinaryOp","BinaryOp","EqI32","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","LtI32","LtU32","LtI64","LtU64","LtF32","LtF64","LeI32","LeU32","LeI64","LeU64","LeF32","LeF64","GtI32","GtU32","GtI64","GtU64","GtF32","GtF64","GeI32","GeU32","GeI64","GeU64","GeF32","GeF64","MulI32","getBinaryLeft","Const","getConstValueI32","getBinaryRight","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","Unary","getUnaryOp","UnaryOp","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","getExpressionType","getConstValueI64Low","getConstValueF32","getConstValueF64","MIN_VALUE","MAX_VALUE","Load","fromType","getLoadBytes","isLoadSigned","Block","getBlockName","getBlockChildCount","last","getBlockChild","If","getIfTrue","getIfFalse","Select","getSelectThen","getSelectElse","Call","getCallTarget","Unreachable","fromSize","toSize","__export","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","formatDiagnosticContext","useColors","len","start","end","isLineBreak","charCodeAt","sb","formatDiagnosticMessage","showContext","emitDiagnostic","info","warning","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","_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","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","_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","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","_BinaryenModuleCreate","cachedByValue","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","removeFunctionType","_BinaryenRemoveFunctionType","createI32","out","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","_BinaryenUnary","createBinary","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","_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","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","numNames","strs","_BinaryenSwitch","createCall","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","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","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","precomputeFunction","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","readString","toText","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","nested1","nested2","_BinaryenExpressionGetId","_BinaryenExpressionGetType","_BinaryenConstGetValueI32","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","_BinaryenConstGetValueF32","_BinaryenConstGetValueF64","_BinaryenGetLocalGetIndex","_BinaryenGetGlobalGetName","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","getConstValueI64High","getSetLocalIndex","_BinaryenSetLocalGetIndex","_BinaryenSetLocalGetValue","_BinaryenSetLocalIsTee","getUnaryValue","getLoadOffset","getLoadPtr","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","_BinaryenBlockGetName","_BinaryenBlockGetNumChildren","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","_BinaryenIfGetIfTrue","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","_BinaryenSelectGetIfTrue","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","_BinaryenFunctionGetBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","program_1","tokenizer_1","Token","Node","createType","isNullable","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","elem","TypeParameterNode","createParameter","ParameterNode","createSignature","parameters","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","CUSTOM","createComment","CommentNode","commentKind","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","setParentIfNotNull","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","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","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalizePath","startsWith","resolvePath","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","apply","TYPE","TYPEPARAMETER","PARAMETER","implicitFieldDeclaration","DECORATOR","CommentKind","COMMENT","Expression","LiteralExpression","ARRAY","AssertionKind","COMMA","FLOAT","INTEGER","NEW","NULL","REGEXP","TERNARY","TRUE","FALSE","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","BREAK","CONTINUE","DO","EMPTY","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","parameterIndex","FOR","IF","IMPORTDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","VARIABLEDECLARATION","VOID","WHILE","asGlobal","g","eval","e","window","IdentifierHandling","tokenFromKeyword","ABSTRACT","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","INSTANCEOF","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","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","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","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","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","TypeKind","TypeFlags","cachedNullableType","ceil","nonNullableType","computeSmallIntegerShift","targetType","asNullable","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","isize32","isize64","usize32","usize64","typesToNativeTypes","types","numTypes","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","builtins_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","importTable","memoryBase","features","hasFeature","feature","Feature","ConversionKind","WrapMode","Compiler","outerFunction","currentEnum","currentType","startFunctionBody","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionPrototype","startFunctionInstance","startFunction","compileSource","funcRef","ensureFunctionType","i64_align","isWasm64","pages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","File_0_not_found","COMPILED","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","Type_expected","compileExpression","Type_0_is_not_assignable_to_type_1","nativeType","isConstant","MODULE_IMPORT","initializeInStart","compileInlineConstant","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","mangleExportName","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","nativeSizeType","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","ensureTrampoline","ensureArgcSet","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","ctorInstance","_e","getterName","setterName","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","numStatements","stmts","count","Nop","blockFlow","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","condExpr","makeIsTrueish","alwaysTrue","compileExpressionRetainType","condPre","incrExpr","bodyExpr","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifFalseFlow","ifTrueExpr","ifFalseExpr","context","tempLocal","tempLocalIndex","numCases","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","fallsThrough","nextLabel","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","precomputeExpression","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU64","DivF32","DivF64","RemI64","RemU64","intType","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI64","ShrU64","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","argumentExpressions","thisArg","compileCallDirect","valueExpression","elementType","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","valueExpr","valueWithCorrectType","tee","thisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","argumentExpression","inferredType","concreteType","compileCallIndirect","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","compileCallInlineUnchecked","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","retainConstantType","scopedThis","superType","localType","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileArrayLiteral","floatValue","intValue","i64_sub","i64_is_i8","i64_is_u8","i64_is_i16","i64_is_u16","i64_is_i32","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","arrayInstance","arrayType","elementCount","nativeElementType","byteLength","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","nativeArrayType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenExpr","ifElseExpr","ifThenType","ifElseType","ifThenAllocates","ifElseAllocates","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","compileAllocate","field","nativeFieldType","builtinsFile","Parser","backlog","seenlog","tryParseSignatureIsSignature","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","t","A_rest_parameter_cannot_be_optional","OPTIONAL","param","parseArguments","parseVariableDeclaration","parentFlags","parentDecorators","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","typeParameter","parseTypeParameter","Type_parameter_list_cannot_be_empty","parseParameters","seenRest","seenOptional","reportedRest","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","accessFlags","A_parameter_property_cannot_be_declared_using_a_rest_parameter","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","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","isArrow","parseFunctionExpressionCommon","isInterface","Interface_declaration_cannot_have_implements_clause","parseClassMember","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","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","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","precedence","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","ctor","Decompiler","functionId","decompile","decompiler","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Break","Switch","CallImport","CallIndirect","SetGlobal","Store","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","Drop","Return","Host","CurrentMemory","GrowMemory","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","definitions_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setNoMemory","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","finishParsing","compileProgram","decompileModule","buildIDL","buildTSD","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","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","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","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","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_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","readI32","readI64","readF32","readF64","valueI64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","mid","compiler","evaluateConstantType","tempLocal0","tempLocal1","evaluateConstantOffset","alignLog2","fieldName","Type_0_has_no_property_1","abort","deferASM","deferASMCall","typeArgument","valueType","allocateInternalName","allocatePrototype","allocateInstance","abortInternalName","abortPrototype","abortInstance","messageArg","filenameArg","binaryen","Binaryen","key","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","arg","isArray"],"mappings":"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M,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,KAC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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})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__22__) {\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 = 28);\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\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 TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeNode,\r\n TypeParameterNode,\r\n ParameterKind,\r\n SignatureNode,\r\n DecoratorNode,\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 VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n stringToDecoratorKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\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/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_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\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n INDEXED_GET,\r\n INDEXED_SET,\r\n UNCHECKED_INDEXED_GET,\r\n UNCHECKED_INDEXED_SET,\r\n ADD,\r\n SUB,\r\n MUL,\r\n DIV,\r\n REM,\r\n POW,\r\n AND,\r\n OR,\r\n XOR,\r\n EQ,\r\n NE,\r\n GT,\r\n GE,\r\n LT,\r\n LE\r\n}\r\n\r\nfunction operatorKindFromString(str: string): OperatorKind {\r\n switch (str) {\r\n case \"[]\" : return OperatorKind.INDEXED_GET;\r\n case \"[]=\": return OperatorKind.INDEXED_SET;\r\n case \"{}\" : return OperatorKind.UNCHECKED_INDEXED_GET;\r\n case \"{}=\": return OperatorKind.UNCHECKED_INDEXED_SET;\r\n case \"+\" : return OperatorKind.ADD;\r\n case \"-\" : return OperatorKind.SUB;\r\n case \"*\" : return OperatorKind.MUL;\r\n case \"/\" : return OperatorKind.DIV;\r\n case \"%\" : return OperatorKind.REM;\r\n case \"**\" : return OperatorKind.POW;\r\n case \"&\" : return OperatorKind.AND;\r\n case \"|\" : return OperatorKind.OR;\r\n case \"^\" : return OperatorKind.XOR;\r\n case \"==\" : return OperatorKind.EQ;\r\n case \"!=\" : return OperatorKind.NE;\r\n case \">\" : return OperatorKind.GT;\r\n case \">=\" : return OperatorKind.GE;\r\n case \"<\" : return OperatorKind.LT;\r\n case \"<=\" : return OperatorKind.LE;\r\n }\r\n return OperatorKind.INVALID;\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 elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** ArrayBufferView prototype reference. */\r\n arrayBufferViewPrototype: InterfacePrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n resolvedThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n resolvedElementExpression : Expression | null = null;\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 /** Gets a source by its exact path. */\r\n getSource(normalizedPath: string): Source | null {\r\n var sources = this.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == normalizedPath) return source;\r\n }\r\n return null;\r\n }\r\n\r\n /** Looks up the source for the specified possibly ambiguous path. */\r\n lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null {\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource(LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(LIBRARY_PREFIX + normalizedPathWithoutExtension + \"/index.ts\")\r\n );\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 this.typesLookup = 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 queuedExtends = new Array();\r\n var queuedImplements = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedExtends, queuedImplements);\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(statement, queuedExports);\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(statement, queuedExports, queuedImports);\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(statement, queuedExtends, queuedImplements);\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\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let element = this.tryResolveImport(queuedImport.referencedName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports)) {\r\n this.elementsLookup.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 (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.fileLevelExports.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 ((queuedExport.member.parent).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.elementsLookup.get(currentExport.referencedName)) ||\r\n // library re-export\r\n (element = this.elementsLookup.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 (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = this.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n var globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!alias.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n\r\n // register 'Array'\r\n var arrayPrototype = this.elementsLookup.get(\"Array\");\r\n if (arrayPrototype) {\r\n assert(arrayPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = arrayPrototype;\r\n }\r\n\r\n // register 'ArrayBufferView'\r\n var arrayBufferViewPrototype = this.elementsLookup.get(\"ArrayBufferView\");\r\n if (arrayBufferViewPrototype) {\r\n assert(arrayBufferViewPrototype.kind == ElementKind.INTERFACE_PROTOTYPE);\r\n this.arrayBufferViewPrototype = arrayBufferViewPrototype;\r\n }\r\n\r\n // register 'String'\r\n var stringPrototype = this.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = (stringPrototype).resolve(null); // reports\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\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 var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(referencedName)) return element;\r\n let 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.elementsLookup.get(queuedExport.referencedName);\r\n } while (true);\r\n }\r\n\r\n private filterDecorators(decorators: DecoratorNode[], acceptedFlags: DecoratorFlags): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.name.kind == NodeKind.IDENTIFIER) {\r\n let name = (decorator.name).text;\r\n let kind = stringToDecoratorKind(name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, name\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, name\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Processes global options, if present. */\r\n private checkGlobalOptions(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\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.elementsLookup.set(globalName, element);\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\r\n }\r\n }\r\n\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.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 decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.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(simpleName)) {\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(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\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\r\n this.checkGlobalOptions(prototype, declaration);\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 var decorators = declaration.decorators;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (this.elementsLookup.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 let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\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 let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.filterDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n // TBD: no need to mark as MODULE_EXPORT\r\n }\r\n }\r\n\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.OPERATOR |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.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(simpleName)) {\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 simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\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 simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\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(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\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 (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == DecoratorKind.OPERATOR) {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromString((firstArg).value);\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\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 }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\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 ) != null\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 simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.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 let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\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 } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\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 let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\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(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\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.elementsLookup.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 simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\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(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, element);\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobalOptions(element, declaration);\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 if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\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 (let 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.fileLevelExports.set(name, element);\r\n if (identifier.range.source.isLibrary) { // add global alias\r\n if (this.elementsLookup.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.elementsLookup.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.fileLevelExports.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.elementsLookup.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.elementsLookup.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 let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.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.elementsLookup.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.elementsLookup.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 simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\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(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.parent = namespace;\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\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 (let 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) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.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.elementsLookup.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.fileLevelExports.get(referencedName)) {\r\n this.elementsLookup.set(internalName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const 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.elementsLookup.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 decorators = declaration.decorators;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\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 if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let 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 if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\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 this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobalOptions(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\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(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 namespace.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, namespace);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, 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], queuedExtends, queuedImplements, 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\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.typesLookup.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 var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, 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 (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.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 let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\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(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.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.fileLevelExports.set(internalName, global);\r\n }\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.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 global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, global);\r\n }\r\n }\r\n this.checkGlobalOptions(global, declaration);\r\n }\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(\r\n explicitThisType,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameterTypes;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(\r\n returnTypeNode,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportNotFound);\r\n if (!signature) return null;\r\n return Type.u32.asFunction(signature);\r\n }\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName;\r\n\r\n var element: Element | null;\r\n\r\n // check file-global / program-global element\r\n if ((element = this.elementsLookup.get(localName)) || (element = this.elementsLookup.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = (element).resolveUsingTypeArguments(\r\n typeNode.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\r\n // check (global) type alias\r\n var alias = this.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportNotFound);\r\n\r\n // resolve parameters\r\n if (typeNode.typeArguments) {\r\n let k = typeNode.typeArguments.length;\r\n let paramTypes = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeNode.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 let 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 let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\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.typesLookup.get(localName)) || (type = this.typesLookup.get(globalName))) {\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 typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | 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 (let i = 0; i < parameterCount; ++i) {\r\n let 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 ): Element | 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 this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // ENUMVALUE\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 this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // LOCAL\r\n }\r\n\r\n // check outer scope locals\r\n // let outerScope = contextualFunction.outerScope;\r\n // while (outerScope) {\r\n // if (element = outerScope.getScopedLocal(name)) {\r\n // let scopedLocal = element;\r\n // let scopedGlobal = scopedLocal.scopedGlobal;\r\n // if (!scopedGlobal) scopedGlobal = outerScope.addScopedGlobal(scopedLocal);\r\n // if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n // return resolvedElement.set(scopedGlobal);\r\n // }\r\n // outerScope = outerScope.currentFunction.outerScope;\r\n // }\r\n\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.parent) {\r\n do {\r\n if (element = this.elementsLookup.get(namespace.internalName + STATIC_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // LOCAL\r\n }\r\n } while (namespace = namespace.parent);\r\n }\r\n }\r\n\r\n // search current file\r\n if (element = this.elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = this.elementsLookup.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\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 ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\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\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let classReference = (target).type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n let classReference = getter.signature.returnType.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, getter.signature.returnType.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolvedElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\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 let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if 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 // traverse inherited instance members on the base class if 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 let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n break;\r\n }\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(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType((expression).toType); // reports\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\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 (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\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.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.resolvedThisExpression = expression;\r\n this.resolvedElementExpression = null;\r\n return this.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (target).resolveUsingTypeArguments( // reports\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\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 targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n break;\r\n }\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/** 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 FunctionTarget}. */\r\n FUNCTION_TARGET,\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 a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is an operator overload. */\r\n OPERATOR = 1 << 1,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 2,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 3,\r\n /** Is always inlined. */\r\n INLINE = 1 << 4\r\n}\r\n\r\nexport function decoratorKindToFlag(kind: DecoratorKind): DecoratorFlags {\r\n switch (kind) {\r\n case DecoratorKind.GLOBAL: return DecoratorFlags.GLOBAL;\r\n case DecoratorKind.OPERATOR: return DecoratorFlags.OPERATOR;\r\n case DecoratorKind.UNMANAGED: return DecoratorFlags.UNMANAGED;\r\n case DecoratorKind.SEALED: return DecoratorFlags.SEALED;\r\n case DecoratorKind.INLINE: return DecoratorFlags.INLINE;\r\n default: return DecoratorFlags.NONE;\r\n }\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 /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n /** Decorator flags indicating annotated traits. */\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent element, if applicable. */\r\n parent: 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: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this element has any of the specified flags. */\r\n isAny(flags: CommonFlags): bool { return (this.flags & flags) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n /** Tests if this element has a specific decorator flag or flags. */\r\n hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == 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 this.flags = declaration.flags;\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 this.flags = declaration.flags;\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 /** 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.parent = 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 | null;\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 protected constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.type = type;\r\n this.declaration = declaration;\r\n }\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(CommonFlags.CONST | CommonFlags.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(CommonFlags.CONST | CommonFlags.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 type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\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 /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\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. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\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 decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\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 var isInstance = this.is(CommonFlags.INSTANCE);\r\n var classPrototype = this.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = assert(classPrototype).resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameterTypes;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (this.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (this.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n this,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves this prototype partially by applying the specified inherited class type arguments. */\r\n resolvePartial(classTypeArguments: Type[] | null): FunctionPrototype | null {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(this.classPrototype);\r\n\r\n if (!(classTypeArguments && classTypeArguments.length)) return this; // no need to clone\r\n\r\n var simpleName = this.simpleName;\r\n var partialKey = typesToString(classTypeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n this.declaration,\r\n classPrototype,\r\n this.decoratorFlags\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.operatorKind = this.operatorKind;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | 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(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments( // reports\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 /** Resolves the type arguments to use when compiling a built-in call. Must be a built-in. */\r\n resolveBuiltinTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null\r\n ): Type[] | null {\r\n assert(this.is(CommonFlags.BUILTIN));\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (typeArgumentNodes) {\r\n let k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let resolvedType = this.program.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return null;\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n return resolvedTypeArguments;\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 /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\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[] = [];\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 /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\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, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\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 declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\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, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\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, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\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) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\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 let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let 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\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\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 this.flags = declaration.flags;\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(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\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 /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null\r\n ): 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 (let [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 let baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\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.hasDecorator(DecoratorFlags.SEALED)) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != this.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_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 simpleName = this.simpleName;\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, 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 (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n // Resolve constructor\r\n if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n\r\n // Resolve instance members\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let 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 let fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (fieldType) {\r\n let fieldInstance = new Field(\r\n member,\r\n internalName + INSTANCE_DELIMITER + (member).simpleName,\r\n fieldType,\r\n fieldDeclaration,\r\n instance\r\n );\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: {\r\n if (memoryOffset & 1) ++memoryOffset;\r\n break;\r\n }\r\n case 4: {\r\n if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n }\r\n case 8: {\r\n if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n }\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\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (partialPrototype) {\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n }\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype);\r\n let setterPrototype = (member).setterPrototype;\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n this\r\n );\r\n let partialGetterPrototype = getterPrototype.resolvePartial(typeArguments);\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName\r\n );\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = setterPrototype.resolvePartial(typeArguments);\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName\r\n );\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, prototype] of this.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (prototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = prototype.resolvePartial(typeArguments); // reports\r\n if (!operatorPartial) continue;\r\n operatorInstance = operatorPartial.resolve(); // reports\r\n } else {\r\n operatorInstance = prototype.resolve(); // reports\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n\r\n instance.currentMemoryOffset = memoryOffset; // offsetof() is the class' byte size in memory\r\n return instance;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | 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(CommonFlags.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 /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\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 let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\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 let 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 if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.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 decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\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 simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, 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\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always throws. */\r\n THROWS = 1 << 1,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 2,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 3,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 4,\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 5,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 6,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 7,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 8,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 9,\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 10,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 11,\r\n /** This branch returns a properly wrapped value. */\r\n RETURNS_WRAPPED = 1 << 12\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 /** The label we break to when encountering a return statement, when inlining. */\r\n returnLabel: string | null;\r\n /** The current return type. */\r\n returnType: Type;\r\n /** The current contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Scoped local variables. */\r\n scopedLocals: Map | null = null;\r\n /** Local variable wrap states for the first 64 locals. */\r\n wrappedLocals: I64;\r\n /** Local variable wrap states for locals with index >= 64. */\r\n wrappedLocalsExt: I64[] | 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 parentFlow.returnLabel = null;\r\n parentFlow.returnType = currentFunction.signature.returnType;\r\n parentFlow.contextualTypeArguments = currentFunction.contextualTypeArguments;\r\n parentFlow.wrappedLocals = i64_new(0);\r\n parentFlow.wrappedLocalsExt = 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 /** Tests if this flow has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets the specified flag or flags. */\r\n set(flag: FlowFlags): void { this.flags |= flag; }\r\n /** Unsets the specified flag or flags. */\r\n unset(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 branch = new Flow();\r\n branch.parent = this;\r\n branch.flags = this.flags;\r\n branch.currentFunction = this.currentFunction;\r\n branch.continueLabel = this.continueLabel;\r\n branch.breakLabel = this.breakLabel;\r\n branch.returnLabel = this.returnLabel;\r\n branch.returnType = this.returnType;\r\n branch.contextualTypeArguments = this.contextualTypeArguments;\r\n branch.wrappedLocals = this.wrappedLocals;\r\n branch.wrappedLocalsExt = this.wrappedLocalsExt ? this.wrappedLocalsExt.slice() : null;\r\n return branch;\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 (let scopedLocal of this.scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n this.scopedLocals = null;\r\n }\r\n\r\n // Propagate conditionaal flags to parent\r\n if (this.is(FlowFlags.RETURNS)) {\r\n parent.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (this.is(FlowFlags.THROWS)) {\r\n parent.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (this.is(FlowFlags.BREAKS) && parent.breakLabel == this.breakLabel) {\r\n parent.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (this.is(FlowFlags.CONTINUES) && parent.continueLabel == this.continueLabel) {\r\n parent.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (this.is(FlowFlags.ALLOCATES)) {\r\n parent.set(FlowFlags.CONDITIONALLY_ALLOCATES);\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(type: Type, name: string, wrapped: bool, declaration?: VariableDeclaration): Local {\r\n var scopedLocal = this.currentFunction.getTempLocal(type, false);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n scopedLocal.set(CommonFlags.SCOPED);\r\n this.scopedLocals.set(name, scopedLocal);\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.setLocalWrapped(scopedLocal.index, wrapped);\r\n }\r\n return scopedLocal;\r\n }\r\n\r\n /** Adds a new scoped alias for the specified local. */\r\n addScopedLocalAlias(index: i32, type: Type, name: string): Local {\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n let declaration = existingLocal.declaration;\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n assert(index < this.currentFunction.localsByIndex.length);\r\n var scopedAlias = new Local( // not SCOPED as an indicator that it isn't automatically free'd\r\n this.currentFunction.program,\r\n name,\r\n index,\r\n type,\r\n null\r\n );\r\n this.scopedLocals.set(name, scopedAlias);\r\n return scopedAlias;\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.localsByName.get(name);\r\n }\r\n\r\n /** Tests if the local with the specified index is considered wrapped. */\r\n isLocalWrapped(index: i32): bool {\r\n var map: I64;\r\n var ext: I64[] | null;\r\n if (index < 64) {\r\n if (index < 0) return true; // inlined constant\r\n map = this.wrappedLocals;\r\n } else if (ext = this.wrappedLocalsExt) {\r\n let i = ((index - 64) / 64) | 0;\r\n if (i >= ext.length) return false;\r\n map = ext[i];\r\n index -= (i + 1) * 64;\r\n } else {\r\n return false;\r\n }\r\n return i64_ne(\r\n i64_and(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n ),\r\n i64_zero\r\n );\r\n }\r\n\r\n /** Sets if the local with the specified index is considered wrapped. */\r\n setLocalWrapped(index: i32, wrapped: bool): void {\r\n var map: I64;\r\n var off: i32 = -1;\r\n if (index < 64) {\r\n if (index < 0) return; // inlined constant\r\n map = this.wrappedLocals;\r\n } else {\r\n let ext = this.wrappedLocalsExt;\r\n off = ((index - 64) / 64) | 0;\r\n if (!ext) {\r\n this.wrappedLocalsExt = ext = new Array(off + 1);\r\n ext.length = 0;\r\n }\r\n while (ext.length <= off) ext.push(i64_new(0));\r\n map = ext[off];\r\n index -= (off + 1) * 64;\r\n }\r\n map = wrapped\r\n ? i64_or(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n : i64_and(\r\n map,\r\n i64_not(\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n );\r\n if (off >= 0) (this.wrappedLocalsExt)[off] = map;\r\n else this.wrappedLocals = map;\r\n }\r\n\r\n /** Inherits flags and local wrap states from the specified flow (e.g. on inner block). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (\r\n FlowFlags.RETURNS |\r\n FlowFlags.RETURNS_WRAPPED |\r\n FlowFlags.THROWS |\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.ALLOCATES\r\n );\r\n this.wrappedLocals = other.wrappedLocals;\r\n this.wrappedLocalsExt = other.wrappedLocalsExt; // no need to slice because other flow is finished\r\n }\r\n\r\n /** Inherits mutual flags and local wrap states from the specified flows (e.g. on then/else branches). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // flags set in both arms\r\n this.flags |= left.flags & right.flags & (\r\n FlowFlags.RETURNS |\r\n FlowFlags.RETURNS_WRAPPED |\r\n FlowFlags.THROWS |\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.ALLOCATES\r\n );\r\n // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(\r\n left.wrappedLocals,\r\n right.wrappedLocals\r\n );\r\n var leftExt = left.wrappedLocalsExt;\r\n var rightExt = right.wrappedLocalsExt;\r\n if (leftExt != null && rightExt != null) {\r\n let thisExt = this.wrappedLocalsExt;\r\n let minLength = min(leftExt.length, rightExt.length);\r\n if (minLength) {\r\n if (!thisExt) thisExt = new Array(minLength);\r\n else while (thisExt.length < minLength) thisExt.push(i64_new(0));\r\n for (let i = 0; i < minLength; ++i) {\r\n thisExt[i] = i64_and(\r\n leftExt[i],\r\n rightExt[i]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Tests if an expression can possibly overflow in the context of this flow. Assumes that the\r\n * expression might already have overflown and returns `false` only if the operation neglects\r\n * any possibly combination of garbage bits being present.\r\n */\r\n canOverflow(expr: ExpressionRef, type: Type): bool {\r\n // TODO: the following catches most common and a few uncommon cases, but there are additional\r\n // opportunities here, obviously.\r\n assert(type != Type.void);\r\n\r\n // types other than i8, u8, i16, u16 and bool do not overflow\r\n if (!type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) return false;\r\n\r\n var operand: ExpressionRef;\r\n switch (getExpressionId(expr)) {\r\n\r\n // overflows if the local isn't wrapped or the conversion does\r\n case ExpressionId.GetLocal: {\r\n let currentFunction = this.currentFunction;\r\n let local = currentFunction.localsByIndex[getGetLocalIndex(expr)];\r\n return !currentFunction.flow.isLocalWrapped(local.index)\r\n || canConversionOverflow(local.type, type);\r\n }\r\n\r\n // overflows if the value does\r\n case ExpressionId.SetLocal: {\r\n assert(isTeeLocal(expr));\r\n return this.canOverflow(getSetLocalValue(expr), type);\r\n }\r\n\r\n // never overflows because globals are wrapped on set\r\n case ExpressionId.GetGlobal: return false;\r\n\r\n case ExpressionId.Binary: {\r\n switch (getBinaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtU32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtU64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeU32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeU64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtU32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtU64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeU32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeU64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: return false;\r\n\r\n // result won't overflow if one side is 0 or if one side is 1 and the other wrapped\r\n case BinaryOp.MulI32: {\r\n return !(\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryRight(expr), type)\r\n )\r\n )\r\n ) || (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryLeft(expr), type)\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n // result won't overflow if one side is a constant less than this type's mask or one side\r\n // is wrapped\r\n case BinaryOp.AndI32: {\r\n // note that computeSmallIntegerMask returns the mask minus the MSB for signed types\r\n // because signed value garbage bits must be guaranteed to be equal to the MSB.\r\n return !(\r\n (\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n ) || (\r\n (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n )\r\n );\r\n }\r\n\r\n // overflows if the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShlI32: {\r\n let shift = 32 - type.size;\r\n return getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const\r\n || getConstValueI32(operand) < shift;\r\n }\r\n\r\n // overflows if the value does and the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShrI32: {\r\n let shift = 32 - type.size;\r\n return this.canOverflow(getBinaryLeft(expr), type) && (\r\n getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const ||\r\n getConstValueI32(operand) < shift\r\n );\r\n }\r\n\r\n // overflows if the shift does not clear potential garbage bits. if an unsigned value is\r\n // wrapped, it can't overflow.\r\n case BinaryOp.ShrU32: {\r\n let shift = 32 - type.size;\r\n return type.is(TypeFlags.SIGNED)\r\n ? !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) > shift // must clear MSB\r\n )\r\n : this.canOverflow(getBinaryLeft(expr), type) && !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) >= shift // can leave MSB\r\n );\r\n }\r\n\r\n // overflows if any side does\r\n case BinaryOp.DivU32:\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemU32: {\r\n return this.canOverflow(getBinaryLeft(expr), type)\r\n || this.canOverflow(getBinaryRight(expr), type);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: return false;\r\n\r\n // overflow if the maximum result (32) cannot be represented in the target type\r\n case UnaryOp.ClzI32:\r\n case UnaryOp.CtzI32:\r\n case UnaryOp.PopcntI32: return type.size < 7;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the value cannot be represented in the target type\r\n case ExpressionId.Const: {\r\n let value: i32 = 0;\r\n switch (getExpressionType(expr)) {\r\n case NativeType.I32: { value = getConstValueI32(expr); break; }\r\n case NativeType.I64: { value = getConstValueI64Low(expr); break; } // discards upper bits\r\n case NativeType.F32: { value = i32(getConstValueF32(expr)); break; }\r\n case NativeType.F64: { value = i32(getConstValueF64(expr)); break; }\r\n default: assert(false);\r\n }\r\n switch (type.kind) {\r\n case TypeKind.I8: return value < i8.MIN_VALUE || value > i8.MAX_VALUE;\r\n case TypeKind.I16: return value < i16.MIN_VALUE || value > i16.MAX_VALUE;\r\n case TypeKind.U8: return value < 0 || value > u8.MAX_VALUE;\r\n case TypeKind.U16: return value < 0 || value > u16.MAX_VALUE;\r\n case TypeKind.BOOL: return (value & ~1) != 0;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the conversion does\r\n case ExpressionId.Load: {\r\n let fromType: Type;\r\n switch (getLoadBytes(expr)) {\r\n case 1: { fromType = isLoadSigned(expr) ? Type.i8 : Type.u8; break; }\r\n case 2: { fromType = isLoadSigned(expr) ? Type.i16 : Type.u16; break; }\r\n default: { fromType = isLoadSigned(expr) ? Type.i32 : Type.u32; break; }\r\n }\r\n return canConversionOverflow(fromType, type);\r\n }\r\n\r\n // overflows if the result does, which is either\r\n // - the last expression of the block, by contract, if the block doesn't have a label\r\n // - the last expression or the value of an inner br if the block has a label (TODO)\r\n case ExpressionId.Block: {\r\n if (!getBlockName(expr)) {\r\n let size = assert(getBlockChildCount(expr));\r\n let last = getBlockChild(expr, size - 1);\r\n return this.canOverflow(last, type);\r\n }\r\n // actually, brs with a value that'd be handled here is not emitted atm\r\n break;\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.If: {\r\n return this.canOverflow(getIfTrue(expr), type)\r\n || this.canOverflow(assert(getIfFalse(expr)), type);\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.Select: {\r\n return this.canOverflow(getSelectThen(expr), type)\r\n || this.canOverflow(getSelectElse(expr), type);\r\n }\r\n\r\n // overflows if the call does not return a wrapped value or the conversion does\r\n case ExpressionId.Call: {\r\n let program = this.currentFunction.program;\r\n let instance = assert(program.instancesLookup.get(assert(getCallTarget(expr))));\r\n assert(instance.kind == ElementKind.FUNCTION);\r\n let returnType = (instance).signature.returnType;\r\n return !(instance).flow.is(FlowFlags.RETURNS_WRAPPED)\r\n || canConversionOverflow(returnType, type);\r\n }\r\n\r\n // doesn't technically overflow\r\n case ExpressionId.Unreachable: return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): void {\r\n assert(this.parent == null); // must be the topmost parent flow\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n this.returnLabel = null;\r\n this.contextualTypeArguments = null;\r\n }\r\n}\r\n\r\n/** Tests if a conversion from one type to another can technically overflow. */\r\nfunction canConversionOverflow(fromType: Type, toType: Type): bool {\r\n var fromSize = fromType.byteSize;\r\n var toSize = toType.byteSize;\r\n return !fromType.is(TypeFlags.INTEGER) // non-i32 locals or returns\r\n || fromSize > toSize\r\n || fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED);\r\n}\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\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\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\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: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private 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 /** Creates a new diagnostic message of the specified category. */\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 /** Creates a new informatory diagnostic message. */\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 /** Creates a new warning diagnostic message. */\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 /** Creates a new error diagnostic message. */\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 /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\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.line.toString(10) +\r\n \":\" +\r\n this.range.column.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\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\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(COLOR_RESET);\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 // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\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\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\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))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\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(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\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 ): void {\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 /** Emits an informatory diagnostic message. */\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 /** Emits a warning diagnostic message. */\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 /** Emits an error diagnostic message. */\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","/**\r\n * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\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/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\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): MemorySegment {\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\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = 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 let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = 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[] | null\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 ? paramTypes.length : 0);\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[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\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.cachedByValue;\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.cachedByValue;\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.cachedByValue;\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 = allocPtrArray(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 = allocPtrArray(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 numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++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, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 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 = allocPtrArray(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 = allocPtrArray(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 createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\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[] | null,\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 ? varTypes.length : 0, 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 private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\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 (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let 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 (let 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 = allocPtrArray(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 numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++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, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\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): BinaryModule {\r\n var out = this.cachedByValue;\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 let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\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 assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n 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 case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\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 let 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 (\r\n _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 }\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 }\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\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\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 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// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\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 numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++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 (let i = 0, k = i32s.length; i < k; ++i) {\r\n let 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 allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let 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 // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let 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\nfunction 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\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let 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 arr.push(cp);\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\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\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 normalizePath,\r\n resolvePath\r\n} from \"./util\";\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 PARAMETER,\r\n SIGNATURE,\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 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 VOID,\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 // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\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 /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\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 = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\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: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\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 createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameterTypes = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n expression: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\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 stmt.decoratorKind = expression.kind == NodeKind.IDENTIFIER\r\n ? stringToDecoratorKind((expression).text)\r\n : DecoratorKind.CUSTOM;\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\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 createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\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; setParentIfNotNull(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: CommonTypeNode,\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: CommonTypeNode[] | 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 ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\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: CommonTypeNode[] | 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: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\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; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, 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 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 decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, 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 flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\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 flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let 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 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 in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\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 typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\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.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 createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = 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: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, 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 typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = 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 decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, 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: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\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.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\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\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode 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; // can't be a function\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 ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameterTypes: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE\r\n}\r\n\r\n/** Returns the decorator kind represented by the specified string. */\r\nexport function stringToDecoratorKind(str: string): DecoratorKind {\r\n switch (str) {\r\n case \"global\": return DecoratorKind.GLOBAL;\r\n case \"operator\": return DecoratorKind.OPERATOR;\r\n case \"unmanaged\": return DecoratorKind.UNMANAGED;\r\n case \"sealed\": return DecoratorKind.SEALED;\r\n case \"inline\": return DecoratorKind.INLINE;\r\n default: return DecoratorKind.CUSTOM;\r\n }\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\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 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 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: CommonTypeNode;\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: CommonTypeNode[] | 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 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/** 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 decorators. */\r\n decorators: DecoratorNode[] | 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 this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\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: CommonTypeNode | 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: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\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/** 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 // 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 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 /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\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 /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && 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\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 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 parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\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\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 decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\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/** Tests if a specific decorator is present within the specified decorators. */\r\nexport function hasDecorator(name: string, decorators: DecoratorNode[] | null): bool {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let expression = decorators[i].name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\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 declaration.is(CommonFlags.STATIC)\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\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\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","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\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 CommentKind\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\";\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 enum IdentifierHandling {\r\n DEFAULT,\r\n PREFER,\r\n ALWAYS\r\n}\r\n\r\nexport function tokenFromKeyword(text: string): Token {\r\n switch (text.length && text.charCodeAt(0)) {\r\n case CharCode.a: {\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 }\r\n break;\r\n }\r\n case CharCode.b: {\r\n switch (text) {\r\n case \"break\": return Token.BREAK;\r\n }\r\n break;\r\n }\r\n case CharCode.c: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.d: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.e: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.f: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.g: {\r\n switch (text) {\r\n case \"get\": return Token.GET;\r\n }\r\n break;\r\n }\r\n case CharCode.i: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.k: {\r\n switch (text) {\r\n case \"keyof\": return Token.KEYOF;\r\n }\r\n break;\r\n }\r\n case CharCode.l: {\r\n switch (text) {\r\n case \"let\": return Token.LET;\r\n }\r\n break;\r\n }\r\n case CharCode.m: {\r\n switch (text) {\r\n case \"module\": return Token.MODULE;\r\n }\r\n break;\r\n }\r\n case CharCode.n: {\r\n switch (text) {\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n }\r\n break;\r\n }\r\n case CharCode.o: {\r\n switch (text) {\r\n case \"of\": return Token.OF;\r\n }\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.r: {\r\n switch (text) {\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n }\r\n break;\r\n }\r\n case CharCode.s: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.t: {\r\n switch (text) {\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 }\r\n break;\r\n }\r\n case CharCode.v: {\r\n switch (text) {\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n }\r\n break;\r\n }\r\n case CharCode.w: {\r\n switch (text) {\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n }\r\n break;\r\n }\r\n case CharCode.y: {\r\n switch (text) {\r\n case \"yield\": return Token.YIELD;\r\n }\r\n break;\r\n }\r\n }\r\n return Token.INVALID;\r\n}\r\n\r\nexport function tokenIsAlsoIdentifier(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: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(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: {\r\n assert(false);\r\n 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 line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\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 column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\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\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\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 nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\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(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\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 let commentStartPos = this.pos;\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 let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let 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 } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\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 let 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 let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\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 }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\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 let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\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 skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): 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 }\r\n this.token = this.unsafeNext(identifierHandling, 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 mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\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 let 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 case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\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 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: return \"\";\r\n default: 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 let 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 let 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 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 }\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: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let 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 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 }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let 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 let 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 let 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 let 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 let 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 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 // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): 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 let 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 readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\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 let 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\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\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\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\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 pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is 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. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\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.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the int type of this type. Defaults to `Type.i32` if this is not an int type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.I64:\r\n case TypeKind.ISIZE:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.USIZE: return this;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\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 var size = this.is(TypeFlags.UNSIGNED) ? this.size : this.size - 1;\r\n return ~0 >>> (targetType.size - size);\r\n }\r\n\r\n /** Tests if this type has (all of) the specified flags. */\r\n is(flags: TypeFlags): bool { return (this.flags & flags) == flags; }\r\n /** Tests if this type has any of the specified flags. */\r\n isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; }\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.classReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classReference = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(signature: Signature): Type {\r\n assert(this.kind == TypeKind.U32 && !this.signatureReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.signatureReference = signature;\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.is(TypeFlags.REFERENCE));\r\n if (!this.cachedNullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.cachedNullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.cachedNullableType.classReference = this.classReference; // either a class reference\r\n this.cachedNullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.cachedNullableType;\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: Signature | null;\r\n var targetFunction: Signature | null;\r\n if (this.is(TypeFlags.REFERENCE)) {\r\n if (target.is(TypeFlags.REFERENCE)) {\r\n if (currentClass = this.classReference) {\r\n if (targetClass = target.classReference) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.signatureReference) {\r\n if (targetFunction = target.signatureReference) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n } else if (!target.is(TypeFlags.REFERENCE)) {\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)) return left;\r\n else if (left.isAssignableTo(right, signednessIsImportant)) return right;\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: {\r\n let functionType = this.signatureReference;\r\n return kindOnly || !functionType ? \"u32\" : functionType.toString(true);\r\n }\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: {\r\n let classType = this.classReference;\r\n return kindOnly || !classType ? \"usize\" : classType.toString();\r\n }\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: {\r\n assert(false);\r\n return \"\";\r\n }\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 default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: 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 case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: 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 case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: 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 case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: 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 default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: 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.SHORT |\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.SHORT |\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.INTEGER |\r\n TypeFlags.POINTER |\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.INTEGER |\r\n TypeFlags.POINTER |\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.SHORT |\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.SHORT |\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.INTEGER |\r\n TypeFlags.POINTER |\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.INTEGER |\r\n TypeFlags.POINTER |\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.SHORT |\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 numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) ret[i] = types[i].toNativeType();\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 numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString();\r\n return sb.join(\",\");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters excluding `this`. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n /** Respective function type. */\r\n type: Type;\r\n\r\n /** Constructs a new signature. */\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n this.type = Type.u32.asFunction(this);\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getDefaultParameterName(index);\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: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) return false;\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) return false; // TODO\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) return false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) return false;\r\n }\r\n\r\n // check return type\r\n var thisReturnType = this.returnType;\r\n var targetReturnType = target.returnType;\r\n return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType);\r\n }\r\n\r\n /** Converts a signature to a function type string. */\r\n static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string {\r\n var sb = [];\r\n if (thisType) sb.push(thisType.toSignatureString());\r\n if (parameterTypes) {\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType);\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) sb.push((names)[i]);\r\n else sb.push(getDefaultParameterName(i));\r\n if (i >= optionalStart && i != restIndex) sb.push(\"?: \");\r\n else sb.push(\": \");\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached default parameter names used where names are unknown.\r\nvar cachedDefaultParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached default parameter name for the specified index. */\r\nexport function getDefaultParameterName(index: i32): string {\r\n if (!cachedDefaultParameterNames) cachedDefaultParameterNames = [];\r\n for (let i = cachedDefaultParameterNames.length; i <= index; ++i) {\r\n cachedDefaultParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedDefaultParameterNames[index - 1];\r\n}\r\n","/**\r\n * Generated from diagnosticsMessages.json. Do not edit.\r\n * @module diagnostics\r\n *//***/\r\n\r\n/* tslint:disable:max-line-length */\r\n\r\n/** Enum of available diagnostic codes. */\r\nexport enum DiagnosticCode {\r\n Operation_not_supported = 100,\r\n Operation_is_unsafe = 101,\r\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\r\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\r\n Type_0_cannot_be_changed_to_type_1 = 202,\r\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\r\n Basic_type_0_cannot_be_nullable = 204,\r\n Cannot_export_a_mutable_global = 205,\r\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\r\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\r\n Unmanaged_classes_cannot_implement_interfaces = 208,\r\n Invalid_regular_expression_flags = 209,\r\n Implementation_0_must_match_the_signature_1 = 210,\r\n Class_0_is_sealed_and_cannot_be_extended = 211,\r\n Decorator_0_is_not_valid_here = 212,\r\n Duplicate_decorator = 213,\r\n Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Enum_member_must_have_initializer = 1061,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\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 \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes 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 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\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 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\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 1176: return \"Interface declaration cannot have 'implements' clause.\";\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 1317: return \"A parameter property cannot be declared using a rest parameter.\";\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 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\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\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\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 FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex\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 FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n CommonFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags,\r\n\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\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 NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\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 FieldDeclaration\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\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 /** If true, imports the function table provided by the embedder. */\r\n importTable: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: u32 = 0;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Global aliases. */\r\n globalAliases: Map | null = null;\r\n /** Additional features to activate. */\r\n features: Feature = Feature.NONE;\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 /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\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/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\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 /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Outer function in compilation, if compiling a function expression. */\r\n outerFunction: Function | null = null;\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 /** Start function being compiled. */\r\n startFunction: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[] = [];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\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 if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\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 var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(program.elementsLookup.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 new Signature([], Type.void)\r\n );\r\n this.startFunction = startFunctionInstance;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) this.compileSource(sources[i]);\r\n }\r\n\r\n // compile the start function if not empty\r\n var startFunctionBody = this.startFunctionBody;\r\n if (startFunctionBody.length) {\r\n let signature = startFunctionInstance.signature;\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n this.ensureFunctionType(\r\n signature.parameterTypes,\r\n signature.returnType,\r\n signature.thisType\r\n ),\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!options.noMemory) {\r\n let memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n let pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n module.setMemory(\r\n i64_low(pages),\r\n this.options.isWasm64\r\n ? Module.MAX_MEMORY_WASM64\r\n : Module.MAX_MEMORY_WASM32,\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n }\r\n\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunction = this.startFunction;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\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 (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\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 let 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 default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunction;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let 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_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\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 WrapMode.WRAP\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\r\n // must either be annotated or have an initializer\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 } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isConstant = global.isAny(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n module.addGlobalImport(\r\n global.internalName,\r\n global.parent\r\n ? global.parent.simpleName\r\n : \"env\",\r\n global.simpleName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // inlined constant can be compiled as-is\r\n if (global.is(CommonFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n\r\n } else {\r\n\r\n // evaluate initializer if present\r\n if (declaration && declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n // check if the initializer is constant\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n\r\n // if a constant global, check if the initializer becomes constant after precompute\r\n if (isConstant) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(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\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (isConstant) {\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(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 getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (global.is(CommonFlags.MODULE_EXPORT)) {\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n module.addGlobalExport(internalName, mangleExportName(global));\r\n } else if (declaration && declaration.isTopLevel) { // might become re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !isConstant, initExpr);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n if (val.is(CommonFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\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 = module.createI32(0);\r\n } else if (previousValue.is(CommonFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(CommonFlags.CONST)) {\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 module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (getExpressionType(initExpr) == NativeType.I32) {\r\n val.constantValue = getConstValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n val.constantValue = 0;\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.is(CommonFlags.MODULE_EXPORT)) {\r\n if (member.is(CommonFlags.INLINED) || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n module.addGlobalExport(member.internalName, mangleExportName(member));\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 /** Compiles a top-level function given its declaration. */\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 = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || instance.internalName == \"abort\");\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching but still compile as-is\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\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 }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n stmt = this.compileStatement(body);\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmt = module.createBlock(null, [\r\n stmt,\r\n module.createGetLocal(0, nativeSizeType)\r\n ], nativeSizeType);\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmt = module.createBlock(null, [\r\n stmt,\r\n module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n )\r\n ], nativeSizeType);\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n\r\n // create the function import\r\n let parent = instance.prototype.parent;\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n parent\r\n ? parent.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n }\r\n\r\n // check module-level export\r\n if (instance.is(CommonFlags.MODULE_EXPORT)) {\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // export the trampoline if the function takes optional parameters\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n module.addFunctionExport(instance.internalName, mangleExportName(instance));\r\n }\r\n\r\n instance.finalize(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 (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\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 (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\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 (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.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(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\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\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var exports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = exports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.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(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n 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 let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n 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\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 = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\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.resolveUsingTypeArguments( // 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(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\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 // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\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 /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n 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 module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunction) {\r\n return module.createNop();\r\n }\r\n // otherwise fall-through\r\n }\r\n default: {\r\n assert(false);\r\n stmt = module.createUnreachable();\r\n }\r\n }\r\n if (this.options.sourceMap) this.addDebugLocation(stmt, statement.range);\r\n return stmt;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var numStatements = statements.length;\r\n var stmts = new Array(numStatements);\r\n var count = 0;\r\n var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numStatements; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)) break;\r\n }\r\n }\r\n stmts.length = count;\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n var blockFlow = this.currentFunction.flow.enterBranchOrScope();\r\n this.currentFunction.flow = blockFlow;\r\n\r\n var stmts = this.compileStatements(statements);\r\n var stmt = stmts.length == 0\r\n ? this.module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : this.module.createBlock(null, stmts, NativeType.None);\r\n\r\n // Switch back to the parent flow\r\n var parentFlow = blockFlow.leaveBranchOrScope();\r\n this.currentFunction.flow = parentFlow;\r\n parentFlow.inherit(blockFlow);\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n var module = this.module;\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 module.createUnreachable();\r\n }\r\n var flow = this.currentFunction.flow;\r\n var breakLabel = 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 module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.BREAKS);\r\n return module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n var module = this.module;\r\n var label = statement.label;\r\n if (label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var flow = this.currentFunction.flow;\r\n var continueLabel = 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 module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.CONTINUES);\r\n return module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // TODO: check if condition is always false and if so, omit it?\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n flow.isAny(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, condExpr)\r\n ], NativeType.None)\r\n )\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, WrapMode.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 // 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 currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initExpr = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : module.createNop();\r\n var condExpr: ExpressionRef = 0;\r\n var alwaysTrue = true;\r\n if (statement.condition) {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // check if the condition is always true\r\n let condPre = this.precomputeExpressionRef(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : module.createNop();\r\n var bodyExpr = this.compileStatement(statement.statement);\r\n\r\n // Switch back to the parent flow\r\n var parentFlow = flow.leaveBranchOrScope();\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n currentFunction.flow = parentFlow;\r\n currentFunction.leaveBreakContext();\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n initExpr,\r\n module.createLoop(continueLabel, module.createBlock(null, [\r\n module.createIf(condExpr, module.createBlock(null, [\r\n bodyExpr,\r\n incrExpr,\r\n 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, append a hint for Binaryen\r\n if (flow.isAny(FlowFlags.RETURNS | FlowFlags.THROWS)) {\r\n expr = module.createBlock(null, [\r\n expr,\r\n module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var ifTrueFlow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.leaveBranchOrScope();\r\n\r\n var ifFalseFlow: Flow | null;\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n ifFalseFlow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n let parentFlow = ifFalseFlow.leaveBranchOrScope();\r\n currentFunction.flow = parentFlow;\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n }\r\n return module.createIf(condExpr, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var expr: ExpressionRef = 0;\r\n var flow = currentFunction.flow;\r\n\r\n // Remember that this flow returns\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n if (statement.value) {\r\n let returnType = flow.returnType;\r\n expr = this.compileExpression(\r\n statement.value,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n currentFunction.is(CommonFlags.MODULE_EXPORT)\r\n ? WrapMode.WRAP\r\n : WrapMode.NONE\r\n );\r\n\r\n // Remember whether returning a properly wrapped value\r\n if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n }\r\n\r\n // When inlining, break to the end of the inlined function's block (no need to wrap)\r\n return flow.is(FlowFlags.INLINE_CONTEXT)\r\n ? module.createBreak(assert(flow.returnLabel), 0, expr)\r\n : module.createReturn(expr);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32, false);\r\n var tempLocalIndex = tempLocal.index;\r\n var cases = statement.cases;\r\n var numCases = 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 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\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 (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n 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] = 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 = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n var alwaysReturnsWrapped = true;\r\n var alwaysThrows = true;\r\n var alwaysAllocates = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let fallsThrough = i != numCases - 1;\r\n let nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n let stmts = new Array(1 + numStatements);\r\n stmts[0] = currentBlock;\r\n let count = 1;\r\n for (let j = 0; j < numStatements; ++j) {\r\n let stmt = this.compileStatement(statements[j]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.is(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)) break;\r\n }\r\n }\r\n stmts.length = count;\r\n if (!(fallsThrough || flow.is(FlowFlags.RETURNS))) alwaysReturns = false; // ignore fall-throughs\r\n if (!(fallsThrough || flow.is(FlowFlags.RETURNS_WRAPPED))) alwaysReturnsWrapped = false; // ignore fall-throughs\r\n if (!(fallsThrough || flow.is(FlowFlags.THROWS))) alwaysThrows = false;\r\n if (!(fallsThrough || flow.is(FlowFlags.ALLOCATES))) alwaysAllocates = false;\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentBlock = module.createBlock(nextLabel, stmts, NativeType.None); // must be a labeled block\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0) {\r\n let flow = currentFunction.flow;\r\n if (alwaysReturns) flow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) flow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) flow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileBuiltinAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\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 program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n 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 (let i = 0; i < numDeclarations; ++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 var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = program.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE,\r\n WrapMode.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 let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = 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 this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\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 (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\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 compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = false; // CONDITION_IS_ALWAYS_TRUE && flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate if condition is always true\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n flow.isAny(FlowFlags.CONTINUES | FlowFlags.BREAKS | FlowFlags.RETURNS)\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None)\r\n )\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 = module.createBlock(null, [\r\n expr,\r\n 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(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = 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 ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let 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 ); // recognized by canOverflow\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.F64: {\r\n if (!(element.is(CommonFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\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);\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 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.SUPER:\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);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\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 wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\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 wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> 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 module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) {\r\n return 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 ); // recoverable\r\n }\r\n\r\n // TODO: make this a proper switch?\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 = 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 = 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 = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\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 = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\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 = 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 = 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 = 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 = 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 = 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 // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : 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.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\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 = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\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 = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\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 = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\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 = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\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 leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n if (operator == Token.EQUALS_EQUALS) { // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\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 = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n if (operator == Token.EXCLAMATION_EQUALS) { // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\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 = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\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 case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = (prototype).resolve();\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = (prototype).resolve();\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\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 case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.WRAP); // !\r\n leftType = this.currentType; // ^ must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.WRAP);\r\n leftType = this.currentType; // ^ clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: operator overload?\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\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.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\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 expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\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 module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\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 expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\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 leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n // checks and recompiles the argument according to its actual annotated type\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = this.compileExpression(value, (parent).type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ];\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n // checks and recompiles the arguments according to their actual annotated types\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = this.compileExpression(left, (parent).type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ];\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var target = program.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var elementType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n elementType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prototype = (target).setterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n elementType = instance.signature.parameterTypes[0];\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, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (program.resolvedElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n elementType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\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\r\n // compile the value and do the assignment\r\n var valueExpr = this.compileExpression(valueExpression, elementType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\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 module = this.module;\r\n var target = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\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, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\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 target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\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, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = (getterPrototype).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\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, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.program.resolvedElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameterTypes;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameterTypes[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.program.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n true\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = prototype.resolve(\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = prototype.resolve(\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.program.resolvedThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n break;\r\n } else {\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, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\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, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\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, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n ),\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 /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0,\r\n inline: bool = false\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // Inline if explicitly requested\r\n if (inline) {\r\n assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense\r\n return this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.parameterTypes[i].initializer),\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(initExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, initExpr)\r\n );\r\n }\r\n\r\n // Compile the called function's body in the scope of the inlined flow\r\n var bodyStatement = assert(declaration.body);\r\n if (bodyStatement.kind == NodeKind.BLOCK) {\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n body.push(stmt);\r\n if (flow.is(FlowFlags.RETURNS)) break;\r\n }\r\n }\r\n } else {\r\n body.push(this.compileStatement(bodyStatement));\r\n }\r\n\r\n // Free any new scoped locals and reset to the original flow\r\n var scopedLocals = flow.scopedLocals;\r\n if (scopedLocals) {\r\n for (let scopedLocal of scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n flow.scopedLocals = null;\r\n }\r\n flow.finalize();\r\n this.currentFunction.flow = previousFlow;\r\n this.currentType = returnType;\r\n\r\n // Check that all branches return\r\n if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return module.createBlock(returnLabel, body, returnType.toNativeType());\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameterTypes;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"oob\", [\r\n module.createSwitch(names, \"oob\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n assert(originalParameterDeclarations[minArguments + i].initializer),\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n )\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameterTypes;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = assert(parameterNodes[i].initializer);\r\n if (initializer.kind != NodeKind.LITERAL) {\r\n // TODO: other kinds might be constant as well\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\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 target = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\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\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\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.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : 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 var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.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.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\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.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.program.resolveIdentifier( // reports\r\n expression,\r\n currentFunction,\r\n this.currentEnum\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localType = (target).type;\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.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 ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = (target).resolve(\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\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\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let 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)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n if (i64_is_i32(intValue) || i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue) || i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return 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_i32(intValue) || i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\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 module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return 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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let 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 (let 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, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = (arrayPrototype).resolve([ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\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 return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance = classPrototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the first matching constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance = classInstance.constructorInstance;\r\n while (!constructorInstance && (currentClassInstance = classInstance.base)) {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n }\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\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 program = this.program;\r\n var module = this.module;\r\n\r\n var target = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (target).getterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(null); // reports\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, thisExpr);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var ifThen = expression.ifThen;\r\n var ifElse = expression.ifElse;\r\n var currentFunction = this.currentFunction;\r\n\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenExpr: ExpressionRef;\r\n var ifElseExpr: ExpressionRef;\r\n var ifThenType: Type;\r\n var ifElseType: Type;\r\n\r\n // if part of a constructor, keep track of memory allocations\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n let flow = currentFunction.flow;\r\n\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n ifThenType = this.currentType;\r\n let ifThenAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n ifElseType = this.currentType;\r\n let ifElseAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n if (ifThenAllocates && ifElseAllocates) flow.set(FlowFlags.ALLOCATES);\r\n\r\n // otherwise simplify\r\n } else {\r\n ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n ifThenType = this.currentType;\r\n ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n ifElseType = this.currentType;\r\n }\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) {\r\n // shortcut if compiling the getter already failed\r\n return getValue;\r\n }\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (currentType.kind) {\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 op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(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 = 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 = 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 = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (currentType.kind) {\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 op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(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 = 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 = 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 = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\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 WrapMode.NONE\r\n );\r\n switch (this.currentType.kind) {\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 = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 WrapMode.NONE\r\n );\r\n switch (this.currentType.kind) {\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 = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 WrapMode.NONE\r\n );\r\n switch (this.currentType.kind) {\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 = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\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 WrapMode.NONE\r\n );\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 WrapMode.NONE\r\n );\r\n switch (this.currentType.kind) {\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 = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\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 return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\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 /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : 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 }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : 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 }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\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 expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\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 expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileBuiltinAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, simpleName: string = element.simpleName): string {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION: {\r\n let parent = (element).parent || (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName\r\n : simpleName;\r\n }\r\n case ElementKind.FIELD: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.CLASS: {\r\n let parent = (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n default: {\r\n let parent = element.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n }\r\n}\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n Program,\r\n CommonFlags,\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 CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\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 DecoratorNode,\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 NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath\r\n} from \"./ast\";\r\n\r\nconst builtinsFile = LIBRARY_PREFIX + \"builtins.ts\";\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 /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\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 var program = this.program;\r\n\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].internalPath == internalPath) return;\r\n }\r\n this.seenlog.add(internalPath);\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 sources.push(source);\r\n\r\n // mark the special builtins library file\r\n if (source.normalizedPath == builtinsFile) {\r\n source.set(CommonFlags.BUILTIN);\r\n }\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n 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 namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // mark builtins\r\n flags |= (tn.source.flags & CommonFlags.BUILTIN);\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let 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 var backlog = this.backlog;\r\n return backlog.length ? 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 ): CommonTypeNode | 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: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\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.BAR)) {\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.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let 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 } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\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 // StringLiteral\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 // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let 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 let 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 let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let 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 // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\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 this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\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 let 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 flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, 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, decorators, flags, 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 parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\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 flags = parentFlags;\r\n\r\n var type: CommonTypeNode | 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 (flags & CommonFlags.AMBIENT) {\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 (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\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 parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\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 while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\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 ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\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 parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\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 parentFlags,\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 ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\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 if (typeParameters.length === 0) {\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 ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\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 isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor);\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 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 }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\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 return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | 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 } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let 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 let param = 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 param.flags |= accessFlags;\r\n return param;\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 flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\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 if (!tn.skipIdentifier()) {\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 name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\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 if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\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 name.range\r\n ); // recoverable\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 name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\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 (!(flags & CommonFlags.AMBIENT)) {\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 name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\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 name: 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 if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(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 name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\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 signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\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 name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\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 identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\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 let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\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\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\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 let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var flags = parent.flags & CommonFlags.AMBIENT; // inherit\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n if (tn.skip(Token.ABSTRACT)) {\r\n flags |= (CommonFlags.ABSTRACT | CommonFlags.INSTANCE);\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\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 name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else 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 name.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 name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.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, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\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 (!(flags & CommonFlags.AMBIENT)) {\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 let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\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 name.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 name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | 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 let 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 let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\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 flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let 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 let 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 let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath != null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\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.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\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 let 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.skipIdentifier()) {\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 let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let 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 let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\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.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\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 startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, 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.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 var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\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 statement = this.parseReturn(tn);\r\n break;\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 statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\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 let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\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(IdentifierHandling.PREFER);\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(IdentifierHandling.PREFER);\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 let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let 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 let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\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 let 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 let 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 let 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 let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let 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 let 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 let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let 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 let 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 let 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 let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let 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.skipIdentifier()) {\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 let 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 flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\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 parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\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 let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let 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(IdentifierHandling.PREFER);\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 let 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.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\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.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\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 }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\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 let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\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.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\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 return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let 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 let 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\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\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(state);\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 while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\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 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 with type arguments\r\n var typeArguments: CommonTypeNode[] | null;\r\n while (\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) ||\r\n tn.skip(Token.OPENPAREN)\r\n ) {\r\n let 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 switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let 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 let 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 let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA ? Precedence.COMMA + 1 : 0);\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 let 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 let 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 }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n // skipBlock(tn: Tokenizer): void {\r\n // var depth = 0;\r\n // var token: Token;\r\n // do {\r\n // token = tn.next();\r\n // if (token == Token.OPENBRACE) {\r\n // ++depth;\r\n // } else if (token == Token.CLOSEBRACE) {\r\n // if (depth) --depth;\r\n // if (!depth) break; // done\r\n // }\r\n // } while (token != Token.ENDOFFILE);\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 case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\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: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n default: 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 case Token.COMMA: return Precedence.COMMA;\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: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\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: return Precedence.EQUALITY;\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: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n default: 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 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: return true;\r\n default: return false;\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n Program,\r\n Element,\r\n CommonFlags,\r\n ElementKind,\r\n Global,\r\n Enum,\r\n EnumValue,\r\n Field,\r\n Function,\r\n FunctionPrototype,\r\n Class,\r\n ClassPrototype,\r\n Namespace,\r\n ConstantValueKind,\r\n Interface,\r\n Property\r\n} from \"./program\";\r\n\r\nimport {\r\n Type,\r\n TypeKind\r\n} from \"./types\";\r\n\r\nimport {\r\n indent\r\n} from \"./util\";\r\n\r\n/** Walker base class. */\r\nabstract class ExportsWalker {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Whether to include private members */\r\n includePrivate: bool;\r\n /** Elements still to do. */\r\n todo: Element[] = [];\r\n /** Already seen elements. */\r\n seen: Set = new Set();\r\n\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n this.program = program;\r\n this.includePrivate;\r\n }\r\n\r\n /** Walks all exports and calls the respective handlers. */\r\n walk(): void {\r\n for (let element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.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 this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\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: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\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 getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\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): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(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(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(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 = getExpressionId(expr);\r\n var type = getExpressionType(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 case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(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(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(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 case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\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(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(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(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(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 getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(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(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(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(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(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(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\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(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(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 (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\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 case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\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","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\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\nimport {\r\n Program,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\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) parser = new Parser();\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 `importTable` option. */\r\nexport function setImportTable(options: Options, importTable: bool): void {\r\n options.importTable = importTable;\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/** Sets a 'globalAliases' value. */\r\nexport function setGlobalAlias(options: Options, name: string, alias: string): void {\r\n var globalAliases = options.globalAliases;\r\n if (!globalAliases) options.globalAliases = globalAliases = new Map();\r\n globalAliases.set(name, alias);\r\n}\r\n\r\n/** Sign extension operations. */\r\nexport const FEATURE_SIGN_EXTENSION = Feature.SIGN_EXTENSION;\r\n/** Mutable global imports and exports. */\r\nexport const FEATURE_MUTABLE_GLOBAL = Feature.MUTABLE_GLOBAL;\r\n\r\n/** Enables a specific feature. */\r\nexport function enableFeature(options: Options, feature: Feature): void {\r\n options.features |= feature;\r\n}\r\n\r\n/** Finishes parsing. */\r\nexport function finishParsing(parser: Parser): Program {\r\n return parser.finish();\r\n}\r\n\r\n/** Compiles the sources computed by the parser to a module. */\r\nexport function compileProgram(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function decompileModule(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/** Builds WebIDL definitions for the specified program. */\r\nexport function buildIDL(program: Program): string {\r\n return IDLBuilder.build(program);\r\n}\r\n\r\n/** Builds TypeScript definitions for the specified program. */\r\nexport function buildTSD(program: Program): string {\r\n return TSDBuilder.build(program);\r\n}\r\n\r\n/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX };\r\n","const F64 = new Float64Array(1);\r\nconst F32 = new Float32Array(F64.buffer);\r\nconst I32 = new Int32Array(F64.buffer);\r\n\r\nglobal.f32_as_i32 = function(value) {\r\n F32[0] = value;\r\n return I32[0];\r\n};\r\n\r\nglobal.i32_as_f32 = function(value) {\r\n I32[0] = value;\r\n return F32[0];\r\n};\r\n\r\nglobal.f64_as_i64 = function(value) {\r\n F64[0] = value;\r\n return i64_new(I32[0], I32[1]);\r\n};\r\n\r\nglobal.i64_as_f64 = function(value) {\r\n I32[0] = i64_low(value);\r\n I32[1] = i64_high(value);\r\n return F64[0];\r\n};\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_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\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_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\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","/** @module util *//***/\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\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 normalizePath(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 let 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 resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\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","/** @module util *//***/\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 }\r\n default: {\r\n return false;\r\n }\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 }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid 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 a valid 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","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\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 BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags\r\n} from \"./program\";\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 // 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 // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 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 }\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], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 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 }\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 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 }\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\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 = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\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.is(TypeFlags.REFERENCE)) {\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 }\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 }\r\n return ret; // possibly overflows\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\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 = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\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.is(TypeFlags.REFERENCE)) {\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 }\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 }\r\n return ret; // possibly overflowws\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.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(tempLocal.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(tempLocal.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 let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.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.is(TypeFlags.REFERENCE)) {\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 }\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 }\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\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 let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\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 let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\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 let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\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 let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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.is(TypeFlags.REFERENCE)) {\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 let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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 }\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\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 let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\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 let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\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 let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\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 let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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.is(TypeFlags.REFERENCE)) {\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 let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 }\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 switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\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, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\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 }\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 ConversionKind.IMPLICIT,\r\n WrapMode.NONE\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.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\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.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\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 // case TypeKind.VOID:\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 }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\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 }\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 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 }\r\n return ret;\r\n }\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(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let 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(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let 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 && 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 let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> 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 && 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 let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\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 ? 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 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 let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\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], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\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 = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other 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 }\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\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, ConversionKind.IMPLICIT, WrapMode.NONE);\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(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\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: u8, 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(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\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\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 }\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.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\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], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let 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 let 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 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 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 }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\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 let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\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(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.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 }\r\n return ret;\r\n }\r\n case \"unchecked\": {\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 return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\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(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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 WrapMode.NONE\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(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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 WrapMode.NONE\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(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\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(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\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 expr;\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\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\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 null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\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 null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\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.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 null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\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, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(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, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(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\nconst allocateInternalName = \"allocate_memory\";\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 classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\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, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = (allocatePrototype).resolve(); // reports\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\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 program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__22__;","// 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","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","module.exports = globalScope => {\r\n globalScope[\"JSMath\"] = Math;\r\n};\r\n","/** @module std/portable *//***/\r\n\r\nvar 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_POSITIVE_VALUE\": { value: Math.fround(1.175494351e-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_POSITIVE_VALUE\": { value: 2.2250738585072014e-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[\"ctz\"] = function ctz(value) {\r\n var c = Math.clz32(value & -value);\r\n return value ? 31 - c : c;\r\n};\r\n\r\nglobalScope[\"popcnt\"] = function popcnt(value) {\r\n value -= value >>> 1 & 0x55555555;\r\n value = (value & 0x33333333) + (value >>> 2 & 0x33333333);\r\n return (((value + (value >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\r\n};\r\n\r\nglobalScope[\"rotl\"] = function rotl(value, shift) {\r\n shift &= 31;\r\n return (value << shift) | (value >>> (32 - shift));\r\n};\r\n\r\nglobalScope[\"rotr\"] = function rotr(value, shift) {\r\n shift &= 31;\r\n return (value >>> shift) | (value << (32 - shift));\r\n};\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\n// Adopt code from https://github.com/rfk/wasm-polyfill\r\nglobalScope[\"nearest\"] = function nearest(value) {\r\n if (Math.abs(value - Math.trunc(value)) === 0.5) {\r\n return 2.0 * Math.round(value * 0.5);\r\n }\r\n return Math.round(value);\r\n};\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[\"copysign\"] = function copysign(x, y) {\r\n return Math.abs(x) * Math.sign(y);\r\n};\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\r\nglobalScope[\"isInteger\"] = Number.isInteger;\r\n\r\nglobalScope[\"isFloat\"] = function isFloat(arg) {\r\n return typeof arg === \"number\";\r\n};\r\n\r\nglobalScope[\"isReference\"] = function isClass(arg) {\r\n return typeof arg === \"object\" || typeof arg === \"string\";\r\n};\r\n\r\nglobalScope[\"isString\"] = function isString(arg) {\r\n return typeof arg === \"string\" || arg instanceof String;\r\n};\r\n\r\nglobalScope[\"isArray\"] = Array.isArray;\r\n\r\nglobalScope[\"unchecked\"] = function(expr) {\r\n return expr;\r\n};\r\n\r\nglobalScope[\"fmod\"] = function fmod(x, y) {\r\n return x % y;\r\n};\r\n\r\nglobalScope[\"fmodf\"] = function fmodf(x, y) {\r\n return Math.fround(x % y);\r\n};\r\n\r\nrequire(\"./portable/math\")(globalScope);\r\nrequire(\"./portable/memory\")(globalScope);\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\nimport \"../../../std/portable\";\r\nimport \"./binaryen\";\r\nimport \"./i64\";\r\nimport \"./float\";\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/program.ts b/src/program.ts index d2990e82..28c66405 100644 --- a/src/program.ts +++ b/src/program.ts @@ -416,8 +416,10 @@ export class Program extends DiagnosticEmitter { var globalAliases = options.globalAliases; if (globalAliases) { for (let [alias, name] of globalAliases) { - let element = this.elementsLookup.get(name); // TODO: error? has no source range + if (!alias.length) continue; // explicitly disabled + let element = this.elementsLookup.get(name); if (element) this.elementsLookup.set(alias, element); + else throw new Error("element not found: " + name); } } diff --git a/std/assembly/builtins.ts b/std/assembly/builtins.ts index 5ece5f94..c63edc98 100644 --- a/std/assembly/builtins.ts +++ b/std/assembly/builtins.ts @@ -78,13 +78,6 @@ export declare function changetype(value: void): T; export declare function assert(isTrueish: T, message?: string): T; -export declare function abort( - message?: string | null, - fileName?: string | null, - lineNumber?: u32, - columnNumber?: u32 -): void; - export declare function unchecked(expr: T): T; export declare function i8(value: void): i8; diff --git a/std/assembly/env.ts b/std/assembly/env.ts new file mode 100644 index 00000000..f6da30e5 --- /dev/null +++ b/std/assembly/env.ts @@ -0,0 +1,7 @@ +/** Environment abort function called where assertions evaluate to false / on throw. */ +declare function abort( + message?: string | null, + fileName?: string | null, + lineNumber?: u32, + columnNumber?: u32 +): void; diff --git a/tests/compiler/abi.optimized.wat b/tests/compiler/abi.optimized.wat index a5904285..a37ea750 100644 --- a/tests/compiler/abi.optimized.wat +++ b/tests/compiler/abi.optimized.wat @@ -2,7 +2,7 @@ (type $i (func (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $abi/condition (mut i32) (i32.const 0)) (global $abi/y (mut i32) (i32.const 0)) (memory $0 1) @@ -62,7 +62,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 58) @@ -77,7 +77,7 @@ (if (get_global $abi/y) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) diff --git a/tests/compiler/abi.untouched.wat b/tests/compiler/abi.untouched.wat index 53cd5514..46374b4d 100644 --- a/tests/compiler/abi.untouched.wat +++ b/tests/compiler/abi.untouched.wat @@ -2,7 +2,7 @@ (type $i (func (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $abi/condition (mut i32) (i32.const 0)) (global $abi/y (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 24)) @@ -73,7 +73,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 32) @@ -127,7 +127,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -169,7 +169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 58) @@ -196,7 +196,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) @@ -220,7 +220,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 72) @@ -242,7 +242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 74) @@ -261,7 +261,7 @@ (get_local $1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 77) @@ -280,7 +280,7 @@ (get_local $1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 79) diff --git a/tests/compiler/assert.optimized.wat b/tests/compiler/assert.optimized.wat index 5735445b..7c549038 100644 --- a/tests/compiler/assert.optimized.wat +++ b/tests/compiler/assert.optimized.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\t\00\00\00a\00s\00s\00e\00r\00t\00.\00t\00s") (data (i32.const 32) "\0c\00\00\00m\00u\00s\00t\00 \00b\00e\00 \00t\00r\00u\00e") @@ -17,7 +17,7 @@ ) (get_local $0) (block - (call $abort + (call $~lib/env/abort (i32.const 32) (i32.const 8) (i32.const 10) diff --git a/tests/compiler/assert.untouched.wat b/tests/compiler/assert.untouched.wat index ac01e4bd..fdf951bc 100644 --- a/tests/compiler/assert.untouched.wat +++ b/tests/compiler/assert.untouched.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $HEAP_BASE i32 (i32.const 60)) (memory $0 1) (data (i32.const 8) "\t\00\00\00a\00s\00s\00e\00r\00t\00.\00t\00s\00") @@ -15,7 +15,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1) @@ -29,7 +29,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -46,7 +46,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3) @@ -61,7 +61,7 @@ (f64.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -78,7 +78,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -92,7 +92,7 @@ (i64.const 4294967296) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 6) @@ -109,7 +109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -126,7 +126,7 @@ ) (get_local $0) (block - (call $abort + (call $~lib/env/abort (i32.const 32) (i32.const 8) (i32.const 10) diff --git a/tests/compiler/builtins.optimized.wat b/tests/compiler/builtins.optimized.wat index 8463dffd..2d458779 100644 --- a/tests/compiler/builtins.optimized.wat +++ b/tests/compiler/builtins.optimized.wat @@ -3,7 +3,7 @@ (type $fi (func (param f32) (result i32))) (type $Fi (func (param f64) (result i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $builtins/b (mut i32) (i32.const 0)) (global $builtins/i (mut i32) (i32.const 0)) (global $builtins/I (mut i64) (i64.const 0)) @@ -106,7 +106,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 43) @@ -133,7 +133,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 44) @@ -158,7 +158,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -203,7 +203,7 @@ (i64.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 61) @@ -232,7 +232,7 @@ (i64.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 62) @@ -257,7 +257,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -271,7 +271,7 @@ (f32.const 1.25) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) @@ -288,7 +288,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 81) @@ -305,7 +305,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 82) @@ -319,7 +319,7 @@ (f32.const inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 83) @@ -333,7 +333,7 @@ (f32.const -inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 84) @@ -347,7 +347,7 @@ (f32.const nan:0x400000) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 85) @@ -404,7 +404,7 @@ (f64.const 1.25) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 116) @@ -421,7 +421,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 117) @@ -438,7 +438,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 118) @@ -452,7 +452,7 @@ (f64.const inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 119) @@ -466,7 +466,7 @@ (f64.const -inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 120) @@ -480,7 +480,7 @@ (f64.const nan:0x8000000000000) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 121) @@ -837,7 +837,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 261) @@ -853,7 +853,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 262) @@ -867,7 +867,7 @@ (f32.const nan:0x400000) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 263) @@ -881,7 +881,7 @@ (f32.const inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 264) @@ -895,7 +895,7 @@ (f64.const nan:0x8000000000000) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 265) @@ -909,7 +909,7 @@ (f64.const inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 266) @@ -925,7 +925,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 267) @@ -941,7 +941,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 268) diff --git a/tests/compiler/builtins.untouched.wat b/tests/compiler/builtins.untouched.wat index 85580ac1..b622c1f9 100644 --- a/tests/compiler/builtins.untouched.wat +++ b/tests/compiler/builtins.untouched.wat @@ -3,7 +3,7 @@ (type $fi (func (param f32) (result i32))) (type $Fi (func (param f64) (result i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $builtins/b (mut i32) (i32.const 0)) (global $builtins/i (mut i32) (i32.const 0)) (global $builtins/I (mut i64) (i64.const 0)) @@ -73,7 +73,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -89,7 +89,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 6) @@ -103,7 +103,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -119,7 +119,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -133,7 +133,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -149,7 +149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) @@ -163,7 +163,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 11) @@ -179,7 +179,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) @@ -193,7 +193,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 14) @@ -209,7 +209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -223,7 +223,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) @@ -239,7 +239,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 17) @@ -253,7 +253,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -269,7 +269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 19) @@ -283,7 +283,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -299,7 +299,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 21) @@ -313,7 +313,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -329,7 +329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -458,7 +458,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 43) @@ -489,7 +489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 44) @@ -520,7 +520,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -621,7 +621,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 61) @@ -652,7 +652,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 62) @@ -683,7 +683,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -756,7 +756,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) @@ -775,7 +775,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 81) @@ -794,7 +794,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 82) @@ -813,7 +813,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 83) @@ -834,7 +834,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 84) @@ -853,7 +853,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 85) @@ -996,7 +996,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 116) @@ -1015,7 +1015,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 117) @@ -1034,7 +1034,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 118) @@ -1053,7 +1053,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 119) @@ -1074,7 +1074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 120) @@ -1093,7 +1093,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 121) @@ -1546,7 +1546,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 237) @@ -1563,7 +1563,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 238) @@ -1580,7 +1580,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 239) @@ -1597,7 +1597,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 240) @@ -1617,7 +1617,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 242) @@ -1634,7 +1634,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 243) @@ -1651,7 +1651,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 244) @@ -1668,7 +1668,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 245) @@ -1685,7 +1685,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 246) @@ -1705,7 +1705,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 248) @@ -1722,7 +1722,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 249) @@ -1739,7 +1739,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 252) @@ -1756,7 +1756,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 253) @@ -1773,7 +1773,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 254) @@ -1790,7 +1790,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 255) @@ -1807,7 +1807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 257) @@ -1824,7 +1824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 258) @@ -1841,7 +1841,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 260) @@ -1857,7 +1857,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 261) @@ -1873,7 +1873,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 262) @@ -1891,7 +1891,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 263) @@ -1909,7 +1909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 264) @@ -1927,7 +1927,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 265) @@ -1945,7 +1945,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 266) @@ -1961,7 +1961,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 267) @@ -1977,7 +1977,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 268) @@ -2000,7 +2000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 281) @@ -2017,7 +2017,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 282) @@ -2040,7 +2040,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 283) @@ -2057,7 +2057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 284) @@ -2074,7 +2074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 285) @@ -2091,7 +2091,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 286) @@ -2108,7 +2108,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 287) @@ -2125,7 +2125,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 288) @@ -2142,7 +2142,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 290) @@ -2159,7 +2159,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 291) @@ -2176,7 +2176,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 292) @@ -2193,7 +2193,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 293) @@ -2210,7 +2210,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 294) @@ -2227,7 +2227,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 295) @@ -2244,7 +2244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 296) @@ -2261,7 +2261,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 297) @@ -2278,7 +2278,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 298) @@ -2295,7 +2295,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 298) @@ -2312,7 +2312,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 299) @@ -2329,7 +2329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 299) @@ -2346,7 +2346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 301) @@ -2363,7 +2363,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 302) @@ -2380,7 +2380,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 303) @@ -2397,7 +2397,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 304) @@ -2414,7 +2414,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 305) @@ -2431,7 +2431,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 306) @@ -2448,7 +2448,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 307) @@ -2465,7 +2465,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 308) @@ -2482,7 +2482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 309) @@ -2499,7 +2499,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 310) diff --git a/tests/compiler/call-inferred.optimized.wat b/tests/compiler/call-inferred.optimized.wat index 5580157d..a43eb476 100644 --- a/tests/compiler/call-inferred.optimized.wat +++ b/tests/compiler/call-inferred.optimized.wat @@ -4,7 +4,7 @@ (type $FF (func (param f64) (result f64))) (type $ff (func (param f32) (result f32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\10\00\00\00c\00a\00l\00l\00-\00i\00n\00f\00e\00r\00r\00e\00d\00.\00t\00s") (export "memory" (memory $0)) @@ -27,7 +27,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -44,7 +44,7 @@ (f64.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 6) @@ -61,7 +61,7 @@ (f32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -78,7 +78,7 @@ (f32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) diff --git a/tests/compiler/call-inferred.untouched.wat b/tests/compiler/call-inferred.untouched.wat index 8a27bbe8..1ce64b9c 100644 --- a/tests/compiler/call-inferred.untouched.wat +++ b/tests/compiler/call-inferred.untouched.wat @@ -4,7 +4,7 @@ (type $FF (func (param f64) (result f64))) (type $ff (func (param f32) (result f32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $HEAP_BASE i32 (i32.const 44)) (memory $0 1) (data (i32.const 8) "\10\00\00\00c\00a\00l\00l\00-\00i\00n\00f\00e\00r\00r\00e\00d\00.\00t\00s\00") @@ -41,7 +41,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -60,7 +60,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 6) @@ -79,7 +79,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -98,7 +98,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) diff --git a/tests/compiler/call-optional.optimized.wat b/tests/compiler/call-optional.optimized.wat index 7bb64c2b..53c96ee3 100644 --- a/tests/compiler/call-optional.optimized.wat +++ b/tests/compiler/call-optional.optimized.wat @@ -2,7 +2,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~argc (mut i32) (i32.const 0)) (global $call-optional/optIndirect (mut i32) (i32.const 0)) (table 1 1 anyfunc) @@ -62,7 +62,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -86,7 +86,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -105,7 +105,7 @@ (i32.const 12) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 6) @@ -127,7 +127,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -152,7 +152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) @@ -177,7 +177,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 11) diff --git a/tests/compiler/call-optional.untouched.wat b/tests/compiler/call-optional.untouched.wat index d596a204..8e83736d 100644 --- a/tests/compiler/call-optional.untouched.wat +++ b/tests/compiler/call-optional.untouched.wat @@ -2,7 +2,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~argc (mut i32) (i32.const 0)) (global $call-optional/optIndirect (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 44)) @@ -70,7 +70,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -96,7 +96,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -117,7 +117,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 6) @@ -144,7 +144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -171,7 +171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) @@ -198,7 +198,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 11) diff --git a/tests/compiler/class.untouched.wat b/tests/compiler/class.untouched.wat index a7fbce83..ca713603 100644 --- a/tests/compiler/class.untouched.wat +++ b/tests/compiler/class.untouched.wat @@ -6,7 +6,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $ifff (func (param i32 f32 f32) (result f32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $class/Animal.ONE (mut i32) (i32.const 1)) (global $HEAP_BASE i32 (i32.const 28)) (memory $0 1) @@ -137,7 +137,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) diff --git a/tests/compiler/comma.optimized.wat b/tests/compiler/comma.optimized.wat index 8fee05d5..f3ed2f30 100644 --- a/tests/compiler/comma.optimized.wat +++ b/tests/compiler/comma.optimized.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $comma/a (mut i32) (i32.const 0)) (global $comma/b (mut i32) (i32.const 0)) (memory $0 1) @@ -29,7 +29,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -41,7 +41,7 @@ (if (get_global $comma/b) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -65,7 +65,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -80,7 +80,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -114,7 +114,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 14) @@ -129,7 +129,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -158,7 +158,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -173,7 +173,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 19) @@ -214,7 +214,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) diff --git a/tests/compiler/comma.untouched.wat b/tests/compiler/comma.untouched.wat index 829b43e3..5ec96bd9 100644 --- a/tests/compiler/comma.untouched.wat +++ b/tests/compiler/comma.untouched.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $comma/a (mut i32) (i32.const 0)) (global $comma/b (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 28)) @@ -39,7 +39,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -56,7 +56,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -84,7 +84,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -101,7 +101,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -137,7 +137,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 14) @@ -154,7 +154,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -187,7 +187,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -204,7 +204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 19) @@ -252,7 +252,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) diff --git a/tests/compiler/declare.optimized.wat b/tests/compiler/declare.optimized.wat index b1d9ae6d..1143f8ae 100644 --- a/tests/compiler/declare.optimized.wat +++ b/tests/compiler/declare.optimized.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (import "env" "externalConstant" (global $declare/externalConstant i32)) (import "env" "externalFunction" (func $declare/externalFunction)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "my" "externalFunction" (func $declare/my.externalFunction)) (import "my" "externalConstant" (global $declare/my.externalConstant i32)) (memory $0 1) @@ -18,7 +18,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -34,7 +34,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) diff --git a/tests/compiler/declare.untouched.wat b/tests/compiler/declare.untouched.wat index 7c152461..74032fc9 100644 --- a/tests/compiler/declare.untouched.wat +++ b/tests/compiler/declare.untouched.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (import "env" "externalConstant" (global $declare/externalConstant i32)) (import "env" "externalFunction" (func $declare/externalFunction)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "my" "externalFunction" (func $declare/my.externalFunction)) (import "my" "externalConstant" (global $declare/my.externalConstant i32)) (global $HEAP_BASE i32 (i32.const 32)) @@ -21,7 +21,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -39,7 +39,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 17bf46be..3fd98af7 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $do/n (mut i32) (i32.const 10)) (global $do/m (mut i32) (i32.const 0)) (global $do/o (mut i32) (i32.const 0)) @@ -31,7 +31,7 @@ (if (get_global $do/n) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -46,7 +46,7 @@ (i32.const 10) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -77,7 +77,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) @@ -125,7 +125,7 @@ (if (get_global $do/n) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -140,7 +140,7 @@ (i32.const 9) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -156,7 +156,7 @@ (if (get_global $do/n) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -171,7 +171,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -186,7 +186,7 @@ (i32.const 9) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) diff --git a/tests/compiler/do.untouched.wat b/tests/compiler/do.untouched.wat index 2b8eb870..1829db9d 100644 --- a/tests/compiler/do.untouched.wat +++ b/tests/compiler/do.untouched.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $do/n (mut i32) (i32.const 10)) (global $do/m (mut i32) (i32.const 0)) (global $do/o (mut i32) (i32.const 0)) @@ -41,7 +41,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -58,7 +58,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -97,7 +97,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) @@ -156,7 +156,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -173,7 +173,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -196,7 +196,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -213,7 +213,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -230,7 +230,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 86383f6c..0fdef6ca 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $for/i (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 8) "\06\00\00\00f\00o\00r\00.\00t\00s") @@ -35,7 +35,7 @@ (i32.const 10) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -81,7 +81,7 @@ (if (get_global $for/i) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) diff --git a/tests/compiler/for.untouched.wat b/tests/compiler/for.untouched.wat index fc5d9cfd..9c0639ad 100644 --- a/tests/compiler/for.untouched.wat +++ b/tests/compiler/for.untouched.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $for/i (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 24)) (memory $0 1) @@ -41,7 +41,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -102,7 +102,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) diff --git a/tests/compiler/function-expression.optimized.wat b/tests/compiler/function-expression.optimized.wat index 209b1aa5..c3e61a4d 100644 --- a/tests/compiler/function-expression.optimized.wat +++ b/tests/compiler/function-expression.optimized.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (type $i (func (result i32))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $function-expression/f1 (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) (global $function-expression/f2 (mut i32) (i32.const 1)) @@ -40,7 +40,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -63,7 +63,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -91,7 +91,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) diff --git a/tests/compiler/function-expression.untouched.wat b/tests/compiler/function-expression.untouched.wat index c2e74722..5c0002ef 100644 --- a/tests/compiler/function-expression.untouched.wat +++ b/tests/compiler/function-expression.untouched.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (type $i (func (result i32))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $function-expression/f1 (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) (global $function-expression/f2 (mut i32) (i32.const 1)) @@ -50,7 +50,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -75,7 +75,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -107,7 +107,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) diff --git a/tests/compiler/function-types.optimized.wat b/tests/compiler/function-types.optimized.wat index a9c32fe7..0ab7f38b 100644 --- a/tests/compiler/function-types.optimized.wat +++ b/tests/compiler/function-types.optimized.wat @@ -6,7 +6,7 @@ (type $FFF (func (param f64 f64) (result f64))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $function-types/i32Adder (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) (global $function-types/i64Adder (mut i32) (i32.const 0)) @@ -106,7 +106,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 11) @@ -133,7 +133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -157,7 +157,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 17) @@ -176,7 +176,7 @@ (i32.const 5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -194,7 +194,7 @@ (i32.const 7) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) @@ -213,7 +213,7 @@ (i32.const 9) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 35) @@ -237,7 +237,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 41) @@ -256,7 +256,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 42) diff --git a/tests/compiler/function-types.untouched.wat b/tests/compiler/function-types.untouched.wat index 3520c68c..2c296edf 100644 --- a/tests/compiler/function-types.untouched.wat +++ b/tests/compiler/function-types.untouched.wat @@ -6,7 +6,7 @@ (type $FFF (func (param f64 f64) (result f64))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $function-types/i32Adder (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) (global $function-types/i64Adder (mut i32) (i32.const 0)) @@ -152,7 +152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 11) @@ -181,7 +181,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -207,7 +207,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 17) @@ -228,7 +228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -248,7 +248,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) @@ -269,7 +269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 35) @@ -295,7 +295,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 41) @@ -316,7 +316,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 42) diff --git a/tests/compiler/getter-setter.optimized.wat b/tests/compiler/getter-setter.optimized.wat index c0a5090b..ecf203af 100644 --- a/tests/compiler/getter-setter.optimized.wat +++ b/tests/compiler/getter-setter.optimized.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iv (func (param i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $getter-setter/Foo._bar (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 8) "\10\00\00\00g\00e\00t\00t\00e\00r\00-\00s\00e\00t\00t\00e\00r\00.\00t\00s") @@ -21,7 +21,7 @@ (if (call $getter-setter/Foo.get:bar) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -39,7 +39,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -59,7 +59,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) diff --git a/tests/compiler/getter-setter.untouched.wat b/tests/compiler/getter-setter.untouched.wat index 13175512..1405784a 100644 --- a/tests/compiler/getter-setter.untouched.wat +++ b/tests/compiler/getter-setter.untouched.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iv (func (param i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $getter-setter/Foo._bar (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 44)) (memory $0 1) @@ -29,7 +29,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -49,7 +49,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -71,7 +71,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) diff --git a/tests/compiler/if.optimized.wat b/tests/compiler/if.optimized.wat index c08fe217..1c0e0676 100644 --- a/tests/compiler/if.optimized.wat +++ b/tests/compiler/if.optimized.wat @@ -2,7 +2,7 @@ (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\05\00\00\00i\00f\00.\00t\00s") (export "ifThenElse" (func $if/ifThenElse)) @@ -34,7 +34,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 37) @@ -50,7 +50,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -67,7 +67,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -81,7 +81,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 17) @@ -98,7 +98,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -112,7 +112,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 30) @@ -129,7 +129,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) diff --git a/tests/compiler/if.untouched.wat b/tests/compiler/if.untouched.wat index 5708cfce..c8fc488e 100644 --- a/tests/compiler/if.untouched.wat +++ b/tests/compiler/if.untouched.wat @@ -2,7 +2,7 @@ (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $HEAP_BASE i32 (i32.const 24)) (memory $0 1) (data (i32.const 8) "\05\00\00\00i\00f\00.\00t\00s\00") @@ -52,7 +52,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 37) @@ -73,7 +73,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -92,7 +92,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -111,7 +111,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 17) @@ -130,7 +130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -149,7 +149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 30) @@ -168,7 +168,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) diff --git a/tests/compiler/inlining.optimized.wat b/tests/compiler/inlining.optimized.wat index e313e0dc..641ed206 100644 --- a/tests/compiler/inlining.optimized.wat +++ b/tests/compiler/inlining.optimized.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (type $ii (func (param i32) (result i32))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~argc (mut i32) (i32.const 0)) (table 1 1 anyfunc) (elem (i32.const 0) $inlining/test_funcs~anonymous|0) @@ -47,7 +47,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -82,7 +82,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 61) @@ -117,7 +117,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 62) @@ -140,7 +140,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 68) @@ -157,7 +157,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) diff --git a/tests/compiler/inlining.untouched.wat b/tests/compiler/inlining.untouched.wat index 20cb9c21..cc6572e0 100644 --- a/tests/compiler/inlining.untouched.wat +++ b/tests/compiler/inlining.untouched.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (type $ii (func (param i32) (result i32))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $inlining/constantGlobal i32 (i32.const 1)) (global $~argc (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 36)) @@ -74,7 +74,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -114,7 +114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 61) @@ -154,7 +154,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 62) @@ -178,7 +178,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -202,7 +202,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 64) @@ -243,7 +243,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) @@ -284,7 +284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 66) @@ -318,7 +318,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 68) @@ -348,7 +348,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 69) @@ -378,7 +378,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 71) @@ -397,7 +397,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index a65a862f..92ac2165 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $logical/i (mut i32) (i32.const 0)) (global $logical/I (mut i64) (i64.const 0)) (global $logical/f (mut f32) (f32.const 0)) @@ -39,7 +39,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) @@ -57,7 +57,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -75,7 +75,7 @@ (i64.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -93,7 +93,7 @@ (i64.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -111,7 +111,7 @@ (f32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -129,7 +129,7 @@ (f32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -147,7 +147,7 @@ (f64.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 36) @@ -165,7 +165,7 @@ (f64.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 39) diff --git a/tests/compiler/logical.untouched.wat b/tests/compiler/logical.untouched.wat index 1b973126..524598ca 100644 --- a/tests/compiler/logical.untouched.wat +++ b/tests/compiler/logical.untouched.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $logical/i (mut i32) (i32.const 0)) (global $logical/I (mut i64) (i64.const 0)) (global $logical/f (mut f32) (f32.const 0)) @@ -95,7 +95,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) @@ -119,7 +119,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -146,7 +146,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -173,7 +173,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -200,7 +200,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -227,7 +227,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -254,7 +254,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 36) @@ -281,7 +281,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 39) diff --git a/tests/compiler/many-locals.optimized.wat b/tests/compiler/many-locals.optimized.wat index 0edc8ac2..287f94b9 100644 --- a/tests/compiler/many-locals.optimized.wat +++ b/tests/compiler/many-locals.optimized.wat @@ -2,7 +2,7 @@ (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\0e\00\00\00m\00a\00n\00y\00-\00l\00o\00c\00a\00l\00s\00.\00t\00s") (export "testI32" (func $many-locals/testI32)) @@ -30,7 +30,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 133) @@ -47,7 +47,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 267) diff --git a/tests/compiler/many-locals.untouched.wat b/tests/compiler/many-locals.untouched.wat index 1aa4e44a..a223b727 100644 --- a/tests/compiler/many-locals.untouched.wat +++ b/tests/compiler/many-locals.untouched.wat @@ -2,7 +2,7 @@ (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $HEAP_BASE i32 (i32.const 40)) (memory $0 1) (data (i32.const 8) "\0e\00\00\00m\00a\00n\00y\00-\00l\00o\00c\00a\00l\00s\00.\00t\00s\00") @@ -1061,7 +1061,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 133) @@ -1080,7 +1080,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 267) diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index 33969e9d..582b4738 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -2,7 +2,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $memcpy/dest (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 8) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s") @@ -1622,7 +1622,7 @@ (i32.const 9) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 151) @@ -1639,7 +1639,7 @@ (i64.const 1229783084848853777) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 152) @@ -1661,7 +1661,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 155) @@ -1678,7 +1678,7 @@ (i64.const 1229783084848853777) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 156) @@ -1695,7 +1695,7 @@ (i64.const 2459565876494606882) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 157) @@ -1712,7 +1712,7 @@ (i64.const 3689348814741910323) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 158) @@ -1729,7 +1729,7 @@ (i64.const 4919131752989213764) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 159) @@ -1753,7 +1753,7 @@ (i64.const 4919131679688438545) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 162) @@ -1777,7 +1777,7 @@ (i64.const 4919131679688438545) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 165) @@ -1794,7 +1794,7 @@ (i64.const 3689348814741910323) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 166) @@ -1811,7 +1811,7 @@ (i64.const 3694152654344438852) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 167) @@ -1828,7 +1828,7 @@ (i64.const 4919131752989213764) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 168) diff --git a/tests/compiler/memcpy.untouched.wat b/tests/compiler/memcpy.untouched.wat index 4e316bc5..a322906e 100644 --- a/tests/compiler/memcpy.untouched.wat +++ b/tests/compiler/memcpy.untouched.wat @@ -2,7 +2,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $memcpy/base i32 (i32.const 8)) (global $memcpy/dest (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 32)) @@ -1866,7 +1866,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 151) @@ -1885,7 +1885,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 152) @@ -1909,7 +1909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 155) @@ -1928,7 +1928,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 156) @@ -1950,7 +1950,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 157) @@ -1972,7 +1972,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 158) @@ -1994,7 +1994,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 159) @@ -2026,7 +2026,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 162) @@ -2058,7 +2058,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 165) @@ -2080,7 +2080,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 166) @@ -2102,7 +2102,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 167) @@ -2124,7 +2124,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 168) diff --git a/tests/compiler/memmove.optimized.wat b/tests/compiler/memmove.optimized.wat index 8354b8f9..5f4d34e3 100644 --- a/tests/compiler/memmove.optimized.wat +++ b/tests/compiler/memmove.optimized.wat @@ -2,7 +2,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $memmove/dest (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 8) "\n\00\00\00m\00e\00m\00m\00o\00v\00e\00.\00t\00s") @@ -307,7 +307,7 @@ (i32.const 9) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 55) @@ -324,7 +324,7 @@ (i64.const 1229783084848853777) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 56) @@ -346,7 +346,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 59) @@ -363,7 +363,7 @@ (i64.const 1229783084848853777) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -380,7 +380,7 @@ (i64.const 2459565876494606882) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 61) @@ -397,7 +397,7 @@ (i64.const 3689348814741910323) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 62) @@ -414,7 +414,7 @@ (i64.const 4919131752989213764) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -438,7 +438,7 @@ (i64.const 4919131679688438545) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 66) @@ -462,7 +462,7 @@ (i64.const 4919131679688438545) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 69) @@ -479,7 +479,7 @@ (i64.const 3689348814741910323) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 70) @@ -496,7 +496,7 @@ (i64.const 3694152654344438852) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 71) @@ -513,7 +513,7 @@ (i64.const 4919131752989213764) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 72) diff --git a/tests/compiler/memmove.untouched.wat b/tests/compiler/memmove.untouched.wat index 83af3179..00a9b88c 100644 --- a/tests/compiler/memmove.untouched.wat +++ b/tests/compiler/memmove.untouched.wat @@ -2,7 +2,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $memmove/base i32 (i32.const 8)) (global $memmove/dest (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 32)) @@ -362,7 +362,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 55) @@ -381,7 +381,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 56) @@ -405,7 +405,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 59) @@ -424,7 +424,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -446,7 +446,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 61) @@ -468,7 +468,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 62) @@ -490,7 +490,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -522,7 +522,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 66) @@ -554,7 +554,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 69) @@ -576,7 +576,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 70) @@ -598,7 +598,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 71) @@ -620,7 +620,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 72) diff --git a/tests/compiler/memset.optimized.wat b/tests/compiler/memset.optimized.wat index 26dc1cc9..fe2305a8 100644 --- a/tests/compiler/memset.optimized.wat +++ b/tests/compiler/memset.optimized.wat @@ -2,7 +2,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $memset/dest (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) @@ -368,7 +368,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 72) @@ -388,7 +388,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 73) @@ -415,7 +415,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 77) @@ -435,7 +435,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 78) @@ -455,7 +455,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 79) @@ -475,7 +475,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) diff --git a/tests/compiler/memset.untouched.wat b/tests/compiler/memset.untouched.wat index 32a75010..6f348e03 100644 --- a/tests/compiler/memset.untouched.wat +++ b/tests/compiler/memset.untouched.wat @@ -2,7 +2,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $memset/dest (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) @@ -401,7 +401,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 72) @@ -423,7 +423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 73) @@ -452,7 +452,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 77) @@ -474,7 +474,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 78) @@ -496,7 +496,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 79) @@ -518,7 +518,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) diff --git a/tests/compiler/overflow.optimized.wat b/tests/compiler/overflow.optimized.wat index 43b5b383..6873cfb7 100644 --- a/tests/compiler/overflow.optimized.wat +++ b/tests/compiler/overflow.optimized.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\0b\00\00\00o\00v\00e\00r\00f\00l\00o\00w\00.\00t\00s") (export "memory" (memory $0)) @@ -17,7 +17,7 @@ (i32.const 128) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) @@ -40,7 +40,7 @@ (i32.const 127) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -66,7 +66,7 @@ (i32.const 128) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) @@ -92,7 +92,7 @@ (i32.const 127) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 19) @@ -115,7 +115,7 @@ (i32.const 128) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -138,7 +138,7 @@ (i32.const 127) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -161,7 +161,7 @@ (i32.const 128) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -184,7 +184,7 @@ (i32.const 127) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -205,7 +205,7 @@ (i32.const 128) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 33) @@ -222,7 +222,7 @@ (i32.const 32768) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 42) @@ -245,7 +245,7 @@ (i32.const 32767) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -271,7 +271,7 @@ (i32.const 32768) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 48) @@ -297,7 +297,7 @@ (i32.const 32767) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 51) @@ -320,7 +320,7 @@ (i32.const 32768) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 54) @@ -343,7 +343,7 @@ (i32.const 32767) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 57) @@ -366,7 +366,7 @@ (i32.const 32768) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -389,7 +389,7 @@ (i32.const 32767) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -410,7 +410,7 @@ (i32.const 32768) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) @@ -430,7 +430,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 74) @@ -450,7 +450,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 77) @@ -476,7 +476,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) @@ -499,7 +499,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 83) @@ -522,7 +522,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -542,7 +542,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 89) @@ -565,7 +565,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 92) @@ -585,7 +585,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 95) @@ -606,7 +606,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 97) @@ -626,7 +626,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 106) @@ -646,7 +646,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 109) @@ -672,7 +672,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 112) @@ -695,7 +695,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 115) @@ -718,7 +718,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 118) @@ -738,7 +738,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 121) @@ -761,7 +761,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 124) @@ -781,7 +781,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 127) @@ -802,7 +802,7 @@ (i32.const 65535) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 129) diff --git a/tests/compiler/overflow.untouched.wat b/tests/compiler/overflow.untouched.wat index 4f7a4c88..82267388 100644 --- a/tests/compiler/overflow.untouched.wat +++ b/tests/compiler/overflow.untouched.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $HEAP_BASE i32 (i32.const 36)) (memory $0 1) (data (i32.const 8) "\0b\00\00\00o\00v\00e\00r\00f\00l\00o\00w\00.\00t\00s\00") @@ -35,7 +35,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) @@ -64,7 +64,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -101,7 +101,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) @@ -138,7 +138,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 19) @@ -167,7 +167,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -196,7 +196,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -227,7 +227,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -258,7 +258,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -284,7 +284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 33) @@ -318,7 +318,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 42) @@ -347,7 +347,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -384,7 +384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 48) @@ -421,7 +421,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 51) @@ -450,7 +450,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 54) @@ -479,7 +479,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 57) @@ -510,7 +510,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -541,7 +541,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -567,7 +567,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) @@ -598,7 +598,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 74) @@ -624,7 +624,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 77) @@ -658,7 +658,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) @@ -692,7 +692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 83) @@ -718,7 +718,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -744,7 +744,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 89) @@ -772,7 +772,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 92) @@ -800,7 +800,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 95) @@ -823,7 +823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 97) @@ -854,7 +854,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 106) @@ -880,7 +880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 109) @@ -914,7 +914,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 112) @@ -948,7 +948,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 115) @@ -974,7 +974,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 118) @@ -1000,7 +1000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 121) @@ -1028,7 +1028,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 124) @@ -1056,7 +1056,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 127) @@ -1079,7 +1079,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 129) diff --git a/tests/compiler/retain-i32.optimized.wat b/tests/compiler/retain-i32.optimized.wat index fc20796d..97bf842f 100644 --- a/tests/compiler/retain-i32.optimized.wat +++ b/tests/compiler/retain-i32.optimized.wat @@ -2,7 +2,7 @@ (type $iiv (func (param i32 i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $retain-i32/si (mut i32) (i32.const 0)) (global $retain-i32/ui (mut i32) (i32.const 0)) (memory $0 1) @@ -183,7 +183,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 78) @@ -201,7 +201,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 81) @@ -219,7 +219,7 @@ (i32.const -2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 84) @@ -237,7 +237,7 @@ (i32.const -128) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 87) @@ -255,7 +255,7 @@ (i32.const -128) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 90) @@ -273,7 +273,7 @@ (i32.const -127) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 93) @@ -291,7 +291,7 @@ (i32.const -128) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 96) @@ -309,7 +309,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 99) @@ -327,7 +327,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 102) @@ -342,7 +342,7 @@ (if (get_global $retain-i32/si) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 105) @@ -360,7 +360,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 108) @@ -378,7 +378,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 113) @@ -396,7 +396,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 116) @@ -414,7 +414,7 @@ (i32.const 254) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 119) @@ -432,7 +432,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 122) @@ -450,7 +450,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 125) @@ -468,7 +468,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 128) @@ -483,7 +483,7 @@ (if (get_global $retain-i32/ui) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 131) diff --git a/tests/compiler/retain-i32.untouched.wat b/tests/compiler/retain-i32.untouched.wat index 629facc6..f7ed08f0 100644 --- a/tests/compiler/retain-i32.untouched.wat +++ b/tests/compiler/retain-i32.untouched.wat @@ -2,7 +2,7 @@ (type $iiv (func (param i32 i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $retain-i32/si (mut i32) (i32.const 0)) (global $retain-i32/ui (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 40)) @@ -37,7 +37,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -72,7 +72,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -107,7 +107,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 6) @@ -142,7 +142,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -177,7 +177,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -212,7 +212,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -247,7 +247,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) @@ -276,7 +276,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -305,7 +305,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 14) @@ -334,7 +334,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -363,7 +363,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) @@ -392,7 +392,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 17) @@ -421,7 +421,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -450,7 +450,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 19) @@ -649,7 +649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 78) @@ -681,7 +681,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 81) @@ -710,7 +710,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 84) @@ -739,7 +739,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 87) @@ -768,7 +768,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 90) @@ -797,7 +797,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 93) @@ -826,7 +826,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 96) @@ -849,7 +849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 99) @@ -872,7 +872,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 102) @@ -895,7 +895,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 105) @@ -918,7 +918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 108) @@ -947,7 +947,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 113) @@ -976,7 +976,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 116) @@ -1002,7 +1002,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 119) @@ -1028,7 +1028,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 122) @@ -1051,7 +1051,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 125) @@ -1074,7 +1074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 128) @@ -1097,7 +1097,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 131) diff --git a/tests/compiler/showcase.optimized.wat b/tests/compiler/showcase.optimized.wat index f732ecb5..0376bab8 100644 --- a/tests/compiler/showcase.optimized.wat +++ b/tests/compiler/showcase.optimized.wat @@ -12,7 +12,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $ifv (func (param i32 f32))) (type $if (func (param i32) (result f32))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $showcase/aConstantGlobal i32 (i32.const 42)) (global $showcase/anExportedConstantGlobal f32 (f32.const 42)) (global $showcase/aMutableGlobal (mut i32) (i32.const 42)) @@ -6130,7 +6130,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) @@ -6148,7 +6148,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -6166,7 +6166,7 @@ (i64.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -6184,7 +6184,7 @@ (i64.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -6202,7 +6202,7 @@ (f32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -6220,7 +6220,7 @@ (f32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -6238,7 +6238,7 @@ (f64.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 36) @@ -6256,7 +6256,7 @@ (f64.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 39) @@ -6315,7 +6315,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 43) @@ -6342,7 +6342,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 44) @@ -6367,7 +6367,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 45) @@ -6412,7 +6412,7 @@ (i64.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 61) @@ -6441,7 +6441,7 @@ (i64.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 62) @@ -6466,7 +6466,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 63) @@ -6480,7 +6480,7 @@ (f32.const 1.25) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 80) @@ -6497,7 +6497,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 81) @@ -6514,7 +6514,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 82) @@ -6528,7 +6528,7 @@ (f32.const inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 83) @@ -6542,7 +6542,7 @@ (f32.const -inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 84) @@ -6556,7 +6556,7 @@ (f32.const nan:0x400000) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 85) @@ -6613,7 +6613,7 @@ (f64.const 1.25) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 116) @@ -6630,7 +6630,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 117) @@ -6647,7 +6647,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 118) @@ -6661,7 +6661,7 @@ (f64.const inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 119) @@ -6675,7 +6675,7 @@ (f64.const -inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 120) @@ -6689,7 +6689,7 @@ (f64.const nan:0x8000000000000) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 121) @@ -7046,7 +7046,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 261) @@ -7062,7 +7062,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 262) @@ -7076,7 +7076,7 @@ (f32.const nan:0x400000) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 263) @@ -7090,7 +7090,7 @@ (f32.const inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 264) @@ -7104,7 +7104,7 @@ (f64.const nan:0x8000000000000) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 265) @@ -7118,7 +7118,7 @@ (f64.const inf) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 266) @@ -7134,7 +7134,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 267) @@ -7150,7 +7150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 268) @@ -7278,7 +7278,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 42) @@ -7302,7 +7302,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 58) @@ -7317,7 +7317,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 59) @@ -7373,7 +7373,7 @@ (i32.const 9) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 151) @@ -7390,7 +7390,7 @@ (i64.const 1229783084848853777) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 152) @@ -7412,7 +7412,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 155) @@ -7429,7 +7429,7 @@ (i64.const 1229783084848853777) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 156) @@ -7446,7 +7446,7 @@ (i64.const 2459565876494606882) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 157) @@ -7463,7 +7463,7 @@ (i64.const 3689348814741910323) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 158) @@ -7480,7 +7480,7 @@ (i64.const 4919131752989213764) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 159) @@ -7504,7 +7504,7 @@ (i64.const 4919131679688438545) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 162) @@ -7528,7 +7528,7 @@ (i64.const 4919131679688438545) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 165) @@ -7545,7 +7545,7 @@ (i64.const 3689348814741910323) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 166) @@ -7562,7 +7562,7 @@ (i64.const 3694152654344438852) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 167) @@ -7579,7 +7579,7 @@ (i64.const 4919131752989213764) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 168) @@ -7604,7 +7604,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 103) @@ -7621,7 +7621,7 @@ (f32.const 9e3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 104) @@ -7642,7 +7642,7 @@ (f32.const 123) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 107) @@ -7660,7 +7660,7 @@ (get_global $showcase/aClassInstance) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 110) diff --git a/tests/compiler/showcase.untouched.wat b/tests/compiler/showcase.untouched.wat index 54efbea8..55ca66a0 100644 --- a/tests/compiler/showcase.untouched.wat +++ b/tests/compiler/showcase.untouched.wat @@ -12,7 +12,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $ifv (func (param i32 f32))) (type $if (func (param i32) (result f32))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $showcase/aConstantGlobal i32 (i32.const 42)) (global $showcase/anExportedConstantGlobal f32 (f32.const 42)) (global $showcase/aMutableGlobal (mut i32) (i32.const 42)) @@ -7471,7 +7471,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 12) @@ -7495,7 +7495,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -7522,7 +7522,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -7549,7 +7549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -7576,7 +7576,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -7603,7 +7603,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -7630,7 +7630,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 36) @@ -7657,7 +7657,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 39) @@ -7671,7 +7671,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 5) @@ -7687,7 +7687,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 6) @@ -7701,7 +7701,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 7) @@ -7717,7 +7717,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 8) @@ -7731,7 +7731,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 9) @@ -7747,7 +7747,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 10) @@ -7761,7 +7761,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 11) @@ -7777,7 +7777,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 12) @@ -7791,7 +7791,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 14) @@ -7807,7 +7807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 15) @@ -7821,7 +7821,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 16) @@ -7837,7 +7837,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 17) @@ -7851,7 +7851,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 18) @@ -7867,7 +7867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 19) @@ -7881,7 +7881,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 20) @@ -7897,7 +7897,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 21) @@ -7911,7 +7911,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 22) @@ -7927,7 +7927,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 23) @@ -8056,7 +8056,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 43) @@ -8087,7 +8087,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 44) @@ -8118,7 +8118,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 45) @@ -8219,7 +8219,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 61) @@ -8250,7 +8250,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 62) @@ -8281,7 +8281,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 63) @@ -8354,7 +8354,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 80) @@ -8373,7 +8373,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 81) @@ -8392,7 +8392,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 82) @@ -8411,7 +8411,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 83) @@ -8432,7 +8432,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 84) @@ -8451,7 +8451,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 85) @@ -8594,7 +8594,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 116) @@ -8613,7 +8613,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 117) @@ -8632,7 +8632,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 118) @@ -8651,7 +8651,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 119) @@ -8672,7 +8672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 120) @@ -8691,7 +8691,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 121) @@ -9144,7 +9144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 237) @@ -9161,7 +9161,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 238) @@ -9178,7 +9178,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 239) @@ -9195,7 +9195,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 240) @@ -9215,7 +9215,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 242) @@ -9232,7 +9232,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 243) @@ -9249,7 +9249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 244) @@ -9266,7 +9266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 245) @@ -9283,7 +9283,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 246) @@ -9303,7 +9303,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 248) @@ -9320,7 +9320,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 249) @@ -9337,7 +9337,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 252) @@ -9354,7 +9354,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 253) @@ -9371,7 +9371,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 254) @@ -9388,7 +9388,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 255) @@ -9405,7 +9405,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 257) @@ -9422,7 +9422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 258) @@ -9439,7 +9439,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 260) @@ -9455,7 +9455,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 261) @@ -9471,7 +9471,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 262) @@ -9489,7 +9489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 263) @@ -9507,7 +9507,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 264) @@ -9525,7 +9525,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 265) @@ -9543,7 +9543,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 266) @@ -9559,7 +9559,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 267) @@ -9575,7 +9575,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 268) @@ -9598,7 +9598,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 281) @@ -9615,7 +9615,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 282) @@ -9638,7 +9638,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 283) @@ -9655,7 +9655,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 284) @@ -9672,7 +9672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 285) @@ -9689,7 +9689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 286) @@ -9706,7 +9706,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 287) @@ -9723,7 +9723,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 288) @@ -9740,7 +9740,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 290) @@ -9757,7 +9757,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 291) @@ -9774,7 +9774,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 292) @@ -9791,7 +9791,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 293) @@ -9808,7 +9808,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 294) @@ -9825,7 +9825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 295) @@ -9842,7 +9842,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 296) @@ -9859,7 +9859,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 297) @@ -9876,7 +9876,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 298) @@ -9893,7 +9893,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 298) @@ -9910,7 +9910,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 299) @@ -9927,7 +9927,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 299) @@ -9944,7 +9944,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 301) @@ -9961,7 +9961,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 302) @@ -9978,7 +9978,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 303) @@ -9995,7 +9995,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 304) @@ -10012,7 +10012,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 305) @@ -10029,7 +10029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 306) @@ -10046,7 +10046,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 307) @@ -10063,7 +10063,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 308) @@ -10080,7 +10080,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 309) @@ -10097,7 +10097,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 310) @@ -10397,7 +10397,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 42) @@ -10423,7 +10423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 54) @@ -10440,7 +10440,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 55) @@ -10457,7 +10457,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 56) @@ -10474,7 +10474,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 57) @@ -10491,7 +10491,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 58) @@ -10508,7 +10508,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 59) @@ -10601,7 +10601,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 151) @@ -10620,7 +10620,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 152) @@ -10644,7 +10644,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 155) @@ -10663,7 +10663,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 156) @@ -10685,7 +10685,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 157) @@ -10707,7 +10707,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 158) @@ -10729,7 +10729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 159) @@ -10761,7 +10761,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 162) @@ -10793,7 +10793,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 165) @@ -10815,7 +10815,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 166) @@ -10837,7 +10837,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 167) @@ -10859,7 +10859,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 96) (i32.const 168) @@ -10886,7 +10886,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 103) @@ -10905,7 +10905,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 104) @@ -10928,7 +10928,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 107) @@ -10948,7 +10948,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 68) (i32.const 110) diff --git a/tests/compiler/static-this.optimized.wat b/tests/compiler/static-this.optimized.wat index bcc2f98f..437716e8 100644 --- a/tests/compiler/static-this.optimized.wat +++ b/tests/compiler/static-this.optimized.wat @@ -2,7 +2,7 @@ (type $i (func (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $static-this/Foo.bar (mut i32) (i32.const 42)) (memory $0 1) (data (i32.const 8) "\0e\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s") @@ -18,7 +18,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) diff --git a/tests/compiler/static-this.untouched.wat b/tests/compiler/static-this.untouched.wat index 12478225..c74c880d 100644 --- a/tests/compiler/static-this.untouched.wat +++ b/tests/compiler/static-this.untouched.wat @@ -2,7 +2,7 @@ (type $i (func (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $static-this/Foo.bar (mut i32) (i32.const 42)) (global $HEAP_BASE i32 (i32.const 40)) (memory $0 1) @@ -23,7 +23,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) diff --git a/tests/compiler/std/allocator_arena.optimized.wat b/tests/compiler/std/allocator_arena.optimized.wat index 3998a291..8da8b6f1 100644 --- a/tests/compiler/std/allocator_arena.optimized.wat +++ b/tests/compiler/std/allocator_arena.optimized.wat @@ -5,7 +5,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iv (func (param i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/allocator_arena/ptr1 (mut i32) (i32.const 0)) @@ -2401,7 +2401,7 @@ (get_global $std/allocator_arena/ptr2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -2436,7 +2436,7 @@ (i32.const 18) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -2481,7 +2481,7 @@ (i32.const 18) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -2507,7 +2507,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -2540,7 +2540,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) diff --git a/tests/compiler/std/allocator_arena.untouched.wat b/tests/compiler/std/allocator_arena.untouched.wat index 2046ab18..33d379aa 100644 --- a/tests/compiler/std/allocator_arena.untouched.wat +++ b/tests/compiler/std/allocator_arena.untouched.wat @@ -5,7 +5,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iv (func (param i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -2711,7 +2711,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -2749,7 +2749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -2798,7 +2798,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -2830,7 +2830,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -2868,7 +2868,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) diff --git a/tests/compiler/std/array-access.optimized.wat b/tests/compiler/std/array-access.optimized.wat index 73451654..60a4402f 100644 --- a/tests/compiler/std/array-access.optimized.wat +++ b/tests/compiler/std/array-access.optimized.wat @@ -3,7 +3,7 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 12) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") (data (i32.const 44) "\04\00\00\00n\00u\00l\00l") @@ -127,7 +127,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 12) (i32.const 231) diff --git a/tests/compiler/std/array-access.untouched.wat b/tests/compiler/std/array-access.untouched.wat index 8b3d71ae..c79a187a 100644 --- a/tests/compiler/std/array-access.untouched.wat +++ b/tests/compiler/std/array-access.untouched.wat @@ -3,7 +3,7 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -227,7 +227,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 12) (i32.const 231) diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index 6bacdca1..1a929fae 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -4,7 +4,7 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/array-literal/emptyArray (mut i32) (i32.const 0)) @@ -163,7 +163,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 124) (i32.const 22) @@ -529,7 +529,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 92) (i32.const 23) @@ -620,7 +620,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 4) @@ -635,7 +635,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 5) @@ -653,7 +653,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 6) @@ -671,7 +671,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 7) @@ -691,7 +691,7 @@ (get_global $std/array-literal/emptyArray) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 10) @@ -749,7 +749,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 14) @@ -764,7 +764,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 15) @@ -782,7 +782,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 16) @@ -800,7 +800,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 17) diff --git a/tests/compiler/std/array-literal.untouched.wat b/tests/compiler/std/array-literal.untouched.wat index 2c29f0b1..e8bd8d3a 100644 --- a/tests/compiler/std/array-literal.untouched.wat +++ b/tests/compiler/std/array-literal.untouched.wat @@ -4,7 +4,7 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -206,7 +206,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 124) (i32.const 22) @@ -593,7 +593,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 92) (i32.const 23) @@ -702,7 +702,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 4) @@ -722,7 +722,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 5) @@ -742,7 +742,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 6) @@ -762,7 +762,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 7) @@ -787,7 +787,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 10) @@ -848,7 +848,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 14) @@ -868,7 +868,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 15) @@ -888,7 +888,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 16) @@ -908,7 +908,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 17) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index aa52ee97..a05b1bf9 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -13,7 +13,7 @@ (type $II (func (param i64) (result i64))) (type $iv (func (param i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -186,7 +186,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 40) (i32.const 22) @@ -552,7 +552,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -2504,7 +2504,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 40) (i32.const 32) @@ -2591,7 +2591,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 40) (i32.const 56) @@ -2644,7 +2644,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 143) @@ -2724,7 +2724,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 154) @@ -2795,7 +2795,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 244) @@ -2867,7 +2867,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 215) @@ -3299,7 +3299,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -4364,7 +4364,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 128) (i32.const 1000) @@ -4440,7 +4440,7 @@ (get_global $~lib/math/random_seeded) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 128) (i32.const 1007) @@ -5263,7 +5263,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 605) @@ -5511,7 +5511,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 605) @@ -5972,7 +5972,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 728) (i32.const 20) @@ -6004,7 +6004,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 696) (i32.const 18) @@ -6051,7 +6051,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 696) (i32.const 74) @@ -6256,7 +6256,7 @@ (get_global $std/array/arr) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 17) @@ -6270,7 +6270,7 @@ (get_global $std/array/arr) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 18) @@ -6294,7 +6294,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 22) @@ -6311,7 +6311,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 23) @@ -6328,7 +6328,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 24) @@ -6348,7 +6348,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 28) @@ -6362,7 +6362,7 @@ (get_global $std/array/arr) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 29) @@ -6379,7 +6379,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 30) @@ -6402,7 +6402,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 34) @@ -6419,7 +6419,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 35) @@ -6437,7 +6437,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 36) @@ -6460,7 +6460,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 40) @@ -6477,7 +6477,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 41) @@ -6495,7 +6495,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 42) @@ -6513,7 +6513,7 @@ (i32.const 44) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 43) @@ -6536,7 +6536,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 47) @@ -6553,7 +6553,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 48) @@ -6571,7 +6571,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 49) @@ -6589,7 +6589,7 @@ (i32.const 44) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 50) @@ -6607,7 +6607,7 @@ (i32.const 45) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 51) @@ -6630,7 +6630,7 @@ (i32.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 57) @@ -6647,7 +6647,7 @@ (i32.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 58) @@ -6665,7 +6665,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 59) @@ -6683,7 +6683,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 60) @@ -6701,7 +6701,7 @@ (i32.const 44) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 61) @@ -6719,7 +6719,7 @@ (i32.const 45) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 62) @@ -6742,7 +6742,7 @@ (i32.const 5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 66) @@ -6759,7 +6759,7 @@ (i32.const 5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 67) @@ -6777,7 +6777,7 @@ (i32.const 41) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 68) @@ -6795,7 +6795,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 69) @@ -6813,7 +6813,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 70) @@ -6831,7 +6831,7 @@ (i32.const 44) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 71) @@ -6849,7 +6849,7 @@ (i32.const 45) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 72) @@ -6869,7 +6869,7 @@ (i32.const 41) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 78) @@ -6886,7 +6886,7 @@ (i32.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 79) @@ -6903,7 +6903,7 @@ (i32.const 5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 80) @@ -6921,7 +6921,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 81) @@ -6939,7 +6939,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 82) @@ -6957,7 +6957,7 @@ (i32.const 44) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 83) @@ -6975,7 +6975,7 @@ (i32.const 45) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 84) @@ -6995,7 +6995,7 @@ (i32.const 45) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 88) @@ -7012,7 +7012,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 89) @@ -7029,7 +7029,7 @@ (i32.const 5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 90) @@ -7047,7 +7047,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 91) @@ -7065,7 +7065,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 92) @@ -7083,7 +7083,7 @@ (i32.const 44) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 93) @@ -7105,7 +7105,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 99) @@ -7122,7 +7122,7 @@ (i32.const 5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 100) @@ -7140,7 +7140,7 @@ (i32.const 44) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 101) @@ -7158,7 +7158,7 @@ (i32.const 43) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 102) @@ -7176,7 +7176,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 103) @@ -7207,7 +7207,7 @@ (if (get_global $std/array/i) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 112) @@ -7229,7 +7229,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 116) @@ -7251,7 +7251,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 120) @@ -7273,7 +7273,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 124) @@ -7295,7 +7295,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 128) @@ -7317,7 +7317,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 132) @@ -7339,7 +7339,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 136) @@ -7361,7 +7361,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 140) @@ -7383,7 +7383,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 144) @@ -7405,7 +7405,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 148) @@ -7427,7 +7427,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 154) @@ -7449,7 +7449,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 158) @@ -7468,7 +7468,7 @@ (if (get_global $std/array/includes) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 162) @@ -7487,7 +7487,7 @@ (if (get_global $std/array/includes) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 166) @@ -7509,7 +7509,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 170) @@ -7531,7 +7531,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 174) @@ -7553,7 +7553,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 178) @@ -7575,7 +7575,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 182) @@ -7597,7 +7597,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 186) @@ -7619,7 +7619,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 190) @@ -7641,7 +7641,7 @@ (i32.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 194) @@ -7658,7 +7658,7 @@ (i32.const 5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 195) @@ -7676,7 +7676,7 @@ (i32.const 44) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 196) @@ -7694,7 +7694,7 @@ (i32.const 42) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 197) @@ -7732,7 +7732,7 @@ (if (get_global $std/array/i) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 207) @@ -7753,7 +7753,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 210) @@ -7774,7 +7774,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 213) @@ -7795,7 +7795,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 221) @@ -7812,7 +7812,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 222) @@ -7833,7 +7833,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 224) @@ -7874,7 +7874,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 237) @@ -7891,7 +7891,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 238) @@ -7924,7 +7924,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 246) @@ -7942,7 +7942,7 @@ (if (get_global $std/array/every) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 249) @@ -7963,7 +7963,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 257) @@ -7980,7 +7980,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 258) @@ -7998,7 +7998,7 @@ (if (get_global $std/array/every) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 260) @@ -8039,7 +8039,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 273) @@ -8056,7 +8056,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 274) @@ -8089,7 +8089,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 282) @@ -8107,7 +8107,7 @@ (if (get_global $std/array/some) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 285) @@ -8125,7 +8125,7 @@ (if (get_global $std/array/some) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 293) @@ -8142,7 +8142,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 294) @@ -8163,7 +8163,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 296) @@ -8201,7 +8201,7 @@ (if (get_global $std/array/some) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 309) @@ -8218,7 +8218,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 310) @@ -8252,7 +8252,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 319) @@ -8274,7 +8274,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 328) @@ -8291,7 +8291,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 329) @@ -8313,7 +8313,7 @@ (i32.const 406) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 332) @@ -8355,7 +8355,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 346) @@ -8372,7 +8372,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 347) @@ -8407,7 +8407,7 @@ (i32.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 356) @@ -8430,7 +8430,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 357) @@ -8454,7 +8454,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 366) @@ -8471,7 +8471,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 367) @@ -8495,7 +8495,7 @@ (i32.const 406) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 374) @@ -8539,7 +8539,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 389) @@ -8556,7 +8556,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 390) @@ -8591,7 +8591,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 398) @@ -8615,7 +8615,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 407) @@ -8632,7 +8632,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 408) @@ -8656,7 +8656,7 @@ (i32.const 406) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 415) @@ -8700,7 +8700,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 430) @@ -8717,7 +8717,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 431) @@ -8751,7 +8751,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 439) @@ -8773,7 +8773,7 @@ (i32.const 10) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 443) @@ -8798,7 +8798,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 446) @@ -8820,7 +8820,7 @@ (if (get_global $std/array/boolVal) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 449) @@ -8842,7 +8842,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 457) @@ -8859,7 +8859,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 458) @@ -8881,7 +8881,7 @@ (i32.const 10) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 460) @@ -8923,7 +8923,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 473) @@ -8940,7 +8940,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 474) @@ -8974,7 +8974,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 482) @@ -8996,7 +8996,7 @@ (i32.const 10) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 486) @@ -9021,7 +9021,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 489) @@ -9043,7 +9043,7 @@ (if (get_global $std/array/boolVal) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 492) @@ -9065,7 +9065,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 500) @@ -9082,7 +9082,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 501) @@ -9104,7 +9104,7 @@ (i32.const 10) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 503) @@ -9146,7 +9146,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 516) @@ -9160,7 +9160,7 @@ (get_global $std/array/arr) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 517) @@ -9244,7 +9244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 631) @@ -9265,7 +9265,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 634) @@ -9286,7 +9286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 637) @@ -9307,7 +9307,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 640) @@ -9328,7 +9328,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 643) @@ -9349,7 +9349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 646) @@ -9370,7 +9370,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 649) @@ -9439,7 +9439,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 678) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 7f30806a..d9a5ea81 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -13,7 +13,7 @@ (type $II (func (param i64) (result i64))) (type $iv (func (param i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) @@ -223,7 +223,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 40) (i32.const 22) @@ -610,7 +610,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -2837,7 +2837,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 40) (i32.const 32) @@ -2927,7 +2927,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 40) (i32.const 56) @@ -2988,7 +2988,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 143) @@ -3083,7 +3083,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 154) @@ -3170,7 +3170,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 244) @@ -3262,7 +3262,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 215) @@ -3789,7 +3789,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -4367,7 +4367,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -5375,7 +5375,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 128) (i32.const 1000) @@ -5457,7 +5457,7 @@ (get_global $~lib/math/random_seeded) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 128) (i32.const 1007) @@ -6538,7 +6538,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 605) @@ -6661,7 +6661,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -6758,7 +6758,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -7278,7 +7278,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 605) @@ -7299,7 +7299,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -7420,7 +7420,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -7928,7 +7928,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 605) @@ -8607,7 +8607,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 605) @@ -8771,7 +8771,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -8853,7 +8853,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 728) (i32.const 20) @@ -8891,7 +8891,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 696) (i32.const 18) @@ -8945,7 +8945,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 696) (i32.const 74) @@ -9135,7 +9135,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -9275,7 +9275,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 17) @@ -9294,7 +9294,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 18) @@ -9320,7 +9320,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 22) @@ -9339,7 +9339,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 23) @@ -9358,7 +9358,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 24) @@ -9380,7 +9380,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 28) @@ -9399,7 +9399,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 29) @@ -9418,7 +9418,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 30) @@ -9443,7 +9443,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 34) @@ -9462,7 +9462,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 35) @@ -9482,7 +9482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 36) @@ -9507,7 +9507,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 40) @@ -9526,7 +9526,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 41) @@ -9546,7 +9546,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 42) @@ -9566,7 +9566,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 43) @@ -9591,7 +9591,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 47) @@ -9610,7 +9610,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 48) @@ -9630,7 +9630,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 49) @@ -9650,7 +9650,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 50) @@ -9670,7 +9670,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 51) @@ -9695,7 +9695,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 57) @@ -9714,7 +9714,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 58) @@ -9734,7 +9734,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 59) @@ -9754,7 +9754,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 60) @@ -9774,7 +9774,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 61) @@ -9794,7 +9794,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 62) @@ -9819,7 +9819,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 66) @@ -9838,7 +9838,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 67) @@ -9858,7 +9858,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 68) @@ -9878,7 +9878,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 69) @@ -9898,7 +9898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 70) @@ -9918,7 +9918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 71) @@ -9938,7 +9938,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 72) @@ -9960,7 +9960,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 78) @@ -9979,7 +9979,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 79) @@ -9998,7 +9998,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 80) @@ -10018,7 +10018,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 81) @@ -10038,7 +10038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 82) @@ -10058,7 +10058,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 83) @@ -10078,7 +10078,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 84) @@ -10100,7 +10100,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 88) @@ -10119,7 +10119,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 89) @@ -10138,7 +10138,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 90) @@ -10158,7 +10158,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 91) @@ -10178,7 +10178,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 92) @@ -10198,7 +10198,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 93) @@ -10222,7 +10222,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 99) @@ -10241,7 +10241,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 100) @@ -10261,7 +10261,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 101) @@ -10281,7 +10281,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 102) @@ -10301,7 +10301,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 103) @@ -10337,7 +10337,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 112) @@ -10361,7 +10361,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 116) @@ -10385,7 +10385,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 120) @@ -10409,7 +10409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 124) @@ -10433,7 +10433,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 128) @@ -10457,7 +10457,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 132) @@ -10481,7 +10481,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 136) @@ -10505,7 +10505,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 140) @@ -10529,7 +10529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 144) @@ -10553,7 +10553,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 148) @@ -10577,7 +10577,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 154) @@ -10601,7 +10601,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 158) @@ -10625,7 +10625,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 162) @@ -10649,7 +10649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 166) @@ -10673,7 +10673,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 170) @@ -10697,7 +10697,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 174) @@ -10721,7 +10721,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 178) @@ -10745,7 +10745,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 182) @@ -10769,7 +10769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 186) @@ -10793,7 +10793,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 190) @@ -10817,7 +10817,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 194) @@ -10836,7 +10836,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 195) @@ -10856,7 +10856,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 196) @@ -10876,7 +10876,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 197) @@ -10919,7 +10919,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 207) @@ -10942,7 +10942,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 210) @@ -10965,7 +10965,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 213) @@ -10988,7 +10988,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 221) @@ -11007,7 +11007,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 222) @@ -11030,7 +11030,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 224) @@ -11073,7 +11073,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 237) @@ -11092,7 +11092,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 238) @@ -11127,7 +11127,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 246) @@ -11150,7 +11150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 249) @@ -11173,7 +11173,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 257) @@ -11192,7 +11192,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 258) @@ -11215,7 +11215,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 260) @@ -11258,7 +11258,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 273) @@ -11277,7 +11277,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 274) @@ -11312,7 +11312,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 282) @@ -11335,7 +11335,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 285) @@ -11358,7 +11358,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 293) @@ -11377,7 +11377,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 294) @@ -11400,7 +11400,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 296) @@ -11443,7 +11443,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 309) @@ -11462,7 +11462,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 310) @@ -11498,7 +11498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 319) @@ -11522,7 +11522,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 328) @@ -11541,7 +11541,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 329) @@ -11565,7 +11565,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 332) @@ -11609,7 +11609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 346) @@ -11628,7 +11628,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 347) @@ -11665,7 +11665,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 356) @@ -11690,7 +11690,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 357) @@ -11716,7 +11716,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 366) @@ -11735,7 +11735,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 367) @@ -11761,7 +11761,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 374) @@ -11807,7 +11807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 389) @@ -11826,7 +11826,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 390) @@ -11863,7 +11863,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 398) @@ -11889,7 +11889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 407) @@ -11908,7 +11908,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 408) @@ -11934,7 +11934,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 415) @@ -11980,7 +11980,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 430) @@ -11999,7 +11999,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 431) @@ -12035,7 +12035,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 439) @@ -12059,7 +12059,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 443) @@ -12086,7 +12086,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 446) @@ -12113,7 +12113,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 449) @@ -12137,7 +12137,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 457) @@ -12156,7 +12156,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 458) @@ -12180,7 +12180,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 460) @@ -12224,7 +12224,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 473) @@ -12243,7 +12243,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 474) @@ -12279,7 +12279,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 482) @@ -12303,7 +12303,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 486) @@ -12330,7 +12330,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 489) @@ -12357,7 +12357,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 492) @@ -12381,7 +12381,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 500) @@ -12400,7 +12400,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 501) @@ -12424,7 +12424,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 503) @@ -12468,7 +12468,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 516) @@ -12487,7 +12487,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 517) @@ -12571,7 +12571,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 631) @@ -12592,7 +12592,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 634) @@ -12613,7 +12613,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 637) @@ -12634,7 +12634,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 640) @@ -12655,7 +12655,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 643) @@ -12676,7 +12676,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 646) @@ -12697,7 +12697,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 649) @@ -12766,7 +12766,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 100) (i32.const 678) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 99128f0f..0dc793b0 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -5,7 +5,7 @@ (type $iiiv (func (param i32 i32 i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/arraybuffer/buffer (mut i32) (i32.const 0)) @@ -129,7 +129,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 52) (i32.const 22) @@ -494,7 +494,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -2540,7 +2540,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 5) @@ -2569,7 +2569,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 9) @@ -2584,7 +2584,7 @@ (get_global $std/arraybuffer/buffer) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 10) @@ -2613,7 +2613,7 @@ (i32.const 7) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 14) @@ -2642,7 +2642,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 18) @@ -2666,7 +2666,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 22) @@ -2690,7 +2690,7 @@ (i32.const 6) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 26) @@ -2714,7 +2714,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 30) @@ -2738,7 +2738,7 @@ (i32.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 34) @@ -2764,7 +2764,7 @@ (get_global $std/arraybuffer/sliced) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 38) @@ -2778,7 +2778,7 @@ (get_global $std/arraybuffer/sliced) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 39) diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index 99c3005b..2ccb2f63 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -5,7 +5,7 @@ (type $iiiv (func (param i32 i32 i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -163,7 +163,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 52) (i32.const 22) @@ -547,7 +547,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -2875,7 +2875,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 5) @@ -2906,7 +2906,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 9) @@ -2923,7 +2923,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 10) @@ -2954,7 +2954,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 14) @@ -2985,7 +2985,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 18) @@ -3011,7 +3011,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 22) @@ -3037,7 +3037,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 26) @@ -3063,7 +3063,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 30) @@ -3089,7 +3089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 34) @@ -3120,7 +3120,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 38) @@ -3137,7 +3137,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 112) (i32.const 39) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 14dfa4ed..e2bbd7e6 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -22,7 +22,7 @@ (type $II (func (param i64) (result i64))) (type $f (func (result f32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "JSMath" "E" (global $~lib/math/JSMath.E f64)) (import "env" "logf" (func $std/math/logf (param f64))) (import "JSMath" "LN2" (global $~lib/math/JSMath.LN2 f64)) @@ -11841,7 +11841,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 36) (i32.const 1000) @@ -11872,7 +11872,7 @@ (get_global $~lib/math/random_seeded) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 36) (i32.const 1007) @@ -13848,7 +13848,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 119) @@ -13867,7 +13867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 120) @@ -13886,7 +13886,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 121) @@ -13905,7 +13905,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 122) @@ -13924,7 +13924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 123) @@ -13943,7 +13943,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 124) @@ -13962,7 +13962,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 125) @@ -13983,7 +13983,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 127) @@ -14004,7 +14004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 128) @@ -14025,7 +14025,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 129) @@ -14046,7 +14046,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 130) @@ -14067,7 +14067,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 131) @@ -14088,7 +14088,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 132) @@ -14109,7 +14109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 133) @@ -14129,7 +14129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 144) @@ -14149,7 +14149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 145) @@ -14169,7 +14169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 146) @@ -14189,7 +14189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 147) @@ -14209,7 +14209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 148) @@ -14229,7 +14229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 149) @@ -14249,7 +14249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 150) @@ -14269,7 +14269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 151) @@ -14289,7 +14289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 152) @@ -14309,7 +14309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 153) @@ -14329,7 +14329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 156) @@ -14349,7 +14349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 157) @@ -14369,7 +14369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 158) @@ -14389,7 +14389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 159) @@ -14409,7 +14409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 160) @@ -14429,7 +14429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 161) @@ -14449,7 +14449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 162) @@ -14469,7 +14469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 163) @@ -14489,7 +14489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 164) @@ -14509,7 +14509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 165) @@ -14529,7 +14529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 166) @@ -14549,7 +14549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 167) @@ -14569,7 +14569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 168) @@ -14589,7 +14589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 169) @@ -14609,7 +14609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 170) @@ -14629,7 +14629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 171) @@ -14649,7 +14649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 172) @@ -14669,7 +14669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 173) @@ -14689,7 +14689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 174) @@ -14709,7 +14709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 183) @@ -14729,7 +14729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 184) @@ -14749,7 +14749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 185) @@ -14769,7 +14769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 186) @@ -14789,7 +14789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 187) @@ -14809,7 +14809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 188) @@ -14829,7 +14829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 189) @@ -14849,7 +14849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 190) @@ -14869,7 +14869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 191) @@ -14889,7 +14889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 192) @@ -14909,7 +14909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 195) @@ -14929,7 +14929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 196) @@ -14949,7 +14949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 197) @@ -14969,7 +14969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 198) @@ -14989,7 +14989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 199) @@ -15009,7 +15009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 200) @@ -15029,7 +15029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 201) @@ -15049,7 +15049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 202) @@ -15069,7 +15069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 203) @@ -15089,7 +15089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 204) @@ -15109,7 +15109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 205) @@ -15129,7 +15129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 206) @@ -15149,7 +15149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 207) @@ -15169,7 +15169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 208) @@ -15189,7 +15189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 209) @@ -15209,7 +15209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 210) @@ -15229,7 +15229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 211) @@ -15249,7 +15249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 212) @@ -15269,7 +15269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 213) @@ -15288,7 +15288,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 225) @@ -15307,7 +15307,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 226) @@ -15326,7 +15326,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 227) @@ -15345,7 +15345,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 228) @@ -15364,7 +15364,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 229) @@ -15383,7 +15383,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 230) @@ -15402,7 +15402,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 231) @@ -15421,7 +15421,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 232) @@ -15440,7 +15440,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 233) @@ -15459,7 +15459,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 234) @@ -15478,7 +15478,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 237) @@ -15497,7 +15497,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 238) @@ -15516,7 +15516,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 239) @@ -15535,7 +15535,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 240) @@ -15554,7 +15554,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 241) @@ -15573,7 +15573,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 242) @@ -15592,7 +15592,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 243) @@ -15611,7 +15611,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 252) @@ -15630,7 +15630,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 253) @@ -15649,7 +15649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 254) @@ -15668,7 +15668,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 255) @@ -15687,7 +15687,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 256) @@ -15706,7 +15706,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 257) @@ -15725,7 +15725,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 258) @@ -15744,7 +15744,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 259) @@ -15763,7 +15763,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 260) @@ -15782,7 +15782,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 261) @@ -15801,7 +15801,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 264) @@ -15820,7 +15820,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 265) @@ -15839,7 +15839,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 266) @@ -15858,7 +15858,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 267) @@ -15877,7 +15877,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 268) @@ -15896,7 +15896,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 269) @@ -15915,7 +15915,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 270) @@ -15934,7 +15934,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 282) @@ -15953,7 +15953,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 283) @@ -15972,7 +15972,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 284) @@ -15991,7 +15991,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 285) @@ -16010,7 +16010,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 286) @@ -16029,7 +16029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 287) @@ -16048,7 +16048,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 288) @@ -16067,7 +16067,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 289) @@ -16086,7 +16086,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 290) @@ -16105,7 +16105,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 291) @@ -16124,7 +16124,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 294) @@ -16143,7 +16143,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 295) @@ -16162,7 +16162,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 296) @@ -16181,7 +16181,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 297) @@ -16200,7 +16200,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 298) @@ -16219,7 +16219,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 299) @@ -16238,7 +16238,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 300) @@ -16257,7 +16257,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 301) @@ -16276,7 +16276,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 302) @@ -16295,7 +16295,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 303) @@ -16314,7 +16314,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 312) @@ -16333,7 +16333,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 313) @@ -16352,7 +16352,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 314) @@ -16371,7 +16371,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 315) @@ -16390,7 +16390,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 316) @@ -16409,7 +16409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 317) @@ -16428,7 +16428,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 318) @@ -16447,7 +16447,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 319) @@ -16466,7 +16466,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 320) @@ -16485,7 +16485,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 321) @@ -16504,7 +16504,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 324) @@ -16523,7 +16523,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 325) @@ -16542,7 +16542,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 326) @@ -16561,7 +16561,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 327) @@ -16580,7 +16580,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 328) @@ -16599,7 +16599,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 329) @@ -16618,7 +16618,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 330) @@ -16637,7 +16637,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 331) @@ -16656,7 +16656,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 332) @@ -16675,7 +16675,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 333) @@ -16694,7 +16694,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 334) @@ -16713,7 +16713,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 346) @@ -16732,7 +16732,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 347) @@ -16751,7 +16751,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 348) @@ -16770,7 +16770,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 349) @@ -16789,7 +16789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 350) @@ -16808,7 +16808,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 351) @@ -16827,7 +16827,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 352) @@ -16846,7 +16846,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 353) @@ -16865,7 +16865,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 354) @@ -16884,7 +16884,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 355) @@ -16903,7 +16903,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 358) @@ -16922,7 +16922,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 359) @@ -16941,7 +16941,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 360) @@ -16960,7 +16960,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 361) @@ -16979,7 +16979,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 362) @@ -16998,7 +16998,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 363) @@ -17017,7 +17017,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 364) @@ -17036,7 +17036,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 380) @@ -17055,7 +17055,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 382) @@ -17074,7 +17074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 383) @@ -17093,7 +17093,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 392) @@ -17112,7 +17112,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 393) @@ -17131,7 +17131,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 394) @@ -17150,7 +17150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 395) @@ -17169,7 +17169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 396) @@ -17188,7 +17188,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 397) @@ -17207,7 +17207,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 398) @@ -17226,7 +17226,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 399) @@ -17245,7 +17245,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 400) @@ -17264,7 +17264,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 401) @@ -17283,7 +17283,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 404) @@ -17302,7 +17302,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 405) @@ -17321,7 +17321,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 406) @@ -17340,7 +17340,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 407) @@ -17359,7 +17359,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 408) @@ -17378,7 +17378,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 409) @@ -17397,7 +17397,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 410) @@ -17416,7 +17416,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 411) @@ -17435,7 +17435,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 423) @@ -17454,7 +17454,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 424) @@ -17473,7 +17473,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 425) @@ -17492,7 +17492,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 426) @@ -17511,7 +17511,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 427) @@ -17530,7 +17530,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 428) @@ -17549,7 +17549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 429) @@ -17568,7 +17568,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 430) @@ -17587,7 +17587,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 431) @@ -17606,7 +17606,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 432) @@ -17625,7 +17625,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 435) @@ -17644,7 +17644,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 436) @@ -17663,7 +17663,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 437) @@ -17682,7 +17682,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 438) @@ -17701,7 +17701,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 439) @@ -17720,7 +17720,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 440) @@ -17739,7 +17739,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 441) @@ -17758,7 +17758,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 442) @@ -17777,7 +17777,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 443) @@ -17796,7 +17796,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 444) @@ -17815,7 +17815,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 453) @@ -17834,7 +17834,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 454) @@ -17853,7 +17853,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 455) @@ -17872,7 +17872,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 456) @@ -17891,7 +17891,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 457) @@ -17910,7 +17910,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 458) @@ -17929,7 +17929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 459) @@ -17948,7 +17948,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 460) @@ -17967,7 +17967,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 461) @@ -17986,7 +17986,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 462) @@ -18005,7 +18005,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 465) @@ -18024,7 +18024,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 466) @@ -18043,7 +18043,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 467) @@ -18062,7 +18062,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 468) @@ -18081,7 +18081,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 469) @@ -18100,7 +18100,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 470) @@ -18119,7 +18119,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 471) @@ -18138,7 +18138,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 472) @@ -18157,7 +18157,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 473) @@ -18176,7 +18176,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 474) @@ -18195,7 +18195,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 486) @@ -18214,7 +18214,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 487) @@ -18233,7 +18233,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 488) @@ -18252,7 +18252,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 489) @@ -18271,7 +18271,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 490) @@ -18290,7 +18290,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 491) @@ -18309,7 +18309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 492) @@ -18328,7 +18328,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 493) @@ -18347,7 +18347,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 494) @@ -18366,7 +18366,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 495) @@ -18385,7 +18385,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 498) @@ -18404,7 +18404,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 499) @@ -18423,7 +18423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 500) @@ -18442,7 +18442,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 501) @@ -18461,7 +18461,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 502) @@ -18480,7 +18480,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 531) @@ -18499,7 +18499,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 532) @@ -18518,7 +18518,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 533) @@ -18537,7 +18537,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 534) @@ -18556,7 +18556,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 535) @@ -18575,7 +18575,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 536) @@ -18594,7 +18594,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 537) @@ -18613,7 +18613,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 538) @@ -18632,7 +18632,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 539) @@ -18651,7 +18651,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 540) @@ -18670,7 +18670,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 543) @@ -18689,7 +18689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 544) @@ -18708,7 +18708,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 545) @@ -18727,7 +18727,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 546) @@ -18746,7 +18746,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 547) @@ -18765,7 +18765,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 559) @@ -18784,7 +18784,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 560) @@ -18803,7 +18803,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 561) @@ -18822,7 +18822,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 562) @@ -18841,7 +18841,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 563) @@ -18860,7 +18860,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 564) @@ -18879,7 +18879,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 565) @@ -18898,7 +18898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 566) @@ -18917,7 +18917,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 567) @@ -18936,7 +18936,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 568) @@ -18955,7 +18955,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 571) @@ -18974,7 +18974,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 572) @@ -18993,7 +18993,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 573) @@ -19012,7 +19012,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 574) @@ -19031,7 +19031,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 575) @@ -19050,7 +19050,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 576) @@ -19069,7 +19069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 577) @@ -19088,7 +19088,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 578) @@ -19107,7 +19107,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 587) @@ -19126,7 +19126,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 588) @@ -19145,7 +19145,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 589) @@ -19164,7 +19164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 590) @@ -19183,7 +19183,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 591) @@ -19202,7 +19202,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 592) @@ -19221,7 +19221,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 593) @@ -19240,7 +19240,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 594) @@ -19259,7 +19259,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 595) @@ -19278,7 +19278,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 596) @@ -19297,7 +19297,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 599) @@ -19316,7 +19316,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 600) @@ -19335,7 +19335,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 601) @@ -19354,7 +19354,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 602) @@ -19373,7 +19373,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 603) @@ -19392,7 +19392,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 604) @@ -19411,7 +19411,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 605) @@ -19430,7 +19430,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 617) @@ -19449,7 +19449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 618) @@ -19468,7 +19468,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 619) @@ -19487,7 +19487,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 620) @@ -19506,7 +19506,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 621) @@ -19525,7 +19525,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 622) @@ -19544,7 +19544,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 623) @@ -19563,7 +19563,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 624) @@ -19582,7 +19582,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 625) @@ -19601,7 +19601,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 626) @@ -19620,7 +19620,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 629) @@ -19639,7 +19639,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 630) @@ -19658,7 +19658,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 631) @@ -19677,7 +19677,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 632) @@ -19696,7 +19696,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 633) @@ -19715,7 +19715,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 634) @@ -19734,7 +19734,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 635) @@ -19753,7 +19753,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 636) @@ -19772,7 +19772,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 637) @@ -19791,7 +19791,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 638) @@ -19810,7 +19810,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 639) @@ -19829,7 +19829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 640) @@ -19848,7 +19848,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 641) @@ -19867,7 +19867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 642) @@ -19886,7 +19886,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 651) @@ -19905,7 +19905,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 652) @@ -19924,7 +19924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 653) @@ -19943,7 +19943,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 654) @@ -19962,7 +19962,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 655) @@ -19981,7 +19981,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 656) @@ -20000,7 +20000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 657) @@ -20019,7 +20019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 658) @@ -20038,7 +20038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 659) @@ -20057,7 +20057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 660) @@ -20076,7 +20076,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 663) @@ -20095,7 +20095,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 664) @@ -20114,7 +20114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 665) @@ -20133,7 +20133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 666) @@ -20152,7 +20152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 667) @@ -20171,7 +20171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 668) @@ -20190,7 +20190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 669) @@ -20209,7 +20209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 670) @@ -20228,7 +20228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 671) @@ -20247,7 +20247,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 672) @@ -20266,7 +20266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 673) @@ -20285,7 +20285,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 674) @@ -20304,7 +20304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 675) @@ -20323,7 +20323,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 676) @@ -20343,7 +20343,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 688) @@ -20363,7 +20363,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 689) @@ -20383,7 +20383,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 690) @@ -20403,7 +20403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 691) @@ -20423,7 +20423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 692) @@ -20443,7 +20443,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 693) @@ -20463,7 +20463,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 694) @@ -20483,7 +20483,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 695) @@ -20503,7 +20503,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 696) @@ -20523,7 +20523,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 697) @@ -20543,7 +20543,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 700) @@ -20563,7 +20563,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 701) @@ -20583,7 +20583,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 702) @@ -20603,7 +20603,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 703) @@ -20623,7 +20623,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 704) @@ -20643,7 +20643,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 705) @@ -20663,7 +20663,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 706) @@ -20683,7 +20683,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 707) @@ -20703,7 +20703,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 708) @@ -20723,7 +20723,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 709) @@ -20743,7 +20743,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 710) @@ -20763,7 +20763,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 711) @@ -20783,7 +20783,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 712) @@ -20803,7 +20803,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 713) @@ -20823,7 +20823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 714) @@ -20843,7 +20843,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 715) @@ -20863,7 +20863,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 716) @@ -20883,7 +20883,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 717) @@ -20903,7 +20903,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 718) @@ -20923,7 +20923,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 719) @@ -20943,7 +20943,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 720) @@ -20963,7 +20963,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 721) @@ -20983,7 +20983,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 722) @@ -21003,7 +21003,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 723) @@ -21023,7 +21023,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 724) @@ -21043,7 +21043,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 725) @@ -21063,7 +21063,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 726) @@ -21083,7 +21083,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 727) @@ -21103,7 +21103,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 728) @@ -21123,7 +21123,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 729) @@ -21143,7 +21143,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 738) @@ -21163,7 +21163,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 739) @@ -21183,7 +21183,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 740) @@ -21203,7 +21203,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 741) @@ -21223,7 +21223,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 742) @@ -21243,7 +21243,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 743) @@ -21263,7 +21263,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 744) @@ -21283,7 +21283,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 745) @@ -21303,7 +21303,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 746) @@ -21323,7 +21323,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 747) @@ -21343,7 +21343,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 750) @@ -21363,7 +21363,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 751) @@ -21383,7 +21383,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 752) @@ -21403,7 +21403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 753) @@ -21423,7 +21423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 754) @@ -21443,7 +21443,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 755) @@ -21463,7 +21463,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 756) @@ -21483,7 +21483,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 757) @@ -21503,7 +21503,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 758) @@ -21523,7 +21523,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 759) @@ -21543,7 +21543,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 760) @@ -21563,7 +21563,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 761) @@ -21583,7 +21583,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 762) @@ -21603,7 +21603,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 763) @@ -21623,7 +21623,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 764) @@ -21643,7 +21643,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 765) @@ -21663,7 +21663,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 766) @@ -21683,7 +21683,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 767) @@ -21703,7 +21703,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 768) @@ -21723,7 +21723,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 769) @@ -21743,7 +21743,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 770) @@ -21763,7 +21763,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 771) @@ -21783,7 +21783,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 772) @@ -21803,7 +21803,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 773) @@ -21823,7 +21823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 774) @@ -21843,7 +21843,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 775) @@ -21863,7 +21863,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 776) @@ -21883,7 +21883,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 777) @@ -21902,7 +21902,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 789) @@ -21921,7 +21921,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 790) @@ -21940,7 +21940,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 791) @@ -21959,7 +21959,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 792) @@ -21978,7 +21978,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 793) @@ -21997,7 +21997,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 794) @@ -22016,7 +22016,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 795) @@ -22035,7 +22035,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 796) @@ -22054,7 +22054,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 797) @@ -22073,7 +22073,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 798) @@ -22092,7 +22092,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 801) @@ -22111,7 +22111,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 802) @@ -22130,7 +22130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 803) @@ -22149,7 +22149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 804) @@ -22168,7 +22168,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 805) @@ -22187,7 +22187,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 806) @@ -22206,7 +22206,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 807) @@ -22225,7 +22225,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 808) @@ -22244,7 +22244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 809) @@ -22263,7 +22263,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 810) @@ -22282,7 +22282,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 819) @@ -22301,7 +22301,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 820) @@ -22320,7 +22320,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 821) @@ -22339,7 +22339,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 822) @@ -22358,7 +22358,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 823) @@ -22377,7 +22377,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 824) @@ -22396,7 +22396,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 825) @@ -22415,7 +22415,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 826) @@ -22434,7 +22434,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 827) @@ -22453,7 +22453,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 828) @@ -22472,7 +22472,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 831) @@ -22491,7 +22491,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 832) @@ -22510,7 +22510,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 833) @@ -22529,7 +22529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 834) @@ -22548,7 +22548,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 835) @@ -22567,7 +22567,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 836) @@ -22586,7 +22586,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 837) @@ -22605,7 +22605,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 838) @@ -22624,7 +22624,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 839) @@ -22643,7 +22643,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 840) @@ -22662,7 +22662,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 852) @@ -22681,7 +22681,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 853) @@ -22700,7 +22700,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 854) @@ -22719,7 +22719,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 855) @@ -22738,7 +22738,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 856) @@ -22757,7 +22757,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 857) @@ -22776,7 +22776,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 858) @@ -22795,7 +22795,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 859) @@ -22814,7 +22814,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 860) @@ -22833,7 +22833,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 861) @@ -22852,7 +22852,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 864) @@ -22871,7 +22871,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 865) @@ -22890,7 +22890,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 866) @@ -22909,7 +22909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 867) @@ -22928,7 +22928,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 868) @@ -22947,7 +22947,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 869) @@ -22966,7 +22966,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 870) @@ -22985,7 +22985,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 871) @@ -23004,7 +23004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 872) @@ -23023,7 +23023,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 873) @@ -23042,7 +23042,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 874) @@ -23061,7 +23061,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 875) @@ -23080,7 +23080,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 876) @@ -23099,7 +23099,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 877) @@ -23118,7 +23118,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 878) @@ -23137,7 +23137,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 879) @@ -23156,7 +23156,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 880) @@ -23175,7 +23175,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 881) @@ -23194,7 +23194,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 882) @@ -23213,7 +23213,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 883) @@ -23232,7 +23232,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 884) @@ -23251,7 +23251,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 885) @@ -23270,7 +23270,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 886) @@ -23289,7 +23289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 887) @@ -23308,7 +23308,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 888) @@ -23327,7 +23327,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 889) @@ -23346,7 +23346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 890) @@ -23365,7 +23365,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 891) @@ -23384,7 +23384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 892) @@ -23403,7 +23403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 893) @@ -23422,7 +23422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 894) @@ -23441,7 +23441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 895) @@ -23460,7 +23460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 896) @@ -23479,7 +23479,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 897) @@ -23498,7 +23498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 898) @@ -23517,7 +23517,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 899) @@ -23536,7 +23536,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 900) @@ -23555,7 +23555,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 901) @@ -23574,7 +23574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 902) @@ -23593,7 +23593,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 903) @@ -23612,7 +23612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 904) @@ -23631,7 +23631,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 905) @@ -23650,7 +23650,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 906) @@ -23669,7 +23669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 907) @@ -23688,7 +23688,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 908) @@ -23707,7 +23707,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 917) @@ -23726,7 +23726,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 918) @@ -23745,7 +23745,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 919) @@ -23764,7 +23764,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 920) @@ -23783,7 +23783,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 921) @@ -23802,7 +23802,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 922) @@ -23821,7 +23821,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 923) @@ -23840,7 +23840,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 924) @@ -23859,7 +23859,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 925) @@ -23878,7 +23878,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 926) @@ -23897,7 +23897,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 929) @@ -23916,7 +23916,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 930) @@ -23935,7 +23935,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 931) @@ -23954,7 +23954,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 932) @@ -23973,7 +23973,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 933) @@ -23992,7 +23992,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 934) @@ -24011,7 +24011,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 935) @@ -24030,7 +24030,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 936) @@ -24049,7 +24049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 937) @@ -24068,7 +24068,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 938) @@ -24087,7 +24087,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 939) @@ -24106,7 +24106,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 940) @@ -24125,7 +24125,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 941) @@ -24144,7 +24144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 942) @@ -24163,7 +24163,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 943) @@ -24182,7 +24182,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 944) @@ -24201,7 +24201,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 945) @@ -24220,7 +24220,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 946) @@ -24239,7 +24239,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 947) @@ -24258,7 +24258,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 948) @@ -24277,7 +24277,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 949) @@ -24296,7 +24296,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 950) @@ -24315,7 +24315,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 951) @@ -24334,7 +24334,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 952) @@ -24353,7 +24353,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 953) @@ -24372,7 +24372,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 954) @@ -24391,7 +24391,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 955) @@ -24410,7 +24410,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 956) @@ -24429,7 +24429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 957) @@ -24448,7 +24448,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 958) @@ -24467,7 +24467,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 959) @@ -24486,7 +24486,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 960) @@ -24505,7 +24505,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 961) @@ -24524,7 +24524,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 962) @@ -24543,7 +24543,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 963) @@ -24562,7 +24562,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 964) @@ -24581,7 +24581,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 965) @@ -24600,7 +24600,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 966) @@ -24619,7 +24619,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 967) @@ -24638,7 +24638,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 968) @@ -24657,7 +24657,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 969) @@ -24676,7 +24676,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 970) @@ -24695,7 +24695,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 971) @@ -24714,7 +24714,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 972) @@ -24733,7 +24733,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 973) @@ -24752,7 +24752,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1110) @@ -24771,7 +24771,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1111) @@ -24790,7 +24790,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1112) @@ -24809,7 +24809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1113) @@ -24828,7 +24828,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1114) @@ -24847,7 +24847,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1115) @@ -24866,7 +24866,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1116) @@ -24885,7 +24885,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1117) @@ -24904,7 +24904,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1118) @@ -24923,7 +24923,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1119) @@ -24942,7 +24942,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1122) @@ -24961,7 +24961,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1123) @@ -24980,7 +24980,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1124) @@ -24999,7 +24999,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1125) @@ -25018,7 +25018,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1126) @@ -25037,7 +25037,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1135) @@ -25056,7 +25056,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1136) @@ -25075,7 +25075,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1137) @@ -25094,7 +25094,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1138) @@ -25113,7 +25113,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1139) @@ -25132,7 +25132,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1140) @@ -25151,7 +25151,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1141) @@ -25170,7 +25170,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1142) @@ -25189,7 +25189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1143) @@ -25208,7 +25208,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1144) @@ -25227,7 +25227,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1147) @@ -25246,7 +25246,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1148) @@ -25265,7 +25265,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1149) @@ -25284,7 +25284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1150) @@ -25303,7 +25303,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1151) @@ -25322,7 +25322,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1163) @@ -25341,7 +25341,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1164) @@ -25360,7 +25360,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1165) @@ -25379,7 +25379,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1166) @@ -25398,7 +25398,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1167) @@ -25417,7 +25417,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1168) @@ -25436,7 +25436,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1169) @@ -25455,7 +25455,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1170) @@ -25474,7 +25474,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1171) @@ -25493,7 +25493,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1172) @@ -25512,7 +25512,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1175) @@ -25531,7 +25531,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1176) @@ -25550,7 +25550,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1177) @@ -25569,7 +25569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1178) @@ -25588,7 +25588,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1179) @@ -25607,7 +25607,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1180) @@ -25626,7 +25626,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1181) @@ -25645,7 +25645,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1182) @@ -25664,7 +25664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1183) @@ -25683,7 +25683,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1184) @@ -25702,7 +25702,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1185) @@ -25721,7 +25721,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1194) @@ -25740,7 +25740,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1195) @@ -25759,7 +25759,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1196) @@ -25778,7 +25778,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1197) @@ -25797,7 +25797,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1198) @@ -25816,7 +25816,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1199) @@ -25835,7 +25835,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1200) @@ -25854,7 +25854,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1201) @@ -25873,7 +25873,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1202) @@ -25892,7 +25892,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1203) @@ -25911,7 +25911,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1206) @@ -25930,7 +25930,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1207) @@ -25949,7 +25949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1208) @@ -25968,7 +25968,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1209) @@ -25987,7 +25987,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1210) @@ -26006,7 +26006,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1211) @@ -26025,7 +26025,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1212) @@ -26044,7 +26044,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1213) @@ -26063,7 +26063,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1214) @@ -26082,7 +26082,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1215) @@ -26101,7 +26101,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1216) @@ -26120,7 +26120,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1217) @@ -26139,7 +26139,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1218) @@ -26158,7 +26158,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1219) @@ -26177,7 +26177,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1231) @@ -26196,7 +26196,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1232) @@ -26215,7 +26215,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1233) @@ -26234,7 +26234,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1234) @@ -26253,7 +26253,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1235) @@ -26272,7 +26272,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1236) @@ -26291,7 +26291,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1237) @@ -26310,7 +26310,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1238) @@ -26329,7 +26329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1239) @@ -26348,7 +26348,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1240) @@ -26367,7 +26367,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1243) @@ -26386,7 +26386,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1244) @@ -26405,7 +26405,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1245) @@ -26424,7 +26424,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1246) @@ -26443,7 +26443,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1247) @@ -26462,7 +26462,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1248) @@ -26481,7 +26481,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1249) @@ -26500,7 +26500,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1250) @@ -26519,7 +26519,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1251) @@ -26538,7 +26538,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1260) @@ -26557,7 +26557,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1261) @@ -26576,7 +26576,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1262) @@ -26595,7 +26595,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1263) @@ -26614,7 +26614,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1264) @@ -26633,7 +26633,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1265) @@ -26652,7 +26652,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1266) @@ -26671,7 +26671,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1267) @@ -26690,7 +26690,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1268) @@ -26709,7 +26709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1269) @@ -26728,7 +26728,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1272) @@ -26747,7 +26747,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1273) @@ -26766,7 +26766,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1274) @@ -26785,7 +26785,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1275) @@ -26804,7 +26804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1276) @@ -26823,7 +26823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1277) @@ -26842,7 +26842,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1278) @@ -26861,7 +26861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1290) @@ -26880,7 +26880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1291) @@ -26899,7 +26899,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1292) @@ -26918,7 +26918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1293) @@ -26937,7 +26937,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1294) @@ -26956,7 +26956,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1295) @@ -26975,7 +26975,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1296) @@ -26994,7 +26994,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1297) @@ -27013,7 +27013,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1298) @@ -27032,7 +27032,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1299) @@ -27051,7 +27051,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1302) @@ -27070,7 +27070,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1303) @@ -27089,7 +27089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1304) @@ -27108,7 +27108,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1305) @@ -27127,7 +27127,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1306) @@ -27146,7 +27146,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1307) @@ -27165,7 +27165,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1308) @@ -27184,7 +27184,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1309) @@ -27203,7 +27203,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1310) @@ -27222,7 +27222,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1311) @@ -27241,7 +27241,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1312) @@ -27260,7 +27260,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1313) @@ -27279,7 +27279,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1314) @@ -27298,7 +27298,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1315) @@ -27317,7 +27317,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1316) @@ -27336,7 +27336,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1325) @@ -27355,7 +27355,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1326) @@ -27374,7 +27374,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1327) @@ -27393,7 +27393,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1328) @@ -27412,7 +27412,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1329) @@ -27431,7 +27431,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1330) @@ -27450,7 +27450,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1331) @@ -27469,7 +27469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1332) @@ -27488,7 +27488,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1333) @@ -27507,7 +27507,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1334) @@ -27526,7 +27526,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1337) @@ -27545,7 +27545,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1338) @@ -27564,7 +27564,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1339) @@ -27583,7 +27583,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1340) @@ -27602,7 +27602,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1341) @@ -27621,7 +27621,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1342) @@ -27640,7 +27640,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1343) @@ -27659,7 +27659,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1344) @@ -27678,7 +27678,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1345) @@ -27697,7 +27697,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1346) @@ -27716,7 +27716,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1347) @@ -27735,7 +27735,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1348) @@ -27754,7 +27754,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1349) @@ -27773,7 +27773,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1350) @@ -27792,7 +27792,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1351) @@ -27812,7 +27812,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1363) @@ -27832,7 +27832,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1364) @@ -27852,7 +27852,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1365) @@ -27872,7 +27872,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1366) @@ -27892,7 +27892,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1367) @@ -27912,7 +27912,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1368) @@ -27932,7 +27932,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1369) @@ -27952,7 +27952,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1370) @@ -27972,7 +27972,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1371) @@ -27992,7 +27992,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1372) @@ -28012,7 +28012,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1375) @@ -28032,7 +28032,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1376) @@ -28052,7 +28052,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1377) @@ -28072,7 +28072,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1378) @@ -28092,7 +28092,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1379) @@ -28112,7 +28112,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1380) @@ -28132,7 +28132,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1381) @@ -28152,7 +28152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1382) @@ -28172,7 +28172,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1383) @@ -28192,7 +28192,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1384) @@ -28212,7 +28212,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1385) @@ -28232,7 +28232,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1386) @@ -28252,7 +28252,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1387) @@ -28272,7 +28272,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1388) @@ -28292,7 +28292,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1389) @@ -28312,7 +28312,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1390) @@ -28332,7 +28332,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1391) @@ -28352,7 +28352,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1392) @@ -28372,7 +28372,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1393) @@ -28392,7 +28392,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1402) @@ -28412,7 +28412,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1403) @@ -28432,7 +28432,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1404) @@ -28452,7 +28452,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1405) @@ -28472,7 +28472,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1406) @@ -28492,7 +28492,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1407) @@ -28512,7 +28512,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1408) @@ -28532,7 +28532,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1409) @@ -28552,7 +28552,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1410) @@ -28572,7 +28572,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1411) @@ -28592,7 +28592,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1414) @@ -28612,7 +28612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1415) @@ -28632,7 +28632,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1416) @@ -28652,7 +28652,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1417) @@ -28672,7 +28672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1418) @@ -28692,7 +28692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1419) @@ -28712,7 +28712,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1420) @@ -28732,7 +28732,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1421) @@ -28752,7 +28752,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1422) @@ -28772,7 +28772,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1423) @@ -28792,7 +28792,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1424) @@ -28812,7 +28812,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1425) @@ -28832,7 +28832,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1426) @@ -28852,7 +28852,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1427) @@ -28872,7 +28872,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1428) @@ -28892,7 +28892,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1429) @@ -28912,7 +28912,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1430) @@ -28932,7 +28932,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1431) @@ -28952,7 +28952,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1432) @@ -28971,7 +28971,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1444) @@ -28990,7 +28990,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1445) @@ -29009,7 +29009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1446) @@ -29028,7 +29028,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1447) @@ -29047,7 +29047,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1448) @@ -29066,7 +29066,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1449) @@ -29085,7 +29085,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1450) @@ -29104,7 +29104,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1451) @@ -29123,7 +29123,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1452) @@ -29142,7 +29142,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1453) @@ -29161,7 +29161,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1456) @@ -29180,7 +29180,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1457) @@ -29199,7 +29199,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1458) @@ -29218,7 +29218,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1459) @@ -29237,7 +29237,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1460) @@ -29256,7 +29256,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1461) @@ -29275,7 +29275,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1462) @@ -29294,7 +29294,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1463) @@ -29313,7 +29313,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1472) @@ -29332,7 +29332,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1473) @@ -29351,7 +29351,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1474) @@ -29370,7 +29370,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1475) @@ -29389,7 +29389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1476) @@ -29408,7 +29408,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1477) @@ -29427,7 +29427,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1478) @@ -29446,7 +29446,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1479) @@ -29465,7 +29465,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1482) @@ -29484,7 +29484,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1483) @@ -29503,7 +29503,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1484) @@ -29522,7 +29522,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1485) @@ -29541,7 +29541,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1486) @@ -29560,7 +29560,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1487) @@ -29579,7 +29579,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1488) @@ -29598,7 +29598,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1489) @@ -29617,7 +29617,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1501) @@ -29636,7 +29636,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1502) @@ -29655,7 +29655,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1503) @@ -29674,7 +29674,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1504) @@ -29693,7 +29693,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1505) @@ -29712,7 +29712,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1506) @@ -29731,7 +29731,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1507) @@ -29750,7 +29750,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1508) @@ -29769,7 +29769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1509) @@ -29788,7 +29788,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1510) @@ -29807,7 +29807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1513) @@ -29826,7 +29826,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1514) @@ -29845,7 +29845,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1515) @@ -29864,7 +29864,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1516) @@ -29883,7 +29883,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1517) @@ -29902,7 +29902,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1518) @@ -29921,7 +29921,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1519) @@ -29940,7 +29940,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1520) @@ -29959,7 +29959,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1529) @@ -29978,7 +29978,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1530) @@ -29997,7 +29997,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1531) @@ -30016,7 +30016,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1532) @@ -30035,7 +30035,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1533) @@ -30054,7 +30054,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1534) @@ -30073,7 +30073,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1535) @@ -30092,7 +30092,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1536) @@ -30111,7 +30111,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1537) @@ -30130,7 +30130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1538) @@ -30149,7 +30149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1541) @@ -30168,7 +30168,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1542) @@ -30187,7 +30187,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1543) @@ -30206,7 +30206,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1544) @@ -30225,7 +30225,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1545) @@ -30244,7 +30244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1546) @@ -30263,7 +30263,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1547) @@ -30282,7 +30282,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1548) @@ -30301,7 +30301,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1560) @@ -30320,7 +30320,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1561) @@ -30339,7 +30339,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1562) @@ -30358,7 +30358,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1563) @@ -30377,7 +30377,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1564) @@ -30396,7 +30396,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1565) @@ -30415,7 +30415,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1566) @@ -30434,7 +30434,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1567) @@ -30453,7 +30453,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1568) @@ -30472,7 +30472,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1569) @@ -30491,7 +30491,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1572) @@ -30510,7 +30510,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1573) @@ -30529,7 +30529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1574) @@ -30548,7 +30548,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1575) @@ -30567,7 +30567,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1576) @@ -30586,7 +30586,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1577) @@ -30605,7 +30605,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1578) @@ -30624,7 +30624,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1579) @@ -30643,7 +30643,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1588) @@ -30662,7 +30662,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1589) @@ -30681,7 +30681,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1590) @@ -30700,7 +30700,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1591) @@ -30719,7 +30719,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1592) @@ -30738,7 +30738,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1593) @@ -30757,7 +30757,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1594) @@ -30776,7 +30776,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1595) @@ -30795,7 +30795,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1596) @@ -30814,7 +30814,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1597) @@ -30833,7 +30833,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1600) @@ -30852,7 +30852,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1601) @@ -30871,7 +30871,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1602) @@ -30890,7 +30890,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1603) @@ -30909,7 +30909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1604) @@ -30928,7 +30928,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1605) @@ -30947,7 +30947,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1606) @@ -30966,7 +30966,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1607) @@ -30985,7 +30985,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1608) @@ -31004,7 +31004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1620) @@ -31023,7 +31023,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1621) @@ -31042,7 +31042,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1622) @@ -31061,7 +31061,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1623) @@ -31080,7 +31080,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1624) @@ -31099,7 +31099,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1625) @@ -31118,7 +31118,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1626) @@ -31137,7 +31137,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1627) @@ -31156,7 +31156,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1628) @@ -31175,7 +31175,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1629) @@ -31194,7 +31194,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1632) @@ -31213,7 +31213,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1633) @@ -31232,7 +31232,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1634) @@ -31251,7 +31251,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1635) @@ -31270,7 +31270,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1636) @@ -31289,7 +31289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1637) @@ -31308,7 +31308,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1638) @@ -31327,7 +31327,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1639) @@ -31346,7 +31346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1648) @@ -31365,7 +31365,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1649) @@ -31384,7 +31384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1650) @@ -31403,7 +31403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1651) @@ -31422,7 +31422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1652) @@ -31441,7 +31441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1653) @@ -31460,7 +31460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1654) @@ -31479,7 +31479,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1655) @@ -31498,7 +31498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1656) @@ -31517,7 +31517,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1657) @@ -31536,7 +31536,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1660) @@ -31555,7 +31555,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1661) @@ -31574,7 +31574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1662) @@ -31593,7 +31593,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1663) @@ -31612,7 +31612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1664) @@ -31631,7 +31631,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1665) @@ -31650,7 +31650,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1666) @@ -31669,7 +31669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1667) @@ -31689,7 +31689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1679) @@ -31709,7 +31709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1680) @@ -31729,7 +31729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1681) @@ -31749,7 +31749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1682) @@ -31769,7 +31769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1683) @@ -31789,7 +31789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1684) @@ -31809,7 +31809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1685) @@ -31829,7 +31829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1686) @@ -31849,7 +31849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1687) @@ -31869,7 +31869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1688) @@ -31889,7 +31889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1691) @@ -31909,7 +31909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1692) @@ -31929,7 +31929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1693) @@ -31949,7 +31949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1694) @@ -31969,7 +31969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1695) @@ -31989,7 +31989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1696) @@ -32009,7 +32009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1697) @@ -32029,7 +32029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1698) @@ -32049,7 +32049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1699) @@ -32069,7 +32069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1700) @@ -32089,7 +32089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1701) @@ -32109,7 +32109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1702) @@ -32129,7 +32129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1703) @@ -32149,7 +32149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1704) @@ -32169,7 +32169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1705) @@ -32189,7 +32189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1706) @@ -32209,7 +32209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1707) @@ -32229,7 +32229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1708) @@ -32249,7 +32249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1709) @@ -32269,7 +32269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1710) @@ -32289,7 +32289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1711) @@ -32309,7 +32309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1712) @@ -32329,7 +32329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1713) @@ -32349,7 +32349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1714) @@ -32369,7 +32369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1715) @@ -32389,7 +32389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1716) @@ -32409,7 +32409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1717) @@ -32429,7 +32429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1718) @@ -32449,7 +32449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1719) @@ -32469,7 +32469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1720) @@ -32489,7 +32489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1721) @@ -32509,7 +32509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1722) @@ -32529,7 +32529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1723) @@ -32549,7 +32549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1724) @@ -32569,7 +32569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1725) @@ -32589,7 +32589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1726) @@ -32609,7 +32609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1727) @@ -32629,7 +32629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1728) @@ -32649,7 +32649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1729) @@ -32669,7 +32669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1730) @@ -32689,7 +32689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1731) @@ -32709,7 +32709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1732) @@ -32729,7 +32729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1733) @@ -32749,7 +32749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1734) @@ -32769,7 +32769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1735) @@ -32789,7 +32789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1736) @@ -32809,7 +32809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1737) @@ -32829,7 +32829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1738) @@ -32849,7 +32849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1739) @@ -32869,7 +32869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1740) @@ -32889,7 +32889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1741) @@ -32909,7 +32909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1742) @@ -32929,7 +32929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1743) @@ -32949,7 +32949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1744) @@ -32969,7 +32969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1745) @@ -32989,7 +32989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1746) @@ -33009,7 +33009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1747) @@ -33029,7 +33029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1748) @@ -33049,7 +33049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1757) @@ -33069,7 +33069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1758) @@ -33089,7 +33089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1759) @@ -33109,7 +33109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1760) @@ -33129,7 +33129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1761) @@ -33149,7 +33149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1762) @@ -33169,7 +33169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1763) @@ -33189,7 +33189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1764) @@ -33209,7 +33209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1765) @@ -33229,7 +33229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1766) @@ -33249,7 +33249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1769) @@ -33269,7 +33269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1770) @@ -33289,7 +33289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1771) @@ -33309,7 +33309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1772) @@ -33329,7 +33329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1773) @@ -33349,7 +33349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1774) @@ -33369,7 +33369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1775) @@ -33389,7 +33389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1776) @@ -33409,7 +33409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1777) @@ -33429,7 +33429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1778) @@ -33449,7 +33449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1779) @@ -33469,7 +33469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1780) @@ -33489,7 +33489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1781) @@ -33509,7 +33509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1782) @@ -33529,7 +33529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1783) @@ -33549,7 +33549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1784) @@ -33569,7 +33569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1785) @@ -33589,7 +33589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1786) @@ -33609,7 +33609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1787) @@ -33629,7 +33629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1788) @@ -33649,7 +33649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1789) @@ -33669,7 +33669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1790) @@ -33689,7 +33689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1791) @@ -33709,7 +33709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1792) @@ -33729,7 +33729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1793) @@ -33749,7 +33749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1794) @@ -33769,7 +33769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1795) @@ -33789,7 +33789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1796) @@ -33809,7 +33809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1797) @@ -33829,7 +33829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1798) @@ -33849,7 +33849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1799) @@ -33869,7 +33869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1800) @@ -33889,7 +33889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1801) @@ -33909,7 +33909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1802) @@ -33929,7 +33929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1803) @@ -33949,7 +33949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1804) @@ -33969,7 +33969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1805) @@ -33989,7 +33989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1806) @@ -34009,7 +34009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1807) @@ -34029,7 +34029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1808) @@ -34049,7 +34049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1809) @@ -34069,7 +34069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1810) @@ -34089,7 +34089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1811) @@ -34109,7 +34109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1812) @@ -34129,7 +34129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1813) @@ -34149,7 +34149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1814) @@ -34169,7 +34169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1815) @@ -34189,7 +34189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1816) @@ -34209,7 +34209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1817) @@ -34229,7 +34229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1818) @@ -34249,7 +34249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1819) @@ -34269,7 +34269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1820) @@ -34289,7 +34289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1821) @@ -34309,7 +34309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1822) @@ -34329,7 +34329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1823) @@ -34349,7 +34349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1824) @@ -34369,7 +34369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1825) @@ -34389,7 +34389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1826) @@ -34409,7 +34409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1838) @@ -34429,7 +34429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1839) @@ -34449,7 +34449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1840) @@ -34469,7 +34469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1841) @@ -34489,7 +34489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1842) @@ -34509,7 +34509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1843) @@ -34529,7 +34529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1844) @@ -34549,7 +34549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1845) @@ -34569,7 +34569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1846) @@ -34589,7 +34589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1847) @@ -34609,7 +34609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1850) @@ -34629,7 +34629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1851) @@ -34649,7 +34649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1852) @@ -34669,7 +34669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1853) @@ -34689,7 +34689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1854) @@ -34709,7 +34709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1855) @@ -34729,7 +34729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1856) @@ -34749,7 +34749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1857) @@ -34769,7 +34769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1858) @@ -34789,7 +34789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1859) @@ -34809,7 +34809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1860) @@ -34829,7 +34829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1861) @@ -34849,7 +34849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1862) @@ -34869,7 +34869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1863) @@ -34889,7 +34889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1864) @@ -34909,7 +34909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1865) @@ -34929,7 +34929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1866) @@ -34949,7 +34949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1867) @@ -34969,7 +34969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1868) @@ -34989,7 +34989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1869) @@ -35009,7 +35009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1870) @@ -35029,7 +35029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1871) @@ -35049,7 +35049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1872) @@ -35069,7 +35069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1873) @@ -35089,7 +35089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1874) @@ -35109,7 +35109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1875) @@ -35129,7 +35129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1876) @@ -35149,7 +35149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1877) @@ -35169,7 +35169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1878) @@ -35189,7 +35189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1879) @@ -35209,7 +35209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1880) @@ -35229,7 +35229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1881) @@ -35249,7 +35249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1882) @@ -35269,7 +35269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1883) @@ -35289,7 +35289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1884) @@ -35309,7 +35309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1885) @@ -35329,7 +35329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1886) @@ -35349,7 +35349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1887) @@ -35369,7 +35369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1888) @@ -35389,7 +35389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1889) @@ -35409,7 +35409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1890) @@ -35429,7 +35429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1891) @@ -35449,7 +35449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1892) @@ -35469,7 +35469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1893) @@ -35489,7 +35489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1894) @@ -35509,7 +35509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1895) @@ -35529,7 +35529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1896) @@ -35549,7 +35549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1897) @@ -35569,7 +35569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1898) @@ -35589,7 +35589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1899) @@ -35609,7 +35609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1900) @@ -35629,7 +35629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1901) @@ -35649,7 +35649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1902) @@ -35669,7 +35669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1903) @@ -35689,7 +35689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1904) @@ -35709,7 +35709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1905) @@ -35729,7 +35729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1906) @@ -35749,7 +35749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1907) @@ -35769,7 +35769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1916) @@ -35789,7 +35789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1917) @@ -35809,7 +35809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1918) @@ -35829,7 +35829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1919) @@ -35849,7 +35849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1920) @@ -35869,7 +35869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1921) @@ -35889,7 +35889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1922) @@ -35909,7 +35909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1923) @@ -35929,7 +35929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1924) @@ -35949,7 +35949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1925) @@ -35969,7 +35969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1928) @@ -35989,7 +35989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1929) @@ -36009,7 +36009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1930) @@ -36029,7 +36029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1931) @@ -36049,7 +36049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1932) @@ -36069,7 +36069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1933) @@ -36089,7 +36089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1934) @@ -36109,7 +36109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1935) @@ -36129,7 +36129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1936) @@ -36149,7 +36149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1937) @@ -36169,7 +36169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1938) @@ -36189,7 +36189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1939) @@ -36209,7 +36209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1940) @@ -36229,7 +36229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1941) @@ -36249,7 +36249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1942) @@ -36269,7 +36269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1943) @@ -36289,7 +36289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1944) @@ -36309,7 +36309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1945) @@ -36329,7 +36329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1946) @@ -36349,7 +36349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1947) @@ -36369,7 +36369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1948) @@ -36389,7 +36389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1949) @@ -36409,7 +36409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1950) @@ -36429,7 +36429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1951) @@ -36449,7 +36449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1952) @@ -36469,7 +36469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1953) @@ -36489,7 +36489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1954) @@ -36509,7 +36509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1955) @@ -36529,7 +36529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1956) @@ -36549,7 +36549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1957) @@ -36569,7 +36569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1958) @@ -36589,7 +36589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1959) @@ -36609,7 +36609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1960) @@ -36629,7 +36629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1961) @@ -36649,7 +36649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1962) @@ -36669,7 +36669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1963) @@ -36689,7 +36689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1964) @@ -36709,7 +36709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1965) @@ -36729,7 +36729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1966) @@ -36749,7 +36749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1967) @@ -36769,7 +36769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1968) @@ -36789,7 +36789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1969) @@ -36809,7 +36809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1970) @@ -36829,7 +36829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1971) @@ -36849,7 +36849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1972) @@ -36869,7 +36869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1973) @@ -36889,7 +36889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1974) @@ -36909,7 +36909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1975) @@ -36929,7 +36929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1976) @@ -36949,7 +36949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1977) @@ -36969,7 +36969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1978) @@ -36989,7 +36989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1979) @@ -37009,7 +37009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1980) @@ -37029,7 +37029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1981) @@ -37049,7 +37049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1982) @@ -37069,7 +37069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1983) @@ -37089,7 +37089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1984) @@ -37109,7 +37109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1985) @@ -37129,7 +37129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2001) @@ -37149,7 +37149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2002) @@ -37169,7 +37169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2003) @@ -37189,7 +37189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2004) @@ -37209,7 +37209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2005) @@ -37229,7 +37229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2006) @@ -37249,7 +37249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2007) @@ -37269,7 +37269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2008) @@ -37289,7 +37289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2009) @@ -37309,7 +37309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2010) @@ -37329,7 +37329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2013) @@ -37349,7 +37349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2014) @@ -37369,7 +37369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2015) @@ -37389,7 +37389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2016) @@ -37409,7 +37409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2017) @@ -37429,7 +37429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2018) @@ -37449,7 +37449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2019) @@ -37469,7 +37469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2020) @@ -37489,7 +37489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2021) @@ -37509,7 +37509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2022) @@ -37529,7 +37529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2023) @@ -37549,7 +37549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2024) @@ -37569,7 +37569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2025) @@ -37589,7 +37589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2026) @@ -37609,7 +37609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2027) @@ -37629,7 +37629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2028) @@ -37649,7 +37649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2029) @@ -37669,7 +37669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2030) @@ -37689,7 +37689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2031) @@ -37709,7 +37709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2032) @@ -37729,7 +37729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2033) @@ -37749,7 +37749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2034) @@ -37769,7 +37769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2035) @@ -37789,7 +37789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2036) @@ -37809,7 +37809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2037) @@ -37829,7 +37829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2038) @@ -37849,7 +37849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2039) @@ -37869,7 +37869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2040) @@ -37889,7 +37889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2041) @@ -37909,7 +37909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2042) @@ -37929,7 +37929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2043) @@ -37949,7 +37949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2044) @@ -37969,7 +37969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2045) @@ -37989,7 +37989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2046) @@ -38009,7 +38009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2047) @@ -38029,7 +38029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2048) @@ -38049,7 +38049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2049) @@ -38069,7 +38069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2050) @@ -38089,7 +38089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2051) @@ -38109,7 +38109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2052) @@ -38129,7 +38129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2053) @@ -38149,7 +38149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2054) @@ -38169,7 +38169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2055) @@ -38189,7 +38189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2056) @@ -38209,7 +38209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2057) @@ -38229,7 +38229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2058) @@ -38249,7 +38249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2059) @@ -38269,7 +38269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2060) @@ -38289,7 +38289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2061) @@ -38309,7 +38309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2062) @@ -38329,7 +38329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2063) @@ -38349,7 +38349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2064) @@ -38369,7 +38369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2065) @@ -38389,7 +38389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2066) @@ -38409,7 +38409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2067) @@ -38429,7 +38429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2068) @@ -38449,7 +38449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2069) @@ -38469,7 +38469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2070) @@ -38489,7 +38489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2071) @@ -38509,7 +38509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2072) @@ -38529,7 +38529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2073) @@ -38549,7 +38549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2074) @@ -38569,7 +38569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2075) @@ -38589,7 +38589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2076) @@ -38609,7 +38609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2077) @@ -38629,7 +38629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2078) @@ -38649,7 +38649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2087) @@ -38669,7 +38669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2088) @@ -38689,7 +38689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2089) @@ -38709,7 +38709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2090) @@ -38729,7 +38729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2091) @@ -38749,7 +38749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2092) @@ -38769,7 +38769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2093) @@ -38789,7 +38789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2094) @@ -38809,7 +38809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2095) @@ -38829,7 +38829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2096) @@ -38849,7 +38849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2099) @@ -38869,7 +38869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2100) @@ -38889,7 +38889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2101) @@ -38909,7 +38909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2102) @@ -38929,7 +38929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2103) @@ -38949,7 +38949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2104) @@ -38969,7 +38969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2105) @@ -38989,7 +38989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2106) @@ -39009,7 +39009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2107) @@ -39029,7 +39029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2108) @@ -39049,7 +39049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2109) @@ -39069,7 +39069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2110) @@ -39089,7 +39089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2111) @@ -39109,7 +39109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2112) @@ -39129,7 +39129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2113) @@ -39149,7 +39149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2114) @@ -39169,7 +39169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2115) @@ -39189,7 +39189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2116) @@ -39209,7 +39209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2117) @@ -39229,7 +39229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2118) @@ -39249,7 +39249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2119) @@ -39269,7 +39269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2120) @@ -39289,7 +39289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2121) @@ -39309,7 +39309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2122) @@ -39329,7 +39329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2123) @@ -39349,7 +39349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2124) @@ -39369,7 +39369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2125) @@ -39389,7 +39389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2126) @@ -39409,7 +39409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2127) @@ -39429,7 +39429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2128) @@ -39449,7 +39449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2129) @@ -39469,7 +39469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2130) @@ -39489,7 +39489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2131) @@ -39509,7 +39509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2132) @@ -39529,7 +39529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2133) @@ -39549,7 +39549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2134) @@ -39569,7 +39569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2135) @@ -39589,7 +39589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2136) @@ -39609,7 +39609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2137) @@ -39629,7 +39629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2138) @@ -39649,7 +39649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2139) @@ -39669,7 +39669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2140) @@ -39689,7 +39689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2141) @@ -39709,7 +39709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2142) @@ -39729,7 +39729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2143) @@ -39749,7 +39749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2144) @@ -39769,7 +39769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2145) @@ -39789,7 +39789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2146) @@ -39809,7 +39809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2147) @@ -39829,7 +39829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2148) @@ -39849,7 +39849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2149) @@ -39869,7 +39869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2150) @@ -39889,7 +39889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2151) @@ -39909,7 +39909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2152) @@ -39929,7 +39929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2153) @@ -39949,7 +39949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2154) @@ -39969,7 +39969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2155) @@ -39989,7 +39989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2156) @@ -40009,7 +40009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2157) @@ -40029,7 +40029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2158) @@ -40049,7 +40049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2159) @@ -40069,7 +40069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2160) @@ -40089,7 +40089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2161) @@ -40109,7 +40109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2162) @@ -40129,7 +40129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2163) @@ -40149,7 +40149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2164) @@ -40169,7 +40169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2176) @@ -40189,7 +40189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2177) @@ -40209,7 +40209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2178) @@ -40229,7 +40229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2179) @@ -40249,7 +40249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2180) @@ -40269,7 +40269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2181) @@ -40289,7 +40289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2182) @@ -40309,7 +40309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2183) @@ -40329,7 +40329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2184) @@ -40349,7 +40349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2185) @@ -40369,7 +40369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2188) @@ -40389,7 +40389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2189) @@ -40409,7 +40409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2190) @@ -40429,7 +40429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2191) @@ -40449,7 +40449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2192) @@ -40469,7 +40469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2193) @@ -40489,7 +40489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2194) @@ -40509,7 +40509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2195) @@ -40529,7 +40529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2196) @@ -40549,7 +40549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2197) @@ -40569,7 +40569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2198) @@ -40589,7 +40589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2199) @@ -40609,7 +40609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2200) @@ -40629,7 +40629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2201) @@ -40649,7 +40649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2202) @@ -40669,7 +40669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2203) @@ -40689,7 +40689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2204) @@ -40709,7 +40709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2205) @@ -40729,7 +40729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2206) @@ -40749,7 +40749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2207) @@ -40769,7 +40769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2208) @@ -40789,7 +40789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2209) @@ -40809,7 +40809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2210) @@ -40829,7 +40829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2211) @@ -40849,7 +40849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2212) @@ -40869,7 +40869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2213) @@ -40889,7 +40889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2214) @@ -40909,7 +40909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2215) @@ -40929,7 +40929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2216) @@ -40949,7 +40949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2217) @@ -40969,7 +40969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2218) @@ -40989,7 +40989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2219) @@ -41009,7 +41009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2220) @@ -41029,7 +41029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2221) @@ -41049,7 +41049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2222) @@ -41069,7 +41069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2223) @@ -41089,7 +41089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2224) @@ -41109,7 +41109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2225) @@ -41129,7 +41129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2226) @@ -41149,7 +41149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2227) @@ -41169,7 +41169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2228) @@ -41189,7 +41189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2229) @@ -41209,7 +41209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2230) @@ -41229,7 +41229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2231) @@ -41249,7 +41249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2232) @@ -41269,7 +41269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2233) @@ -41289,7 +41289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2234) @@ -41309,7 +41309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2235) @@ -41329,7 +41329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2236) @@ -41349,7 +41349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2237) @@ -41369,7 +41369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2238) @@ -41389,7 +41389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2239) @@ -41409,7 +41409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2240) @@ -41429,7 +41429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2241) @@ -41449,7 +41449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2242) @@ -41469,7 +41469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2243) @@ -41489,7 +41489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2244) @@ -41509,7 +41509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2245) @@ -41529,7 +41529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2246) @@ -41549,7 +41549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2247) @@ -41569,7 +41569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2248) @@ -41589,7 +41589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2249) @@ -41609,7 +41609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2250) @@ -41629,7 +41629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2251) @@ -41649,7 +41649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2252) @@ -41669,7 +41669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2253) @@ -41689,7 +41689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2254) @@ -41709,7 +41709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2255) @@ -41729,7 +41729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2256) @@ -41749,7 +41749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2257) @@ -41769,7 +41769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2258) @@ -41789,7 +41789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2259) @@ -41809,7 +41809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2260) @@ -41829,7 +41829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2261) @@ -41849,7 +41849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2262) @@ -41869,7 +41869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2263) @@ -41889,7 +41889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2264) @@ -41909,7 +41909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2265) @@ -41929,7 +41929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2266) @@ -41949,7 +41949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2267) @@ -41969,7 +41969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2268) @@ -41989,7 +41989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2269) @@ -42009,7 +42009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2270) @@ -42029,7 +42029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2271) @@ -42049,7 +42049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2272) @@ -42069,7 +42069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2273) @@ -42089,7 +42089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2274) @@ -42109,7 +42109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2275) @@ -42129,7 +42129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2276) @@ -42149,7 +42149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2277) @@ -42169,7 +42169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2278) @@ -42189,7 +42189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2279) @@ -42209,7 +42209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2288) @@ -42229,7 +42229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2289) @@ -42249,7 +42249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2290) @@ -42269,7 +42269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2291) @@ -42289,7 +42289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2292) @@ -42309,7 +42309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2293) @@ -42329,7 +42329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2294) @@ -42349,7 +42349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2295) @@ -42369,7 +42369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2296) @@ -42389,7 +42389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2297) @@ -42409,7 +42409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2300) @@ -42429,7 +42429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2301) @@ -42449,7 +42449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2302) @@ -42469,7 +42469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2303) @@ -42489,7 +42489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2304) @@ -42509,7 +42509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2305) @@ -42529,7 +42529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2306) @@ -42549,7 +42549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2307) @@ -42569,7 +42569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2308) @@ -42589,7 +42589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2309) @@ -42609,7 +42609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2310) @@ -42629,7 +42629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2311) @@ -42649,7 +42649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2312) @@ -42669,7 +42669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2313) @@ -42689,7 +42689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2314) @@ -42709,7 +42709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2315) @@ -42729,7 +42729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2316) @@ -42749,7 +42749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2317) @@ -42769,7 +42769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2318) @@ -42789,7 +42789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2319) @@ -42809,7 +42809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2320) @@ -42829,7 +42829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2321) @@ -42849,7 +42849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2322) @@ -42869,7 +42869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2323) @@ -42889,7 +42889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2324) @@ -42909,7 +42909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2325) @@ -42929,7 +42929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2326) @@ -42949,7 +42949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2327) @@ -42969,7 +42969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2328) @@ -42989,7 +42989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2329) @@ -43009,7 +43009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2330) @@ -43029,7 +43029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2331) @@ -43049,7 +43049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2332) @@ -43069,7 +43069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2333) @@ -43089,7 +43089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2334) @@ -43109,7 +43109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2335) @@ -43129,7 +43129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2336) @@ -43149,7 +43149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2337) @@ -43169,7 +43169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2338) @@ -43189,7 +43189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2339) @@ -43209,7 +43209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2340) @@ -43229,7 +43229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2341) @@ -43249,7 +43249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2342) @@ -43269,7 +43269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2343) @@ -43289,7 +43289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2344) @@ -43309,7 +43309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2345) @@ -43329,7 +43329,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2346) @@ -43349,7 +43349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2347) @@ -43369,7 +43369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2348) @@ -43389,7 +43389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2349) @@ -43409,7 +43409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2350) @@ -43429,7 +43429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2351) @@ -43449,7 +43449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2352) @@ -43469,7 +43469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2353) @@ -43489,7 +43489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2354) @@ -43509,7 +43509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2355) @@ -43529,7 +43529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2356) @@ -43549,7 +43549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2357) @@ -43569,7 +43569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2358) @@ -43589,7 +43589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2359) @@ -43609,7 +43609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2360) @@ -43629,7 +43629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2361) @@ -43649,7 +43649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2362) @@ -43669,7 +43669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2363) @@ -43689,7 +43689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2364) @@ -43709,7 +43709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2365) @@ -43729,7 +43729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2366) @@ -43749,7 +43749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2367) @@ -43769,7 +43769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2368) @@ -43789,7 +43789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2369) @@ -43809,7 +43809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2370) @@ -43829,7 +43829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2371) @@ -43849,7 +43849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2372) @@ -43869,7 +43869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2373) @@ -43889,7 +43889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2374) @@ -43909,7 +43909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2375) @@ -43929,7 +43929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2376) @@ -43949,7 +43949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2377) @@ -43969,7 +43969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2378) @@ -43989,7 +43989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2379) @@ -44009,7 +44009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2380) @@ -44029,7 +44029,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2381) @@ -44049,7 +44049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2382) @@ -44069,7 +44069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2383) @@ -44089,7 +44089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2384) @@ -44109,7 +44109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2385) @@ -44129,7 +44129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2386) @@ -44149,7 +44149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2387) @@ -44169,7 +44169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2388) @@ -44189,7 +44189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2389) @@ -44209,7 +44209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2390) @@ -44229,7 +44229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2391) @@ -44271,7 +44271,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2400) @@ -44326,7 +44326,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2408) @@ -44355,7 +44355,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2422) @@ -44374,7 +44374,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2423) @@ -44393,7 +44393,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2424) @@ -44412,7 +44412,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2425) @@ -44431,7 +44431,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2426) @@ -44450,7 +44450,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2427) @@ -44469,7 +44469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2428) @@ -44488,7 +44488,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2429) @@ -44507,7 +44507,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2430) @@ -44526,7 +44526,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2431) @@ -44545,7 +44545,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2434) @@ -44564,7 +44564,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2435) @@ -44583,7 +44583,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2436) @@ -44602,7 +44602,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2437) @@ -44621,7 +44621,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2438) @@ -44640,7 +44640,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2439) @@ -44659,7 +44659,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2440) @@ -44678,7 +44678,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2441) @@ -44697,7 +44697,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2442) @@ -44716,7 +44716,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2443) @@ -44735,7 +44735,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2444) @@ -44754,7 +44754,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2445) @@ -44773,7 +44773,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2446) @@ -44792,7 +44792,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2447) @@ -44811,7 +44811,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2448) @@ -44830,7 +44830,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2449) @@ -44849,7 +44849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2450) @@ -44868,7 +44868,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2459) @@ -44887,7 +44887,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2460) @@ -44906,7 +44906,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2461) @@ -44925,7 +44925,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2462) @@ -44944,7 +44944,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2463) @@ -44963,7 +44963,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2464) @@ -44982,7 +44982,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2465) @@ -45001,7 +45001,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2466) @@ -45020,7 +45020,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2467) @@ -45039,7 +45039,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2468) @@ -45058,7 +45058,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2471) @@ -45077,7 +45077,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2472) @@ -45096,7 +45096,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2473) @@ -45115,7 +45115,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2474) @@ -45134,7 +45134,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2475) @@ -45153,7 +45153,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2476) @@ -45172,7 +45172,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2477) @@ -45191,7 +45191,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2478) @@ -45210,7 +45210,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2479) @@ -45229,7 +45229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2480) @@ -45248,7 +45248,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2481) @@ -45267,7 +45267,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2482) @@ -45286,7 +45286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2483) @@ -45305,7 +45305,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2484) @@ -45324,7 +45324,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2485) @@ -45343,7 +45343,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2486) @@ -45362,7 +45362,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2487) @@ -45381,7 +45381,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2498) @@ -45400,7 +45400,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2499) @@ -45419,7 +45419,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2500) @@ -45438,7 +45438,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2501) @@ -45457,7 +45457,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2502) @@ -45476,7 +45476,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2503) @@ -45495,7 +45495,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2504) @@ -45514,7 +45514,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2505) @@ -45533,7 +45533,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2506) @@ -45552,7 +45552,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2514) @@ -45571,7 +45571,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2515) @@ -45590,7 +45590,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2516) @@ -45609,7 +45609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2517) @@ -45628,7 +45628,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2518) @@ -45647,7 +45647,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2519) @@ -45666,7 +45666,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2520) @@ -45685,7 +45685,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2521) @@ -45704,7 +45704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2522) @@ -45724,7 +45724,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2533) @@ -45744,7 +45744,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2534) @@ -45764,7 +45764,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2535) @@ -45784,7 +45784,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2536) @@ -45804,7 +45804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2537) @@ -45824,7 +45824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2538) @@ -45844,7 +45844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2539) @@ -45864,7 +45864,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2540) @@ -45884,7 +45884,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2541) @@ -45904,7 +45904,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2542) @@ -45924,7 +45924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2545) @@ -45944,7 +45944,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2546) @@ -45964,7 +45964,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2547) @@ -45984,7 +45984,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2548) @@ -46004,7 +46004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2549) @@ -46024,7 +46024,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2550) @@ -46044,7 +46044,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2551) @@ -46064,7 +46064,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2552) @@ -46084,7 +46084,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2553) @@ -46104,7 +46104,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2554) @@ -46124,7 +46124,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2555) @@ -46144,7 +46144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2556) @@ -46164,7 +46164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2557) @@ -46184,7 +46184,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2558) @@ -46204,7 +46204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2559) @@ -46224,7 +46224,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2560) @@ -46244,7 +46244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2561) @@ -46264,7 +46264,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2562) @@ -46284,7 +46284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2563) @@ -46304,7 +46304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2564) @@ -46324,7 +46324,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2565) @@ -46344,7 +46344,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2566) @@ -46364,7 +46364,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2567) @@ -46384,7 +46384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2568) @@ -46404,7 +46404,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2569) @@ -46424,7 +46424,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2570) @@ -46444,7 +46444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2571) @@ -46464,7 +46464,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2572) @@ -46484,7 +46484,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2573) @@ -46504,7 +46504,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2574) @@ -46524,7 +46524,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2575) @@ -46544,7 +46544,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2576) @@ -46564,7 +46564,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2577) @@ -46584,7 +46584,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2578) @@ -46604,7 +46604,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2579) @@ -46624,7 +46624,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2580) @@ -46644,7 +46644,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2581) @@ -46664,7 +46664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2582) @@ -46684,7 +46684,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2583) @@ -46704,7 +46704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2584) @@ -46724,7 +46724,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2585) @@ -46744,7 +46744,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2586) @@ -46764,7 +46764,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2587) @@ -46784,7 +46784,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2588) @@ -46804,7 +46804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2589) @@ -46824,7 +46824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2590) @@ -46844,7 +46844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2591) @@ -46864,7 +46864,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2592) @@ -46884,7 +46884,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2593) @@ -46904,7 +46904,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2594) @@ -46924,7 +46924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2595) @@ -46944,7 +46944,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2596) @@ -46964,7 +46964,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2597) @@ -46984,7 +46984,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2598) @@ -47004,7 +47004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2599) @@ -47024,7 +47024,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2600) @@ -47044,7 +47044,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2601) @@ -47064,7 +47064,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2602) @@ -47084,7 +47084,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2603) @@ -47104,7 +47104,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2604) @@ -47124,7 +47124,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2605) @@ -47144,7 +47144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2606) @@ -47164,7 +47164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2607) @@ -47184,7 +47184,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2608) @@ -47204,7 +47204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2609) @@ -47224,7 +47224,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2610) @@ -47244,7 +47244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2611) @@ -47264,7 +47264,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2620) @@ -47284,7 +47284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2621) @@ -47304,7 +47304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2622) @@ -47324,7 +47324,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2623) @@ -47344,7 +47344,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2624) @@ -47364,7 +47364,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2625) @@ -47384,7 +47384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2626) @@ -47404,7 +47404,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2627) @@ -47424,7 +47424,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2628) @@ -47444,7 +47444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2629) @@ -47464,7 +47464,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2632) @@ -47484,7 +47484,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2633) @@ -47504,7 +47504,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2634) @@ -47524,7 +47524,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2635) @@ -47544,7 +47544,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2636) @@ -47564,7 +47564,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2637) @@ -47584,7 +47584,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2638) @@ -47604,7 +47604,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2639) @@ -47624,7 +47624,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2640) @@ -47644,7 +47644,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2641) @@ -47664,7 +47664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2642) @@ -47684,7 +47684,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2643) @@ -47704,7 +47704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2644) @@ -47724,7 +47724,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2645) @@ -47744,7 +47744,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2646) @@ -47764,7 +47764,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2647) @@ -47784,7 +47784,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2648) @@ -47804,7 +47804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2649) @@ -47824,7 +47824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2650) @@ -47844,7 +47844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2651) @@ -47864,7 +47864,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2652) @@ -47884,7 +47884,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2653) @@ -47904,7 +47904,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2654) @@ -47924,7 +47924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2655) @@ -47944,7 +47944,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2656) @@ -47964,7 +47964,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2657) @@ -47984,7 +47984,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2658) @@ -48004,7 +48004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2659) @@ -48024,7 +48024,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2660) @@ -48044,7 +48044,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2661) @@ -48064,7 +48064,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2662) @@ -48084,7 +48084,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2663) @@ -48104,7 +48104,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2664) @@ -48124,7 +48124,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2665) @@ -48144,7 +48144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2666) @@ -48164,7 +48164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2667) @@ -48184,7 +48184,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2668) @@ -48204,7 +48204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2669) @@ -48224,7 +48224,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2670) @@ -48244,7 +48244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2671) @@ -48264,7 +48264,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2672) @@ -48284,7 +48284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2673) @@ -48304,7 +48304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2674) @@ -48324,7 +48324,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2675) @@ -48344,7 +48344,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2676) @@ -48364,7 +48364,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2677) @@ -48384,7 +48384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2678) @@ -48404,7 +48404,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2679) @@ -48424,7 +48424,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2680) @@ -48444,7 +48444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2681) @@ -48464,7 +48464,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2682) @@ -48484,7 +48484,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2683) @@ -48504,7 +48504,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2684) @@ -48524,7 +48524,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2685) @@ -48544,7 +48544,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2686) @@ -48564,7 +48564,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2687) @@ -48584,7 +48584,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2688) @@ -48604,7 +48604,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2689) @@ -48624,7 +48624,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2690) @@ -48644,7 +48644,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2691) @@ -48664,7 +48664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2692) @@ -48684,7 +48684,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2693) @@ -48704,7 +48704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2694) @@ -48724,7 +48724,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2695) @@ -48744,7 +48744,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2696) @@ -48764,7 +48764,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2697) @@ -48784,7 +48784,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2698) @@ -48803,7 +48803,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2763) @@ -48822,7 +48822,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2764) @@ -48841,7 +48841,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2765) @@ -48860,7 +48860,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2766) @@ -48879,7 +48879,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2767) @@ -48898,7 +48898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2768) @@ -48917,7 +48917,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2769) @@ -48936,7 +48936,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2770) @@ -48955,7 +48955,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2771) @@ -48974,7 +48974,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2772) @@ -48993,7 +48993,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2775) @@ -49012,7 +49012,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2776) @@ -49031,7 +49031,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2777) @@ -49050,7 +49050,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2778) @@ -49069,7 +49069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2779) @@ -49088,7 +49088,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2788) @@ -49107,7 +49107,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2789) @@ -49126,7 +49126,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2790) @@ -49145,7 +49145,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2791) @@ -49164,7 +49164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2792) @@ -49183,7 +49183,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2793) @@ -49202,7 +49202,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2794) @@ -49221,7 +49221,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2795) @@ -49240,7 +49240,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2796) @@ -49259,7 +49259,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2797) @@ -49278,7 +49278,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2800) @@ -49297,7 +49297,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2801) @@ -49316,7 +49316,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2802) @@ -49335,7 +49335,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2803) @@ -49354,7 +49354,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2804) @@ -49373,7 +49373,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2816) @@ -49392,7 +49392,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2817) @@ -49411,7 +49411,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2818) @@ -49430,7 +49430,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2819) @@ -49449,7 +49449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2820) @@ -49468,7 +49468,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2821) @@ -49487,7 +49487,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2822) @@ -49506,7 +49506,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2823) @@ -49525,7 +49525,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2824) @@ -49544,7 +49544,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2825) @@ -49563,7 +49563,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2828) @@ -49582,7 +49582,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2829) @@ -49601,7 +49601,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2830) @@ -49620,7 +49620,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2831) @@ -49639,7 +49639,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2832) @@ -49658,7 +49658,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2833) @@ -49677,7 +49677,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2834) @@ -49696,7 +49696,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2835) @@ -49715,7 +49715,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2836) @@ -49734,7 +49734,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2837) @@ -49753,7 +49753,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2838) @@ -49772,7 +49772,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2839) @@ -49791,7 +49791,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2840) @@ -49810,7 +49810,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2841) @@ -49829,7 +49829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2842) @@ -49848,7 +49848,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2843) @@ -49867,7 +49867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2844) @@ -49886,7 +49886,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2845) @@ -49905,7 +49905,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2846) @@ -49924,7 +49924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2847) @@ -49943,7 +49943,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2848) @@ -49962,7 +49962,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2849) @@ -49981,7 +49981,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2850) @@ -50000,7 +50000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2851) @@ -50019,7 +50019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2852) @@ -50038,7 +50038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2853) @@ -50057,7 +50057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2854) @@ -50076,7 +50076,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2855) @@ -50095,7 +50095,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2856) @@ -50114,7 +50114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2857) @@ -50133,7 +50133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2858) @@ -50152,7 +50152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2859) @@ -50171,7 +50171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2860) @@ -50190,7 +50190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2861) @@ -50209,7 +50209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2862) @@ -50228,7 +50228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2863) @@ -50247,7 +50247,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2864) @@ -50266,7 +50266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2865) @@ -50285,7 +50285,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2866) @@ -50304,7 +50304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2867) @@ -50323,7 +50323,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2868) @@ -50342,7 +50342,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2869) @@ -50361,7 +50361,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2870) @@ -50380,7 +50380,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2871) @@ -50399,7 +50399,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2872) @@ -50418,7 +50418,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2873) @@ -50437,7 +50437,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2874) @@ -50456,7 +50456,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2875) @@ -50475,7 +50475,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2876) @@ -50494,7 +50494,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2877) @@ -50513,7 +50513,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2878) @@ -50532,7 +50532,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2879) @@ -50551,7 +50551,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2880) @@ -50570,7 +50570,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2881) @@ -50589,7 +50589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2882) @@ -50608,7 +50608,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2883) @@ -50627,7 +50627,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2884) @@ -50646,7 +50646,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2885) @@ -50665,7 +50665,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2886) @@ -50684,7 +50684,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2887) @@ -50703,7 +50703,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2888) @@ -50722,7 +50722,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2889) @@ -50741,7 +50741,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2890) @@ -50760,7 +50760,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2891) @@ -50779,7 +50779,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2892) @@ -50798,7 +50798,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2893) @@ -50817,7 +50817,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2894) @@ -50836,7 +50836,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2895) @@ -50855,7 +50855,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2896) @@ -50874,7 +50874,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2897) @@ -50893,7 +50893,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2898) @@ -50912,7 +50912,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2899) @@ -50931,7 +50931,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2900) @@ -50950,7 +50950,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2901) @@ -50969,7 +50969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2910) @@ -50988,7 +50988,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2911) @@ -51007,7 +51007,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2912) @@ -51026,7 +51026,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2913) @@ -51045,7 +51045,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2914) @@ -51064,7 +51064,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2915) @@ -51083,7 +51083,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2916) @@ -51102,7 +51102,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2917) @@ -51121,7 +51121,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2918) @@ -51140,7 +51140,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2919) @@ -51159,7 +51159,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2922) @@ -51178,7 +51178,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2923) @@ -51197,7 +51197,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2924) @@ -51216,7 +51216,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2925) @@ -51235,7 +51235,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2926) @@ -51254,7 +51254,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2927) @@ -51273,7 +51273,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2928) @@ -51292,7 +51292,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2929) @@ -51311,7 +51311,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2930) @@ -51330,7 +51330,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2931) @@ -51349,7 +51349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2932) @@ -51368,7 +51368,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2933) @@ -51387,7 +51387,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2934) @@ -51406,7 +51406,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2935) @@ -51425,7 +51425,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2936) @@ -51444,7 +51444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2937) @@ -51463,7 +51463,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2938) @@ -51482,7 +51482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2939) @@ -51501,7 +51501,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2940) @@ -51520,7 +51520,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2941) @@ -51539,7 +51539,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2942) @@ -51558,7 +51558,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2943) @@ -51577,7 +51577,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3008) @@ -51596,7 +51596,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3009) @@ -51615,7 +51615,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3010) @@ -51634,7 +51634,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3011) @@ -51653,7 +51653,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3012) @@ -51672,7 +51672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3013) @@ -51691,7 +51691,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3014) @@ -51710,7 +51710,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3015) @@ -51729,7 +51729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3016) @@ -51748,7 +51748,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3017) @@ -51767,7 +51767,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3020) @@ -51786,7 +51786,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3021) @@ -51805,7 +51805,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3022) @@ -51824,7 +51824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3023) @@ -51843,7 +51843,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3024) @@ -51862,7 +51862,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3033) @@ -51881,7 +51881,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3034) @@ -51900,7 +51900,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3035) @@ -51919,7 +51919,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3036) @@ -51938,7 +51938,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3037) @@ -51957,7 +51957,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3038) @@ -51976,7 +51976,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3039) @@ -51995,7 +51995,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3040) @@ -52014,7 +52014,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3041) @@ -52033,7 +52033,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3042) @@ -52052,7 +52052,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3045) @@ -52071,7 +52071,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3046) @@ -52090,7 +52090,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3047) @@ -52109,7 +52109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3048) @@ -52128,7 +52128,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3049) @@ -52147,7 +52147,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3061) @@ -52166,7 +52166,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3062) @@ -52185,7 +52185,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3063) @@ -52204,7 +52204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3064) @@ -52223,7 +52223,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3065) @@ -52242,7 +52242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3066) @@ -52261,7 +52261,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3067) @@ -52280,7 +52280,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3068) @@ -52299,7 +52299,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3069) @@ -52318,7 +52318,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3070) @@ -52337,7 +52337,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3073) @@ -52356,7 +52356,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3074) @@ -52375,7 +52375,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3075) @@ -52394,7 +52394,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3076) @@ -52413,7 +52413,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3077) @@ -52432,7 +52432,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3078) @@ -52451,7 +52451,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3079) @@ -52470,7 +52470,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3080) @@ -52489,7 +52489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3081) @@ -52508,7 +52508,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3082) @@ -52527,7 +52527,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3083) @@ -52546,7 +52546,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3084) @@ -52565,7 +52565,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3085) @@ -52584,7 +52584,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3086) @@ -52603,7 +52603,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3087) @@ -52622,7 +52622,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3096) @@ -52641,7 +52641,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3097) @@ -52660,7 +52660,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3098) @@ -52679,7 +52679,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3099) @@ -52698,7 +52698,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3100) @@ -52717,7 +52717,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3101) @@ -52736,7 +52736,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3102) @@ -52755,7 +52755,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3103) @@ -52774,7 +52774,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3104) @@ -52793,7 +52793,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3105) @@ -52812,7 +52812,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3108) @@ -52831,7 +52831,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3109) @@ -52850,7 +52850,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3110) @@ -52869,7 +52869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3111) @@ -52888,7 +52888,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3112) @@ -52907,7 +52907,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3113) @@ -52926,7 +52926,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3114) @@ -52945,7 +52945,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3115) @@ -52964,7 +52964,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3116) @@ -52983,7 +52983,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3117) @@ -53002,7 +53002,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3118) @@ -53021,7 +53021,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3119) @@ -53040,7 +53040,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3120) @@ -53059,7 +53059,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3121) @@ -53078,7 +53078,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3122) diff --git a/tests/compiler/std/math.untouched.wat b/tests/compiler/std/math.untouched.wat index 5956da6d..687de04c 100644 --- a/tests/compiler/std/math.untouched.wat +++ b/tests/compiler/std/math.untouched.wat @@ -22,7 +22,7 @@ (type $II (func (param i64) (result i64))) (type $f (func (result f32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "JSMath" "E" (global $~lib/math/JSMath.E f64)) (import "env" "logf" (func $std/math/logf (param f64))) (import "JSMath" "LN2" (global $~lib/math/JSMath.LN2 f64)) @@ -13998,7 +13998,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 36) (i32.const 1000) @@ -14030,7 +14030,7 @@ (get_global $~lib/math/random_seeded) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 36) (i32.const 1007) @@ -16406,7 +16406,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 112) @@ -16423,7 +16423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 113) @@ -16442,7 +16442,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 119) @@ -16461,7 +16461,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 120) @@ -16480,7 +16480,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 121) @@ -16499,7 +16499,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 122) @@ -16518,7 +16518,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 123) @@ -16537,7 +16537,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 124) @@ -16556,7 +16556,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 125) @@ -16577,7 +16577,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 127) @@ -16598,7 +16598,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 128) @@ -16619,7 +16619,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 129) @@ -16640,7 +16640,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 130) @@ -16661,7 +16661,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 131) @@ -16682,7 +16682,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 132) @@ -16703,7 +16703,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 133) @@ -16723,7 +16723,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 144) @@ -16743,7 +16743,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 145) @@ -16763,7 +16763,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 146) @@ -16783,7 +16783,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 147) @@ -16803,7 +16803,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 148) @@ -16823,7 +16823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 149) @@ -16843,7 +16843,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 150) @@ -16863,7 +16863,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 151) @@ -16883,7 +16883,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 152) @@ -16903,7 +16903,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 153) @@ -16923,7 +16923,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 156) @@ -16943,7 +16943,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 157) @@ -16963,7 +16963,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 158) @@ -16983,7 +16983,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 159) @@ -17003,7 +17003,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 160) @@ -17027,7 +17027,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 161) @@ -17047,7 +17047,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 162) @@ -17067,7 +17067,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 163) @@ -17087,7 +17087,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 164) @@ -17110,7 +17110,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 165) @@ -17130,7 +17130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 166) @@ -17150,7 +17150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 167) @@ -17170,7 +17170,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 168) @@ -17194,7 +17194,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 169) @@ -17214,7 +17214,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 170) @@ -17234,7 +17234,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 171) @@ -17257,7 +17257,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 172) @@ -17280,7 +17280,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 173) @@ -17303,7 +17303,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 174) @@ -17323,7 +17323,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 183) @@ -17343,7 +17343,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 184) @@ -17363,7 +17363,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 185) @@ -17383,7 +17383,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 186) @@ -17403,7 +17403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 187) @@ -17423,7 +17423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 188) @@ -17443,7 +17443,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 189) @@ -17463,7 +17463,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 190) @@ -17483,7 +17483,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 191) @@ -17503,7 +17503,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 192) @@ -17523,7 +17523,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 195) @@ -17543,7 +17543,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 196) @@ -17563,7 +17563,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 197) @@ -17583,7 +17583,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 198) @@ -17603,7 +17603,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 199) @@ -17627,7 +17627,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 200) @@ -17647,7 +17647,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 201) @@ -17667,7 +17667,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 202) @@ -17687,7 +17687,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 203) @@ -17710,7 +17710,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 204) @@ -17730,7 +17730,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 205) @@ -17750,7 +17750,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 206) @@ -17770,7 +17770,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 207) @@ -17794,7 +17794,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 208) @@ -17814,7 +17814,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 209) @@ -17834,7 +17834,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 210) @@ -17857,7 +17857,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 211) @@ -17880,7 +17880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 212) @@ -17903,7 +17903,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 213) @@ -17922,7 +17922,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 225) @@ -17941,7 +17941,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 226) @@ -17960,7 +17960,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 227) @@ -17979,7 +17979,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 228) @@ -17998,7 +17998,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 229) @@ -18017,7 +18017,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 230) @@ -18036,7 +18036,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 231) @@ -18055,7 +18055,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 232) @@ -18074,7 +18074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 233) @@ -18093,7 +18093,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 234) @@ -18112,7 +18112,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 237) @@ -18131,7 +18131,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 238) @@ -18150,7 +18150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 239) @@ -18169,7 +18169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 240) @@ -18188,7 +18188,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 241) @@ -18209,7 +18209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 242) @@ -18228,7 +18228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 243) @@ -18247,7 +18247,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 252) @@ -18266,7 +18266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 253) @@ -18285,7 +18285,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 254) @@ -18304,7 +18304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 255) @@ -18323,7 +18323,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 256) @@ -18342,7 +18342,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 257) @@ -18361,7 +18361,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 258) @@ -18380,7 +18380,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 259) @@ -18399,7 +18399,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 260) @@ -18418,7 +18418,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 261) @@ -18437,7 +18437,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 264) @@ -18456,7 +18456,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 265) @@ -18475,7 +18475,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 266) @@ -18494,7 +18494,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 267) @@ -18513,7 +18513,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 268) @@ -18534,7 +18534,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 269) @@ -18553,7 +18553,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 270) @@ -18572,7 +18572,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 282) @@ -18591,7 +18591,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 283) @@ -18610,7 +18610,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 284) @@ -18629,7 +18629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 285) @@ -18648,7 +18648,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 286) @@ -18667,7 +18667,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 287) @@ -18686,7 +18686,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 288) @@ -18705,7 +18705,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 289) @@ -18724,7 +18724,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 290) @@ -18743,7 +18743,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 291) @@ -18762,7 +18762,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 294) @@ -18781,7 +18781,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 295) @@ -18800,7 +18800,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 296) @@ -18819,7 +18819,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 297) @@ -18838,7 +18838,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 298) @@ -18857,7 +18857,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 299) @@ -18878,7 +18878,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 300) @@ -18897,7 +18897,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 301) @@ -18916,7 +18916,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 302) @@ -18935,7 +18935,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 303) @@ -18954,7 +18954,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 312) @@ -18973,7 +18973,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 313) @@ -18992,7 +18992,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 314) @@ -19011,7 +19011,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 315) @@ -19030,7 +19030,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 316) @@ -19049,7 +19049,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 317) @@ -19068,7 +19068,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 318) @@ -19087,7 +19087,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 319) @@ -19106,7 +19106,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 320) @@ -19125,7 +19125,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 321) @@ -19144,7 +19144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 324) @@ -19163,7 +19163,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 325) @@ -19182,7 +19182,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 326) @@ -19201,7 +19201,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 327) @@ -19220,7 +19220,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 328) @@ -19239,7 +19239,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 329) @@ -19260,7 +19260,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 330) @@ -19279,7 +19279,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 331) @@ -19298,7 +19298,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 332) @@ -19317,7 +19317,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 333) @@ -19336,7 +19336,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 334) @@ -19355,7 +19355,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 346) @@ -19374,7 +19374,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 347) @@ -19393,7 +19393,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 348) @@ -19412,7 +19412,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 349) @@ -19431,7 +19431,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 350) @@ -19450,7 +19450,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 351) @@ -19469,7 +19469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 352) @@ -19488,7 +19488,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 353) @@ -19507,7 +19507,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 354) @@ -19526,7 +19526,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 355) @@ -19545,7 +19545,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 358) @@ -19564,7 +19564,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 359) @@ -19583,7 +19583,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 360) @@ -19602,7 +19602,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 361) @@ -19621,7 +19621,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 362) @@ -19640,7 +19640,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 363) @@ -19661,7 +19661,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 364) @@ -19680,7 +19680,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 380) @@ -19699,7 +19699,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 382) @@ -19718,7 +19718,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 383) @@ -19737,7 +19737,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 392) @@ -19756,7 +19756,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 393) @@ -19775,7 +19775,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 394) @@ -19794,7 +19794,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 395) @@ -19813,7 +19813,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 396) @@ -19832,7 +19832,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 397) @@ -19851,7 +19851,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 398) @@ -19870,7 +19870,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 399) @@ -19889,7 +19889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 400) @@ -19908,7 +19908,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 401) @@ -19927,7 +19927,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 404) @@ -19946,7 +19946,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 405) @@ -19965,7 +19965,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 406) @@ -19984,7 +19984,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 407) @@ -20003,7 +20003,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 408) @@ -20022,7 +20022,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 409) @@ -20043,7 +20043,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 410) @@ -20062,7 +20062,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 411) @@ -20081,7 +20081,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 423) @@ -20100,7 +20100,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 424) @@ -20119,7 +20119,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 425) @@ -20138,7 +20138,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 426) @@ -20157,7 +20157,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 427) @@ -20176,7 +20176,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 428) @@ -20195,7 +20195,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 429) @@ -20214,7 +20214,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 430) @@ -20233,7 +20233,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 431) @@ -20252,7 +20252,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 432) @@ -20271,7 +20271,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 435) @@ -20290,7 +20290,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 436) @@ -20309,7 +20309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 437) @@ -20328,7 +20328,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 438) @@ -20347,7 +20347,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 439) @@ -20366,7 +20366,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 440) @@ -20385,7 +20385,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 441) @@ -20406,7 +20406,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 442) @@ -20425,7 +20425,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 443) @@ -20444,7 +20444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 444) @@ -20463,7 +20463,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 453) @@ -20482,7 +20482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 454) @@ -20501,7 +20501,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 455) @@ -20520,7 +20520,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 456) @@ -20539,7 +20539,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 457) @@ -20558,7 +20558,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 458) @@ -20577,7 +20577,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 459) @@ -20596,7 +20596,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 460) @@ -20615,7 +20615,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 461) @@ -20634,7 +20634,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 462) @@ -20653,7 +20653,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 465) @@ -20672,7 +20672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 466) @@ -20691,7 +20691,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 467) @@ -20710,7 +20710,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 468) @@ -20729,7 +20729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 469) @@ -20748,7 +20748,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 470) @@ -20767,7 +20767,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 471) @@ -20788,7 +20788,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 472) @@ -20807,7 +20807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 473) @@ -20826,7 +20826,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 474) @@ -20845,7 +20845,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 486) @@ -20864,7 +20864,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 487) @@ -20883,7 +20883,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 488) @@ -20902,7 +20902,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 489) @@ -20921,7 +20921,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 490) @@ -20940,7 +20940,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 491) @@ -20959,7 +20959,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 492) @@ -20978,7 +20978,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 493) @@ -20997,7 +20997,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 494) @@ -21016,7 +21016,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 495) @@ -21035,7 +21035,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 498) @@ -21054,7 +21054,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 499) @@ -21077,7 +21077,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 500) @@ -21096,7 +21096,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 501) @@ -21115,7 +21115,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 502) @@ -21134,7 +21134,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 531) @@ -21153,7 +21153,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 532) @@ -21172,7 +21172,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 533) @@ -21191,7 +21191,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 534) @@ -21210,7 +21210,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 535) @@ -21229,7 +21229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 536) @@ -21248,7 +21248,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 537) @@ -21267,7 +21267,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 538) @@ -21286,7 +21286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 539) @@ -21305,7 +21305,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 540) @@ -21324,7 +21324,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 543) @@ -21343,7 +21343,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 544) @@ -21366,7 +21366,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 545) @@ -21385,7 +21385,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 546) @@ -21404,7 +21404,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 547) @@ -21423,7 +21423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 559) @@ -21442,7 +21442,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 560) @@ -21461,7 +21461,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 561) @@ -21480,7 +21480,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 562) @@ -21499,7 +21499,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 563) @@ -21518,7 +21518,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 564) @@ -21537,7 +21537,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 565) @@ -21556,7 +21556,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 566) @@ -21575,7 +21575,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 567) @@ -21594,7 +21594,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 568) @@ -21613,7 +21613,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 571) @@ -21632,7 +21632,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 572) @@ -21651,7 +21651,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 573) @@ -21670,7 +21670,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 574) @@ -21689,7 +21689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 575) @@ -21710,7 +21710,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 576) @@ -21729,7 +21729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 577) @@ -21748,7 +21748,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 578) @@ -21767,7 +21767,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 587) @@ -21786,7 +21786,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 588) @@ -21805,7 +21805,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 589) @@ -21824,7 +21824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 590) @@ -21843,7 +21843,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 591) @@ -21862,7 +21862,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 592) @@ -21881,7 +21881,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 593) @@ -21900,7 +21900,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 594) @@ -21919,7 +21919,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 595) @@ -21938,7 +21938,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 596) @@ -21957,7 +21957,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 599) @@ -21976,7 +21976,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 600) @@ -21995,7 +21995,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 601) @@ -22014,7 +22014,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 602) @@ -22033,7 +22033,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 603) @@ -22054,7 +22054,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 604) @@ -22073,7 +22073,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 605) @@ -22092,7 +22092,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 617) @@ -22111,7 +22111,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 618) @@ -22130,7 +22130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 619) @@ -22149,7 +22149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 620) @@ -22168,7 +22168,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 621) @@ -22187,7 +22187,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 622) @@ -22206,7 +22206,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 623) @@ -22225,7 +22225,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 624) @@ -22244,7 +22244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 625) @@ -22263,7 +22263,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 626) @@ -22282,7 +22282,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 629) @@ -22301,7 +22301,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 630) @@ -22322,7 +22322,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 631) @@ -22341,7 +22341,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 632) @@ -22360,7 +22360,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 633) @@ -22379,7 +22379,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 634) @@ -22400,7 +22400,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 635) @@ -22419,7 +22419,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 636) @@ -22438,7 +22438,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 637) @@ -22457,7 +22457,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 638) @@ -22476,7 +22476,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 639) @@ -22498,7 +22498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 640) @@ -22520,7 +22520,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 641) @@ -22539,7 +22539,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 642) @@ -22558,7 +22558,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 651) @@ -22577,7 +22577,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 652) @@ -22596,7 +22596,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 653) @@ -22615,7 +22615,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 654) @@ -22634,7 +22634,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 655) @@ -22653,7 +22653,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 656) @@ -22672,7 +22672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 657) @@ -22691,7 +22691,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 658) @@ -22710,7 +22710,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 659) @@ -22729,7 +22729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 660) @@ -22748,7 +22748,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 663) @@ -22767,7 +22767,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 664) @@ -22788,7 +22788,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 665) @@ -22807,7 +22807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 666) @@ -22826,7 +22826,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 667) @@ -22845,7 +22845,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 668) @@ -22866,7 +22866,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 669) @@ -22885,7 +22885,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 670) @@ -22904,7 +22904,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 671) @@ -22923,7 +22923,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 672) @@ -22942,7 +22942,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 673) @@ -22964,7 +22964,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 674) @@ -22986,7 +22986,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 675) @@ -23005,7 +23005,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 676) @@ -23025,7 +23025,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 688) @@ -23045,7 +23045,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 689) @@ -23065,7 +23065,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 690) @@ -23085,7 +23085,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 691) @@ -23105,7 +23105,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 692) @@ -23125,7 +23125,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 693) @@ -23145,7 +23145,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 694) @@ -23165,7 +23165,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 695) @@ -23185,7 +23185,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 696) @@ -23205,7 +23205,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 697) @@ -23225,7 +23225,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 700) @@ -23245,7 +23245,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 701) @@ -23265,7 +23265,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 702) @@ -23287,7 +23287,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 703) @@ -23307,7 +23307,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 704) @@ -23327,7 +23327,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 705) @@ -23347,7 +23347,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 706) @@ -23367,7 +23367,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 707) @@ -23387,7 +23387,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 708) @@ -23409,7 +23409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 709) @@ -23429,7 +23429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 710) @@ -23449,7 +23449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 711) @@ -23469,7 +23469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 712) @@ -23489,7 +23489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 713) @@ -23509,7 +23509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 714) @@ -23529,7 +23529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 715) @@ -23549,7 +23549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 716) @@ -23569,7 +23569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 717) @@ -23591,7 +23591,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 718) @@ -23613,7 +23613,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 719) @@ -23633,7 +23633,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 720) @@ -23655,7 +23655,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 721) @@ -23675,7 +23675,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 722) @@ -23697,7 +23697,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 723) @@ -23719,7 +23719,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 724) @@ -23743,7 +23743,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 725) @@ -23766,7 +23766,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 726) @@ -23789,7 +23789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 727) @@ -23812,7 +23812,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 728) @@ -23832,7 +23832,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 729) @@ -23852,7 +23852,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 738) @@ -23872,7 +23872,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 739) @@ -23892,7 +23892,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 740) @@ -23912,7 +23912,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 741) @@ -23932,7 +23932,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 742) @@ -23952,7 +23952,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 743) @@ -23972,7 +23972,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 744) @@ -23992,7 +23992,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 745) @@ -24012,7 +24012,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 746) @@ -24032,7 +24032,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 747) @@ -24052,7 +24052,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 750) @@ -24072,7 +24072,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 751) @@ -24092,7 +24092,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 752) @@ -24114,7 +24114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 753) @@ -24134,7 +24134,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 754) @@ -24154,7 +24154,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 755) @@ -24174,7 +24174,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 756) @@ -24194,7 +24194,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 757) @@ -24214,7 +24214,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 758) @@ -24236,7 +24236,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 759) @@ -24256,7 +24256,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 760) @@ -24276,7 +24276,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 761) @@ -24296,7 +24296,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 762) @@ -24316,7 +24316,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 763) @@ -24336,7 +24336,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 764) @@ -24356,7 +24356,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 765) @@ -24376,7 +24376,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 766) @@ -24396,7 +24396,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 767) @@ -24418,7 +24418,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 768) @@ -24440,7 +24440,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 769) @@ -24460,7 +24460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 770) @@ -24482,7 +24482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 771) @@ -24502,7 +24502,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 772) @@ -24524,7 +24524,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 773) @@ -24546,7 +24546,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 774) @@ -24570,7 +24570,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 775) @@ -24593,7 +24593,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 776) @@ -24616,7 +24616,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 777) @@ -24635,7 +24635,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 789) @@ -24654,7 +24654,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 790) @@ -24673,7 +24673,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 791) @@ -24692,7 +24692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 792) @@ -24711,7 +24711,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 793) @@ -24730,7 +24730,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 794) @@ -24749,7 +24749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 795) @@ -24768,7 +24768,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 796) @@ -24787,7 +24787,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 797) @@ -24806,7 +24806,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 798) @@ -24825,7 +24825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 801) @@ -24844,7 +24844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 802) @@ -24867,7 +24867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 803) @@ -24886,7 +24886,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 804) @@ -24905,7 +24905,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 805) @@ -24924,7 +24924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 806) @@ -24943,7 +24943,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 807) @@ -24962,7 +24962,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 808) @@ -24981,7 +24981,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 809) @@ -25000,7 +25000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 810) @@ -25019,7 +25019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 819) @@ -25038,7 +25038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 820) @@ -25057,7 +25057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 821) @@ -25076,7 +25076,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 822) @@ -25095,7 +25095,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 823) @@ -25114,7 +25114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 824) @@ -25133,7 +25133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 825) @@ -25152,7 +25152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 826) @@ -25171,7 +25171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 827) @@ -25190,7 +25190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 828) @@ -25209,7 +25209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 831) @@ -25228,7 +25228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 832) @@ -25251,7 +25251,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 833) @@ -25270,7 +25270,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 834) @@ -25289,7 +25289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 835) @@ -25308,7 +25308,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 836) @@ -25327,7 +25327,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 837) @@ -25346,7 +25346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 838) @@ -25365,7 +25365,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 839) @@ -25384,7 +25384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 840) @@ -25403,7 +25403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 852) @@ -25422,7 +25422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 853) @@ -25441,7 +25441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 854) @@ -25460,7 +25460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 855) @@ -25479,7 +25479,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 856) @@ -25498,7 +25498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 857) @@ -25517,7 +25517,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 858) @@ -25536,7 +25536,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 859) @@ -25555,7 +25555,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 860) @@ -25574,7 +25574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 861) @@ -25593,7 +25593,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 864) @@ -25612,7 +25612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 865) @@ -25635,7 +25635,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 866) @@ -25654,7 +25654,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 867) @@ -25673,7 +25673,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 868) @@ -25692,7 +25692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 869) @@ -25711,7 +25711,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 870) @@ -25730,7 +25730,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 871) @@ -25749,7 +25749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 872) @@ -25768,7 +25768,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 873) @@ -25787,7 +25787,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 874) @@ -25806,7 +25806,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 875) @@ -25825,7 +25825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 876) @@ -25844,7 +25844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 877) @@ -25863,7 +25863,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 878) @@ -25882,7 +25882,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 879) @@ -25901,7 +25901,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 880) @@ -25924,7 +25924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 881) @@ -25943,7 +25943,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 882) @@ -25962,7 +25962,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 883) @@ -25981,7 +25981,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 884) @@ -26000,7 +26000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 885) @@ -26019,7 +26019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 886) @@ -26038,7 +26038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 887) @@ -26057,7 +26057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 888) @@ -26076,7 +26076,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 889) @@ -26095,7 +26095,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 890) @@ -26114,7 +26114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 891) @@ -26133,7 +26133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 892) @@ -26152,7 +26152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 893) @@ -26171,7 +26171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 894) @@ -26190,7 +26190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 895) @@ -26213,7 +26213,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 896) @@ -26232,7 +26232,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 897) @@ -26251,7 +26251,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 898) @@ -26270,7 +26270,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 899) @@ -26289,7 +26289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 900) @@ -26308,7 +26308,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 901) @@ -26327,7 +26327,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 902) @@ -26346,7 +26346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 903) @@ -26365,7 +26365,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 904) @@ -26384,7 +26384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 905) @@ -26403,7 +26403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 906) @@ -26422,7 +26422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 907) @@ -26441,7 +26441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 908) @@ -26460,7 +26460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 917) @@ -26479,7 +26479,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 918) @@ -26498,7 +26498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 919) @@ -26517,7 +26517,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 920) @@ -26536,7 +26536,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 921) @@ -26555,7 +26555,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 922) @@ -26574,7 +26574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 923) @@ -26593,7 +26593,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 924) @@ -26612,7 +26612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 925) @@ -26631,7 +26631,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 926) @@ -26650,7 +26650,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 929) @@ -26669,7 +26669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 930) @@ -26692,7 +26692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 931) @@ -26711,7 +26711,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 932) @@ -26730,7 +26730,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 933) @@ -26749,7 +26749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 934) @@ -26768,7 +26768,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 935) @@ -26787,7 +26787,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 936) @@ -26806,7 +26806,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 937) @@ -26825,7 +26825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 938) @@ -26844,7 +26844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 939) @@ -26863,7 +26863,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 940) @@ -26882,7 +26882,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 941) @@ -26901,7 +26901,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 942) @@ -26920,7 +26920,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 943) @@ -26939,7 +26939,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 944) @@ -26958,7 +26958,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 945) @@ -26981,7 +26981,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 946) @@ -27000,7 +27000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 947) @@ -27019,7 +27019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 948) @@ -27038,7 +27038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 949) @@ -27057,7 +27057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 950) @@ -27076,7 +27076,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 951) @@ -27095,7 +27095,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 952) @@ -27114,7 +27114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 953) @@ -27133,7 +27133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 954) @@ -27152,7 +27152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 955) @@ -27171,7 +27171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 956) @@ -27190,7 +27190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 957) @@ -27209,7 +27209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 958) @@ -27228,7 +27228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 959) @@ -27247,7 +27247,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 960) @@ -27270,7 +27270,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 961) @@ -27289,7 +27289,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 962) @@ -27308,7 +27308,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 963) @@ -27327,7 +27327,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 964) @@ -27346,7 +27346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 965) @@ -27365,7 +27365,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 966) @@ -27384,7 +27384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 967) @@ -27403,7 +27403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 968) @@ -27422,7 +27422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 969) @@ -27441,7 +27441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 970) @@ -27460,7 +27460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 971) @@ -27479,7 +27479,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 972) @@ -27498,7 +27498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 973) @@ -27517,7 +27517,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1110) @@ -27536,7 +27536,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1111) @@ -27555,7 +27555,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1112) @@ -27574,7 +27574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1113) @@ -27593,7 +27593,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1114) @@ -27612,7 +27612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1115) @@ -27631,7 +27631,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1116) @@ -27650,7 +27650,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1117) @@ -27669,7 +27669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1118) @@ -27688,7 +27688,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1119) @@ -27707,7 +27707,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1122) @@ -27726,7 +27726,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1123) @@ -27745,7 +27745,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1124) @@ -27766,7 +27766,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1125) @@ -27785,7 +27785,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1126) @@ -27804,7 +27804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1135) @@ -27823,7 +27823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1136) @@ -27842,7 +27842,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1137) @@ -27861,7 +27861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1138) @@ -27880,7 +27880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1139) @@ -27899,7 +27899,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1140) @@ -27918,7 +27918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1141) @@ -27937,7 +27937,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1142) @@ -27956,7 +27956,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1143) @@ -27975,7 +27975,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1144) @@ -27994,7 +27994,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1147) @@ -28013,7 +28013,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1148) @@ -28032,7 +28032,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1149) @@ -28053,7 +28053,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1150) @@ -28072,7 +28072,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1151) @@ -28091,7 +28091,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1163) @@ -28110,7 +28110,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1164) @@ -28129,7 +28129,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1165) @@ -28148,7 +28148,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1166) @@ -28167,7 +28167,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1167) @@ -28186,7 +28186,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1168) @@ -28205,7 +28205,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1169) @@ -28224,7 +28224,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1170) @@ -28243,7 +28243,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1171) @@ -28262,7 +28262,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1172) @@ -28281,7 +28281,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1175) @@ -28300,7 +28300,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1176) @@ -28319,7 +28319,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1177) @@ -28338,7 +28338,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1178) @@ -28357,7 +28357,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1179) @@ -28378,7 +28378,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1180) @@ -28397,7 +28397,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1181) @@ -28416,7 +28416,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1182) @@ -28435,7 +28435,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1183) @@ -28454,7 +28454,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1184) @@ -28473,7 +28473,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1185) @@ -28492,7 +28492,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1194) @@ -28511,7 +28511,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1195) @@ -28530,7 +28530,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1196) @@ -28549,7 +28549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1197) @@ -28568,7 +28568,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1198) @@ -28587,7 +28587,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1199) @@ -28606,7 +28606,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1200) @@ -28625,7 +28625,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1201) @@ -28644,7 +28644,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1202) @@ -28663,7 +28663,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1203) @@ -28682,7 +28682,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1206) @@ -28701,7 +28701,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1207) @@ -28720,7 +28720,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1208) @@ -28739,7 +28739,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1209) @@ -28758,7 +28758,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1210) @@ -28779,7 +28779,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1211) @@ -28798,7 +28798,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1212) @@ -28817,7 +28817,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1213) @@ -28839,7 +28839,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1214) @@ -28861,7 +28861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1215) @@ -28883,7 +28883,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1216) @@ -28902,7 +28902,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1217) @@ -28921,7 +28921,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1218) @@ -28940,7 +28940,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1219) @@ -28959,7 +28959,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1231) @@ -28978,7 +28978,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1232) @@ -28997,7 +28997,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1233) @@ -29016,7 +29016,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1234) @@ -29035,7 +29035,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1235) @@ -29054,7 +29054,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1236) @@ -29073,7 +29073,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1237) @@ -29092,7 +29092,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1238) @@ -29111,7 +29111,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1239) @@ -29130,7 +29130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1240) @@ -29149,7 +29149,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1243) @@ -29168,7 +29168,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1244) @@ -29187,7 +29187,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1245) @@ -29206,7 +29206,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1246) @@ -29225,7 +29225,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1247) @@ -29246,7 +29246,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1248) @@ -29265,7 +29265,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1249) @@ -29287,7 +29287,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1250) @@ -29309,7 +29309,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1251) @@ -29328,7 +29328,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1260) @@ -29347,7 +29347,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1261) @@ -29366,7 +29366,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1262) @@ -29385,7 +29385,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1263) @@ -29404,7 +29404,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1264) @@ -29423,7 +29423,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1265) @@ -29442,7 +29442,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1266) @@ -29461,7 +29461,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1267) @@ -29480,7 +29480,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1268) @@ -29499,7 +29499,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1269) @@ -29518,7 +29518,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1272) @@ -29537,7 +29537,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1273) @@ -29556,7 +29556,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1274) @@ -29575,7 +29575,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1275) @@ -29594,7 +29594,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1276) @@ -29615,7 +29615,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1277) @@ -29634,7 +29634,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1278) @@ -29653,7 +29653,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1290) @@ -29672,7 +29672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1291) @@ -29691,7 +29691,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1292) @@ -29710,7 +29710,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1293) @@ -29729,7 +29729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1294) @@ -29748,7 +29748,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1295) @@ -29767,7 +29767,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1296) @@ -29786,7 +29786,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1297) @@ -29805,7 +29805,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1298) @@ -29824,7 +29824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1299) @@ -29843,7 +29843,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1302) @@ -29862,7 +29862,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1303) @@ -29885,7 +29885,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1304) @@ -29904,7 +29904,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1305) @@ -29923,7 +29923,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1306) @@ -29942,7 +29942,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1307) @@ -29961,7 +29961,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1308) @@ -29980,7 +29980,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1309) @@ -29999,7 +29999,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1310) @@ -30018,7 +30018,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1311) @@ -30037,7 +30037,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1312) @@ -30056,7 +30056,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1313) @@ -30075,7 +30075,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1314) @@ -30094,7 +30094,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1315) @@ -30113,7 +30113,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1316) @@ -30132,7 +30132,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1325) @@ -30151,7 +30151,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1326) @@ -30170,7 +30170,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1327) @@ -30189,7 +30189,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1328) @@ -30208,7 +30208,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1329) @@ -30227,7 +30227,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1330) @@ -30246,7 +30246,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1331) @@ -30265,7 +30265,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1332) @@ -30284,7 +30284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1333) @@ -30303,7 +30303,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1334) @@ -30322,7 +30322,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1337) @@ -30341,7 +30341,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1338) @@ -30364,7 +30364,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1339) @@ -30383,7 +30383,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1340) @@ -30402,7 +30402,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1341) @@ -30421,7 +30421,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1342) @@ -30440,7 +30440,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1343) @@ -30459,7 +30459,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1344) @@ -30478,7 +30478,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1345) @@ -30497,7 +30497,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1346) @@ -30516,7 +30516,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1347) @@ -30535,7 +30535,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1348) @@ -30554,7 +30554,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1349) @@ -30573,7 +30573,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1350) @@ -30592,7 +30592,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1351) @@ -30612,7 +30612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1363) @@ -30632,7 +30632,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1364) @@ -30652,7 +30652,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1365) @@ -30672,7 +30672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1366) @@ -30692,7 +30692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1367) @@ -30712,7 +30712,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1368) @@ -30732,7 +30732,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1369) @@ -30752,7 +30752,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1370) @@ -30772,7 +30772,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1371) @@ -30792,7 +30792,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1372) @@ -30812,7 +30812,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1375) @@ -30832,7 +30832,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1376) @@ -30852,7 +30852,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1377) @@ -30872,7 +30872,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1378) @@ -30892,7 +30892,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1379) @@ -30912,7 +30912,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1380) @@ -30932,7 +30932,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1381) @@ -30952,7 +30952,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1382) @@ -30972,7 +30972,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1383) @@ -30992,7 +30992,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1384) @@ -31012,7 +31012,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1385) @@ -31032,7 +31032,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1386) @@ -31052,7 +31052,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1387) @@ -31074,7 +31074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1388) @@ -31096,7 +31096,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1389) @@ -31118,7 +31118,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1390) @@ -31140,7 +31140,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1391) @@ -31160,7 +31160,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1392) @@ -31180,7 +31180,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1393) @@ -31200,7 +31200,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1402) @@ -31220,7 +31220,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1403) @@ -31240,7 +31240,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1404) @@ -31260,7 +31260,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1405) @@ -31280,7 +31280,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1406) @@ -31300,7 +31300,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1407) @@ -31320,7 +31320,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1408) @@ -31340,7 +31340,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1409) @@ -31360,7 +31360,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1410) @@ -31380,7 +31380,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1411) @@ -31400,7 +31400,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1414) @@ -31420,7 +31420,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1415) @@ -31440,7 +31440,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1416) @@ -31460,7 +31460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1417) @@ -31480,7 +31480,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1418) @@ -31500,7 +31500,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1419) @@ -31520,7 +31520,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1420) @@ -31540,7 +31540,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1421) @@ -31560,7 +31560,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1422) @@ -31580,7 +31580,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1423) @@ -31600,7 +31600,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1424) @@ -31620,7 +31620,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1425) @@ -31640,7 +31640,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1426) @@ -31662,7 +31662,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1427) @@ -31684,7 +31684,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1428) @@ -31706,7 +31706,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1429) @@ -31728,7 +31728,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1430) @@ -31748,7 +31748,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1431) @@ -31768,7 +31768,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1432) @@ -31787,7 +31787,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1444) @@ -31806,7 +31806,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1445) @@ -31825,7 +31825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1446) @@ -31844,7 +31844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1447) @@ -31863,7 +31863,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1448) @@ -31882,7 +31882,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1449) @@ -31901,7 +31901,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1450) @@ -31920,7 +31920,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1451) @@ -31939,7 +31939,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1452) @@ -31958,7 +31958,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1453) @@ -31979,7 +31979,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1456) @@ -32000,7 +32000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1457) @@ -32019,7 +32019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1458) @@ -32038,7 +32038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1459) @@ -32057,7 +32057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1460) @@ -32076,7 +32076,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1461) @@ -32097,7 +32097,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1462) @@ -32116,7 +32116,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1463) @@ -32137,7 +32137,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1472) @@ -32158,7 +32158,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1473) @@ -32177,7 +32177,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1474) @@ -32196,7 +32196,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1475) @@ -32215,7 +32215,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1476) @@ -32234,7 +32234,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1477) @@ -32255,7 +32255,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1478) @@ -32274,7 +32274,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1479) @@ -32295,7 +32295,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1482) @@ -32316,7 +32316,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1483) @@ -32335,7 +32335,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1484) @@ -32354,7 +32354,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1485) @@ -32373,7 +32373,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1486) @@ -32392,7 +32392,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1487) @@ -32413,7 +32413,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1488) @@ -32432,7 +32432,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1489) @@ -32451,7 +32451,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1501) @@ -32470,7 +32470,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1502) @@ -32489,7 +32489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1503) @@ -32508,7 +32508,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1504) @@ -32527,7 +32527,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1505) @@ -32546,7 +32546,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1506) @@ -32565,7 +32565,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1507) @@ -32584,7 +32584,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1508) @@ -32603,7 +32603,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1509) @@ -32622,7 +32622,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1510) @@ -32643,7 +32643,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1513) @@ -32664,7 +32664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1514) @@ -32683,7 +32683,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1515) @@ -32702,7 +32702,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1516) @@ -32721,7 +32721,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1517) @@ -32740,7 +32740,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1518) @@ -32761,7 +32761,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1519) @@ -32780,7 +32780,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1520) @@ -32799,7 +32799,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1529) @@ -32818,7 +32818,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1530) @@ -32837,7 +32837,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1531) @@ -32856,7 +32856,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1532) @@ -32875,7 +32875,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1533) @@ -32894,7 +32894,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1534) @@ -32913,7 +32913,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1535) @@ -32932,7 +32932,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1536) @@ -32951,7 +32951,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1537) @@ -32970,7 +32970,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1538) @@ -32991,7 +32991,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1541) @@ -33012,7 +33012,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1542) @@ -33031,7 +33031,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1543) @@ -33050,7 +33050,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1544) @@ -33069,7 +33069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1545) @@ -33088,7 +33088,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1546) @@ -33109,7 +33109,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1547) @@ -33128,7 +33128,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1548) @@ -33147,7 +33147,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1560) @@ -33166,7 +33166,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1561) @@ -33185,7 +33185,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1562) @@ -33204,7 +33204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1563) @@ -33223,7 +33223,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1564) @@ -33242,7 +33242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1565) @@ -33261,7 +33261,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1566) @@ -33280,7 +33280,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1567) @@ -33299,7 +33299,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1568) @@ -33318,7 +33318,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1569) @@ -33337,7 +33337,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1572) @@ -33356,7 +33356,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1573) @@ -33375,7 +33375,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1574) @@ -33394,7 +33394,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1575) @@ -33415,7 +33415,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1576) @@ -33434,7 +33434,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1577) @@ -33455,7 +33455,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1578) @@ -33474,7 +33474,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1579) @@ -33493,7 +33493,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1588) @@ -33512,7 +33512,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1589) @@ -33531,7 +33531,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1590) @@ -33550,7 +33550,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1591) @@ -33569,7 +33569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1592) @@ -33588,7 +33588,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1593) @@ -33607,7 +33607,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1594) @@ -33626,7 +33626,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1595) @@ -33645,7 +33645,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1596) @@ -33664,7 +33664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1597) @@ -33683,7 +33683,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1600) @@ -33702,7 +33702,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1601) @@ -33721,7 +33721,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1602) @@ -33740,7 +33740,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1603) @@ -33761,7 +33761,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1604) @@ -33780,7 +33780,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1605) @@ -33801,7 +33801,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1606) @@ -33820,7 +33820,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1607) @@ -33842,7 +33842,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1608) @@ -33861,7 +33861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1620) @@ -33880,7 +33880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1621) @@ -33899,7 +33899,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1622) @@ -33918,7 +33918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1623) @@ -33937,7 +33937,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1624) @@ -33956,7 +33956,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1625) @@ -33975,7 +33975,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1626) @@ -33994,7 +33994,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1627) @@ -34013,7 +34013,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1628) @@ -34032,7 +34032,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1629) @@ -34053,7 +34053,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1632) @@ -34074,7 +34074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1633) @@ -34093,7 +34093,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1634) @@ -34112,7 +34112,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1635) @@ -34131,7 +34131,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1636) @@ -34150,7 +34150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1637) @@ -34171,7 +34171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1638) @@ -34190,7 +34190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1639) @@ -34209,7 +34209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1648) @@ -34228,7 +34228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1649) @@ -34247,7 +34247,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1650) @@ -34266,7 +34266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1651) @@ -34285,7 +34285,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1652) @@ -34304,7 +34304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1653) @@ -34323,7 +34323,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1654) @@ -34342,7 +34342,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1655) @@ -34361,7 +34361,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1656) @@ -34380,7 +34380,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1657) @@ -34401,7 +34401,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1660) @@ -34422,7 +34422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1661) @@ -34441,7 +34441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1662) @@ -34460,7 +34460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1663) @@ -34479,7 +34479,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1664) @@ -34498,7 +34498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1665) @@ -34519,7 +34519,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1666) @@ -34538,7 +34538,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1667) @@ -34558,7 +34558,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1679) @@ -34578,7 +34578,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1680) @@ -34598,7 +34598,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1681) @@ -34618,7 +34618,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1682) @@ -34638,7 +34638,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1683) @@ -34658,7 +34658,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1684) @@ -34678,7 +34678,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1685) @@ -34698,7 +34698,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1686) @@ -34718,7 +34718,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1687) @@ -34738,7 +34738,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1688) @@ -34758,7 +34758,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1691) @@ -34778,7 +34778,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1692) @@ -34798,7 +34798,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1693) @@ -34818,7 +34818,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1694) @@ -34838,7 +34838,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1695) @@ -34858,7 +34858,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1696) @@ -34878,7 +34878,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1697) @@ -34900,7 +34900,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1698) @@ -34920,7 +34920,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1699) @@ -34940,7 +34940,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1700) @@ -34960,7 +34960,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1701) @@ -34980,7 +34980,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1702) @@ -35000,7 +35000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1703) @@ -35020,7 +35020,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1704) @@ -35040,7 +35040,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1705) @@ -35060,7 +35060,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1706) @@ -35082,7 +35082,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1707) @@ -35102,7 +35102,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1708) @@ -35122,7 +35122,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1709) @@ -35142,7 +35142,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1710) @@ -35162,7 +35162,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1711) @@ -35184,7 +35184,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1712) @@ -35204,7 +35204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1713) @@ -35224,7 +35224,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1714) @@ -35244,7 +35244,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1715) @@ -35264,7 +35264,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1716) @@ -35286,7 +35286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1717) @@ -35306,7 +35306,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1718) @@ -35326,7 +35326,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1719) @@ -35346,7 +35346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1720) @@ -35366,7 +35366,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1721) @@ -35388,7 +35388,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1722) @@ -35408,7 +35408,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1723) @@ -35428,7 +35428,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1724) @@ -35448,7 +35448,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1725) @@ -35470,7 +35470,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1726) @@ -35490,7 +35490,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1727) @@ -35510,7 +35510,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1728) @@ -35530,7 +35530,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1729) @@ -35550,7 +35550,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1730) @@ -35572,7 +35572,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1731) @@ -35594,7 +35594,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1732) @@ -35616,7 +35616,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1733) @@ -35636,7 +35636,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1734) @@ -35656,7 +35656,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1735) @@ -35676,7 +35676,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1736) @@ -35696,7 +35696,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1737) @@ -35716,7 +35716,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1738) @@ -35736,7 +35736,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1739) @@ -35758,7 +35758,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1740) @@ -35780,7 +35780,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1741) @@ -35802,7 +35802,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1742) @@ -35824,7 +35824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1743) @@ -35850,7 +35850,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1744) @@ -35870,7 +35870,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1745) @@ -35890,7 +35890,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1746) @@ -35910,7 +35910,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1747) @@ -35930,7 +35930,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1748) @@ -35950,7 +35950,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1757) @@ -35970,7 +35970,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1758) @@ -35990,7 +35990,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1759) @@ -36010,7 +36010,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1760) @@ -36030,7 +36030,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1761) @@ -36050,7 +36050,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1762) @@ -36070,7 +36070,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1763) @@ -36090,7 +36090,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1764) @@ -36110,7 +36110,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1765) @@ -36130,7 +36130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1766) @@ -36150,7 +36150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1769) @@ -36170,7 +36170,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1770) @@ -36190,7 +36190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1771) @@ -36210,7 +36210,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1772) @@ -36230,7 +36230,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1773) @@ -36250,7 +36250,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1774) @@ -36270,7 +36270,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1775) @@ -36292,7 +36292,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1776) @@ -36312,7 +36312,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1777) @@ -36332,7 +36332,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1778) @@ -36352,7 +36352,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1779) @@ -36372,7 +36372,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1780) @@ -36392,7 +36392,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1781) @@ -36412,7 +36412,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1782) @@ -36432,7 +36432,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1783) @@ -36452,7 +36452,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1784) @@ -36474,7 +36474,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1785) @@ -36494,7 +36494,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1786) @@ -36514,7 +36514,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1787) @@ -36534,7 +36534,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1788) @@ -36554,7 +36554,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1789) @@ -36576,7 +36576,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1790) @@ -36596,7 +36596,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1791) @@ -36616,7 +36616,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1792) @@ -36636,7 +36636,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1793) @@ -36656,7 +36656,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1794) @@ -36678,7 +36678,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1795) @@ -36698,7 +36698,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1796) @@ -36718,7 +36718,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1797) @@ -36738,7 +36738,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1798) @@ -36758,7 +36758,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1799) @@ -36780,7 +36780,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1800) @@ -36800,7 +36800,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1801) @@ -36820,7 +36820,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1802) @@ -36840,7 +36840,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1803) @@ -36862,7 +36862,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1804) @@ -36882,7 +36882,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1805) @@ -36902,7 +36902,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1806) @@ -36922,7 +36922,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1807) @@ -36942,7 +36942,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1808) @@ -36964,7 +36964,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1809) @@ -36986,7 +36986,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1810) @@ -37008,7 +37008,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1811) @@ -37028,7 +37028,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1812) @@ -37048,7 +37048,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1813) @@ -37068,7 +37068,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1814) @@ -37088,7 +37088,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1815) @@ -37108,7 +37108,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1816) @@ -37128,7 +37128,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1817) @@ -37150,7 +37150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1818) @@ -37172,7 +37172,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1819) @@ -37194,7 +37194,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1820) @@ -37216,7 +37216,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1821) @@ -37242,7 +37242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1822) @@ -37262,7 +37262,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1823) @@ -37282,7 +37282,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1824) @@ -37302,7 +37302,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1825) @@ -37322,7 +37322,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1826) @@ -37342,7 +37342,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1838) @@ -37362,7 +37362,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1839) @@ -37382,7 +37382,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1840) @@ -37402,7 +37402,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1841) @@ -37422,7 +37422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1842) @@ -37442,7 +37442,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1843) @@ -37462,7 +37462,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1844) @@ -37482,7 +37482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1845) @@ -37502,7 +37502,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1846) @@ -37522,7 +37522,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1847) @@ -37542,7 +37542,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1850) @@ -37562,7 +37562,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1851) @@ -37582,7 +37582,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1852) @@ -37602,7 +37602,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1853) @@ -37622,7 +37622,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1854) @@ -37642,7 +37642,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1855) @@ -37662,7 +37662,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1856) @@ -37686,7 +37686,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1857) @@ -37706,7 +37706,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1858) @@ -37726,7 +37726,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1859) @@ -37746,7 +37746,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1860) @@ -37766,7 +37766,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1861) @@ -37786,7 +37786,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1862) @@ -37806,7 +37806,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1863) @@ -37826,7 +37826,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1864) @@ -37846,7 +37846,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1865) @@ -37870,7 +37870,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1866) @@ -37890,7 +37890,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1867) @@ -37910,7 +37910,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1868) @@ -37930,7 +37930,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1869) @@ -37950,7 +37950,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1870) @@ -37974,7 +37974,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1871) @@ -37994,7 +37994,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1872) @@ -38014,7 +38014,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1873) @@ -38034,7 +38034,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1874) @@ -38054,7 +38054,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1875) @@ -38078,7 +38078,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1876) @@ -38098,7 +38098,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1877) @@ -38118,7 +38118,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1878) @@ -38138,7 +38138,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1879) @@ -38158,7 +38158,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1880) @@ -38182,7 +38182,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1881) @@ -38202,7 +38202,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1882) @@ -38222,7 +38222,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1883) @@ -38242,7 +38242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1884) @@ -38266,7 +38266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1885) @@ -38286,7 +38286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1886) @@ -38306,7 +38306,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1887) @@ -38326,7 +38326,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1888) @@ -38346,7 +38346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1889) @@ -38370,7 +38370,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1890) @@ -38394,7 +38394,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1891) @@ -38416,7 +38416,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1892) @@ -38436,7 +38436,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1893) @@ -38456,7 +38456,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1894) @@ -38476,7 +38476,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1895) @@ -38496,7 +38496,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1896) @@ -38516,7 +38516,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1897) @@ -38536,7 +38536,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1898) @@ -38560,7 +38560,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1899) @@ -38584,7 +38584,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1900) @@ -38608,7 +38608,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1901) @@ -38632,7 +38632,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1902) @@ -38658,7 +38658,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1903) @@ -38678,7 +38678,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1904) @@ -38698,7 +38698,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1905) @@ -38718,7 +38718,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1906) @@ -38738,7 +38738,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1907) @@ -38758,7 +38758,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1916) @@ -38778,7 +38778,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1917) @@ -38798,7 +38798,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1918) @@ -38818,7 +38818,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1919) @@ -38838,7 +38838,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1920) @@ -38858,7 +38858,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1921) @@ -38878,7 +38878,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1922) @@ -38898,7 +38898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1923) @@ -38918,7 +38918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1924) @@ -38938,7 +38938,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1925) @@ -38958,7 +38958,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1928) @@ -38978,7 +38978,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1929) @@ -38998,7 +38998,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1930) @@ -39018,7 +39018,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1931) @@ -39038,7 +39038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1932) @@ -39058,7 +39058,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1933) @@ -39078,7 +39078,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1934) @@ -39102,7 +39102,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1935) @@ -39122,7 +39122,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1936) @@ -39142,7 +39142,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1937) @@ -39162,7 +39162,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1938) @@ -39182,7 +39182,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1939) @@ -39202,7 +39202,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1940) @@ -39222,7 +39222,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1941) @@ -39242,7 +39242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1942) @@ -39262,7 +39262,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1943) @@ -39286,7 +39286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1944) @@ -39306,7 +39306,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1945) @@ -39326,7 +39326,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1946) @@ -39346,7 +39346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1947) @@ -39366,7 +39366,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1948) @@ -39390,7 +39390,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1949) @@ -39410,7 +39410,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1950) @@ -39430,7 +39430,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1951) @@ -39450,7 +39450,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1952) @@ -39470,7 +39470,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1953) @@ -39494,7 +39494,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1954) @@ -39514,7 +39514,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1955) @@ -39534,7 +39534,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1956) @@ -39554,7 +39554,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1957) @@ -39574,7 +39574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1958) @@ -39598,7 +39598,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1959) @@ -39618,7 +39618,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1960) @@ -39638,7 +39638,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1961) @@ -39658,7 +39658,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1962) @@ -39682,7 +39682,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1963) @@ -39702,7 +39702,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1964) @@ -39722,7 +39722,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1965) @@ -39742,7 +39742,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1966) @@ -39762,7 +39762,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1967) @@ -39786,7 +39786,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1968) @@ -39810,7 +39810,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1969) @@ -39832,7 +39832,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1970) @@ -39852,7 +39852,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1971) @@ -39872,7 +39872,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1972) @@ -39892,7 +39892,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1973) @@ -39912,7 +39912,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1974) @@ -39932,7 +39932,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1975) @@ -39952,7 +39952,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1976) @@ -39976,7 +39976,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1977) @@ -40000,7 +40000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1978) @@ -40024,7 +40024,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1979) @@ -40048,7 +40048,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1980) @@ -40074,7 +40074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1981) @@ -40094,7 +40094,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1982) @@ -40114,7 +40114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1983) @@ -40134,7 +40134,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1984) @@ -40154,7 +40154,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1985) @@ -40174,7 +40174,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2001) @@ -40194,7 +40194,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2002) @@ -40214,7 +40214,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2003) @@ -40234,7 +40234,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2004) @@ -40254,7 +40254,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2005) @@ -40274,7 +40274,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2006) @@ -40294,7 +40294,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2007) @@ -40314,7 +40314,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2008) @@ -40334,7 +40334,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2009) @@ -40354,7 +40354,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2010) @@ -40374,7 +40374,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2013) @@ -40394,7 +40394,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2014) @@ -40414,7 +40414,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2015) @@ -40434,7 +40434,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2016) @@ -40454,7 +40454,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2017) @@ -40474,7 +40474,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2018) @@ -40494,7 +40494,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2019) @@ -40514,7 +40514,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2020) @@ -40534,7 +40534,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2021) @@ -40554,7 +40554,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2022) @@ -40574,7 +40574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2023) @@ -40596,7 +40596,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2024) @@ -40616,7 +40616,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2025) @@ -40636,7 +40636,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2026) @@ -40656,7 +40656,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2027) @@ -40676,7 +40676,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2028) @@ -40696,7 +40696,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2029) @@ -40716,7 +40716,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2030) @@ -40736,7 +40736,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2031) @@ -40756,7 +40756,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2032) @@ -40776,7 +40776,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2033) @@ -40796,7 +40796,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2034) @@ -40816,7 +40816,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2035) @@ -40836,7 +40836,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2036) @@ -40858,7 +40858,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2037) @@ -40878,7 +40878,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2038) @@ -40898,7 +40898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2039) @@ -40918,7 +40918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2040) @@ -40938,7 +40938,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2041) @@ -40960,7 +40960,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2042) @@ -40980,7 +40980,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2043) @@ -41000,7 +41000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2044) @@ -41020,7 +41020,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2045) @@ -41040,7 +41040,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2046) @@ -41062,7 +41062,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2047) @@ -41082,7 +41082,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2048) @@ -41102,7 +41102,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2049) @@ -41122,7 +41122,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2050) @@ -41142,7 +41142,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2051) @@ -41164,7 +41164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2052) @@ -41184,7 +41184,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2053) @@ -41204,7 +41204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2054) @@ -41224,7 +41224,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2055) @@ -41246,7 +41246,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2056) @@ -41266,7 +41266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2057) @@ -41286,7 +41286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2058) @@ -41306,7 +41306,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2059) @@ -41326,7 +41326,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2060) @@ -41348,7 +41348,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2061) @@ -41370,7 +41370,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2062) @@ -41392,7 +41392,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2063) @@ -41412,7 +41412,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2064) @@ -41432,7 +41432,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2065) @@ -41452,7 +41452,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2066) @@ -41472,7 +41472,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2067) @@ -41492,7 +41492,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2068) @@ -41512,7 +41512,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2069) @@ -41534,7 +41534,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2070) @@ -41556,7 +41556,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2071) @@ -41578,7 +41578,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2072) @@ -41600,7 +41600,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2073) @@ -41624,7 +41624,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2074) @@ -41644,7 +41644,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2075) @@ -41664,7 +41664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2076) @@ -41684,7 +41684,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2077) @@ -41704,7 +41704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2078) @@ -41724,7 +41724,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2087) @@ -41744,7 +41744,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2088) @@ -41764,7 +41764,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2089) @@ -41784,7 +41784,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2090) @@ -41804,7 +41804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2091) @@ -41824,7 +41824,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2092) @@ -41844,7 +41844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2093) @@ -41864,7 +41864,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2094) @@ -41884,7 +41884,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2095) @@ -41904,7 +41904,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2096) @@ -41924,7 +41924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2099) @@ -41944,7 +41944,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2100) @@ -41964,7 +41964,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2101) @@ -41984,7 +41984,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2102) @@ -42004,7 +42004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2103) @@ -42024,7 +42024,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2104) @@ -42044,7 +42044,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2105) @@ -42064,7 +42064,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2106) @@ -42084,7 +42084,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2107) @@ -42104,7 +42104,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2108) @@ -42124,7 +42124,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2109) @@ -42146,7 +42146,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2110) @@ -42166,7 +42166,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2111) @@ -42186,7 +42186,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2112) @@ -42206,7 +42206,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2113) @@ -42226,7 +42226,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2114) @@ -42246,7 +42246,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2115) @@ -42266,7 +42266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2116) @@ -42286,7 +42286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2117) @@ -42306,7 +42306,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2118) @@ -42326,7 +42326,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2119) @@ -42346,7 +42346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2120) @@ -42366,7 +42366,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2121) @@ -42386,7 +42386,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2122) @@ -42408,7 +42408,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2123) @@ -42428,7 +42428,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2124) @@ -42448,7 +42448,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2125) @@ -42468,7 +42468,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2126) @@ -42488,7 +42488,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2127) @@ -42510,7 +42510,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2128) @@ -42530,7 +42530,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2129) @@ -42550,7 +42550,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2130) @@ -42570,7 +42570,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2131) @@ -42590,7 +42590,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2132) @@ -42612,7 +42612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2133) @@ -42632,7 +42632,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2134) @@ -42652,7 +42652,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2135) @@ -42672,7 +42672,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2136) @@ -42692,7 +42692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2137) @@ -42714,7 +42714,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2138) @@ -42734,7 +42734,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2139) @@ -42754,7 +42754,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2140) @@ -42774,7 +42774,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2141) @@ -42796,7 +42796,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2142) @@ -42816,7 +42816,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2143) @@ -42836,7 +42836,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2144) @@ -42856,7 +42856,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2145) @@ -42876,7 +42876,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2146) @@ -42898,7 +42898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2147) @@ -42920,7 +42920,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2148) @@ -42942,7 +42942,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2149) @@ -42962,7 +42962,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2150) @@ -42982,7 +42982,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2151) @@ -43002,7 +43002,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2152) @@ -43022,7 +43022,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2153) @@ -43042,7 +43042,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2154) @@ -43062,7 +43062,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2155) @@ -43084,7 +43084,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2156) @@ -43106,7 +43106,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2157) @@ -43128,7 +43128,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2158) @@ -43150,7 +43150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2159) @@ -43174,7 +43174,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2160) @@ -43194,7 +43194,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2161) @@ -43214,7 +43214,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2162) @@ -43234,7 +43234,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2163) @@ -43254,7 +43254,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2164) @@ -43274,7 +43274,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2176) @@ -43294,7 +43294,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2177) @@ -43314,7 +43314,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2178) @@ -43334,7 +43334,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2179) @@ -43354,7 +43354,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2180) @@ -43374,7 +43374,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2181) @@ -43394,7 +43394,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2182) @@ -43414,7 +43414,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2183) @@ -43434,7 +43434,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2184) @@ -43454,7 +43454,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2185) @@ -43474,7 +43474,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2188) @@ -43494,7 +43494,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2189) @@ -43514,7 +43514,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2190) @@ -43534,7 +43534,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2191) @@ -43554,7 +43554,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2192) @@ -43574,7 +43574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2193) @@ -43594,7 +43594,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2194) @@ -43614,7 +43614,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2195) @@ -43634,7 +43634,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2196) @@ -43654,7 +43654,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2197) @@ -43674,7 +43674,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2198) @@ -43694,7 +43694,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2199) @@ -43714,7 +43714,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2200) @@ -43736,7 +43736,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2201) @@ -43756,7 +43756,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2202) @@ -43776,7 +43776,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2203) @@ -43796,7 +43796,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2204) @@ -43816,7 +43816,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2205) @@ -43836,7 +43836,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2206) @@ -43856,7 +43856,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2207) @@ -43876,7 +43876,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2208) @@ -43896,7 +43896,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2209) @@ -43916,7 +43916,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2210) @@ -43938,7 +43938,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2211) @@ -43958,7 +43958,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2212) @@ -43980,7 +43980,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2213) @@ -44000,7 +44000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2214) @@ -44022,7 +44022,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2215) @@ -44042,7 +44042,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2216) @@ -44062,7 +44062,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2217) @@ -44084,7 +44084,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2218) @@ -44104,7 +44104,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2219) @@ -44124,7 +44124,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2220) @@ -44144,7 +44144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2221) @@ -44164,7 +44164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2222) @@ -44184,7 +44184,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2223) @@ -44206,7 +44206,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2224) @@ -44226,7 +44226,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2225) @@ -44246,7 +44246,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2226) @@ -44266,7 +44266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2227) @@ -44286,7 +44286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2228) @@ -44306,7 +44306,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2229) @@ -44328,7 +44328,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2230) @@ -44348,7 +44348,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2231) @@ -44368,7 +44368,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2232) @@ -44388,7 +44388,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2233) @@ -44408,7 +44408,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2234) @@ -44428,7 +44428,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2235) @@ -44448,7 +44448,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2236) @@ -44468,7 +44468,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2237) @@ -44490,7 +44490,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2238) @@ -44510,7 +44510,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2239) @@ -44530,7 +44530,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2240) @@ -44550,7 +44550,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2241) @@ -44570,7 +44570,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2242) @@ -44590,7 +44590,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2243) @@ -44610,7 +44610,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2244) @@ -44630,7 +44630,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2245) @@ -44650,7 +44650,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2246) @@ -44670,7 +44670,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2247) @@ -44692,7 +44692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2248) @@ -44712,7 +44712,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2249) @@ -44732,7 +44732,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2250) @@ -44754,7 +44754,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2251) @@ -44774,7 +44774,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2252) @@ -44794,7 +44794,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2253) @@ -44816,7 +44816,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2254) @@ -44836,7 +44836,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2255) @@ -44856,7 +44856,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2256) @@ -44876,7 +44876,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2257) @@ -44898,7 +44898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2258) @@ -44918,7 +44918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2259) @@ -44938,7 +44938,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2260) @@ -44958,7 +44958,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2261) @@ -44978,7 +44978,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2262) @@ -44998,7 +44998,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2263) @@ -45018,7 +45018,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2264) @@ -45038,7 +45038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2265) @@ -45060,7 +45060,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2266) @@ -45082,7 +45082,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2267) @@ -45106,7 +45106,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2268) @@ -45130,7 +45130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2269) @@ -45152,7 +45152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2270) @@ -45176,7 +45176,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2271) @@ -45198,7 +45198,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2272) @@ -45220,7 +45220,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2273) @@ -45242,7 +45242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2274) @@ -45264,7 +45264,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2275) @@ -45284,7 +45284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2276) @@ -45304,7 +45304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2277) @@ -45324,7 +45324,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2278) @@ -45344,7 +45344,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2279) @@ -45364,7 +45364,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2288) @@ -45384,7 +45384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2289) @@ -45404,7 +45404,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2290) @@ -45424,7 +45424,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2291) @@ -45444,7 +45444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2292) @@ -45464,7 +45464,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2293) @@ -45484,7 +45484,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2294) @@ -45504,7 +45504,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2295) @@ -45524,7 +45524,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2296) @@ -45544,7 +45544,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2297) @@ -45564,7 +45564,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2300) @@ -45584,7 +45584,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2301) @@ -45604,7 +45604,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2302) @@ -45624,7 +45624,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2303) @@ -45644,7 +45644,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2304) @@ -45664,7 +45664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2305) @@ -45684,7 +45684,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2306) @@ -45704,7 +45704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2307) @@ -45724,7 +45724,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2308) @@ -45744,7 +45744,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2309) @@ -45764,7 +45764,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2310) @@ -45784,7 +45784,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2311) @@ -45804,7 +45804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2312) @@ -45826,7 +45826,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2313) @@ -45846,7 +45846,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2314) @@ -45866,7 +45866,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2315) @@ -45886,7 +45886,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2316) @@ -45906,7 +45906,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2317) @@ -45926,7 +45926,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2318) @@ -45946,7 +45946,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2319) @@ -45966,7 +45966,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2320) @@ -45986,7 +45986,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2321) @@ -46006,7 +46006,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2322) @@ -46028,7 +46028,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2323) @@ -46048,7 +46048,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2324) @@ -46070,7 +46070,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2325) @@ -46090,7 +46090,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2326) @@ -46112,7 +46112,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2327) @@ -46132,7 +46132,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2328) @@ -46152,7 +46152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2329) @@ -46174,7 +46174,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2330) @@ -46194,7 +46194,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2331) @@ -46214,7 +46214,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2332) @@ -46234,7 +46234,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2333) @@ -46254,7 +46254,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2334) @@ -46274,7 +46274,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2335) @@ -46296,7 +46296,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2336) @@ -46316,7 +46316,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2337) @@ -46336,7 +46336,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2338) @@ -46356,7 +46356,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2339) @@ -46376,7 +46376,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2340) @@ -46396,7 +46396,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2341) @@ -46418,7 +46418,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2342) @@ -46438,7 +46438,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2343) @@ -46458,7 +46458,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2344) @@ -46478,7 +46478,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2345) @@ -46498,7 +46498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2346) @@ -46518,7 +46518,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2347) @@ -46538,7 +46538,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2348) @@ -46558,7 +46558,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2349) @@ -46580,7 +46580,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2350) @@ -46600,7 +46600,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2351) @@ -46620,7 +46620,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2352) @@ -46640,7 +46640,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2353) @@ -46660,7 +46660,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2354) @@ -46680,7 +46680,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2355) @@ -46700,7 +46700,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2356) @@ -46720,7 +46720,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2357) @@ -46740,7 +46740,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2358) @@ -46760,7 +46760,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2359) @@ -46782,7 +46782,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2360) @@ -46802,7 +46802,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2361) @@ -46822,7 +46822,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2362) @@ -46844,7 +46844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2363) @@ -46864,7 +46864,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2364) @@ -46884,7 +46884,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2365) @@ -46906,7 +46906,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2366) @@ -46926,7 +46926,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2367) @@ -46946,7 +46946,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2368) @@ -46966,7 +46966,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2369) @@ -46988,7 +46988,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2370) @@ -47008,7 +47008,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2371) @@ -47028,7 +47028,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2372) @@ -47048,7 +47048,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2373) @@ -47068,7 +47068,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2374) @@ -47088,7 +47088,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2375) @@ -47108,7 +47108,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2376) @@ -47128,7 +47128,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2377) @@ -47150,7 +47150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2378) @@ -47172,7 +47172,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2379) @@ -47196,7 +47196,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2380) @@ -47220,7 +47220,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2381) @@ -47242,7 +47242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2382) @@ -47266,7 +47266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2383) @@ -47288,7 +47288,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2384) @@ -47310,7 +47310,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2385) @@ -47332,7 +47332,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2386) @@ -47354,7 +47354,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2387) @@ -47374,7 +47374,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2388) @@ -47394,7 +47394,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2389) @@ -47414,7 +47414,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2390) @@ -47434,7 +47434,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2391) @@ -47482,7 +47482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2400) @@ -47547,7 +47547,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2408) @@ -47578,7 +47578,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2422) @@ -47597,7 +47597,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2423) @@ -47616,7 +47616,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2424) @@ -47635,7 +47635,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2425) @@ -47654,7 +47654,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2426) @@ -47673,7 +47673,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2427) @@ -47692,7 +47692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2428) @@ -47711,7 +47711,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2429) @@ -47730,7 +47730,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2430) @@ -47749,7 +47749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2431) @@ -47768,7 +47768,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2434) @@ -47787,7 +47787,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2435) @@ -47810,7 +47810,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2436) @@ -47829,7 +47829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2437) @@ -47848,7 +47848,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2438) @@ -47867,7 +47867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2439) @@ -47886,7 +47886,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2440) @@ -47905,7 +47905,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2441) @@ -47924,7 +47924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2442) @@ -47943,7 +47943,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2443) @@ -47962,7 +47962,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2444) @@ -47981,7 +47981,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2445) @@ -48000,7 +48000,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2446) @@ -48019,7 +48019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2447) @@ -48038,7 +48038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2448) @@ -48057,7 +48057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2449) @@ -48076,7 +48076,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2450) @@ -48095,7 +48095,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2459) @@ -48114,7 +48114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2460) @@ -48133,7 +48133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2461) @@ -48152,7 +48152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2462) @@ -48171,7 +48171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2463) @@ -48190,7 +48190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2464) @@ -48209,7 +48209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2465) @@ -48228,7 +48228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2466) @@ -48247,7 +48247,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2467) @@ -48266,7 +48266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2468) @@ -48285,7 +48285,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2471) @@ -48304,7 +48304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2472) @@ -48327,7 +48327,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2473) @@ -48346,7 +48346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2474) @@ -48365,7 +48365,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2475) @@ -48384,7 +48384,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2476) @@ -48403,7 +48403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2477) @@ -48422,7 +48422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2478) @@ -48441,7 +48441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2479) @@ -48460,7 +48460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2480) @@ -48479,7 +48479,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2481) @@ -48498,7 +48498,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2482) @@ -48517,7 +48517,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2483) @@ -48536,7 +48536,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2484) @@ -48555,7 +48555,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2485) @@ -48574,7 +48574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2486) @@ -48593,7 +48593,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2487) @@ -48612,7 +48612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2498) @@ -48631,7 +48631,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2499) @@ -48650,7 +48650,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2500) @@ -48669,7 +48669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2501) @@ -48688,7 +48688,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2502) @@ -48707,7 +48707,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2503) @@ -48726,7 +48726,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2504) @@ -48747,7 +48747,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2505) @@ -48766,7 +48766,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2506) @@ -48785,7 +48785,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2514) @@ -48804,7 +48804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2515) @@ -48823,7 +48823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2516) @@ -48842,7 +48842,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2517) @@ -48861,7 +48861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2518) @@ -48880,7 +48880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2519) @@ -48899,7 +48899,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2520) @@ -48920,7 +48920,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2521) @@ -48939,7 +48939,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2522) @@ -48959,7 +48959,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2533) @@ -48979,7 +48979,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2534) @@ -48999,7 +48999,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2535) @@ -49019,7 +49019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2536) @@ -49039,7 +49039,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2537) @@ -49059,7 +49059,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2538) @@ -49079,7 +49079,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2539) @@ -49099,7 +49099,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2540) @@ -49119,7 +49119,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2541) @@ -49139,7 +49139,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2542) @@ -49159,7 +49159,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2545) @@ -49179,7 +49179,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2546) @@ -49199,7 +49199,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2547) @@ -49219,7 +49219,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2548) @@ -49239,7 +49239,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2549) @@ -49259,7 +49259,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2550) @@ -49279,7 +49279,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2551) @@ -49299,7 +49299,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2552) @@ -49319,7 +49319,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2553) @@ -49339,7 +49339,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2554) @@ -49359,7 +49359,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2555) @@ -49381,7 +49381,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2556) @@ -49401,7 +49401,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2557) @@ -49421,7 +49421,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2558) @@ -49441,7 +49441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2559) @@ -49461,7 +49461,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2560) @@ -49481,7 +49481,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2561) @@ -49501,7 +49501,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2562) @@ -49521,7 +49521,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2563) @@ -49541,7 +49541,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2564) @@ -49561,7 +49561,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2565) @@ -49581,7 +49581,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2566) @@ -49601,7 +49601,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2567) @@ -49621,7 +49621,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2568) @@ -49643,7 +49643,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2569) @@ -49663,7 +49663,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2570) @@ -49683,7 +49683,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2571) @@ -49703,7 +49703,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2572) @@ -49723,7 +49723,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2573) @@ -49745,7 +49745,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2574) @@ -49765,7 +49765,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2575) @@ -49785,7 +49785,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2576) @@ -49805,7 +49805,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2577) @@ -49825,7 +49825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2578) @@ -49847,7 +49847,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2579) @@ -49867,7 +49867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2580) @@ -49887,7 +49887,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2581) @@ -49907,7 +49907,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2582) @@ -49927,7 +49927,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2583) @@ -49949,7 +49949,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2584) @@ -49969,7 +49969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2585) @@ -49989,7 +49989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2586) @@ -50009,7 +50009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2587) @@ -50031,7 +50031,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2588) @@ -50051,7 +50051,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2589) @@ -50071,7 +50071,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2590) @@ -50091,7 +50091,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2591) @@ -50111,7 +50111,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2592) @@ -50133,7 +50133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2593) @@ -50155,7 +50155,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2594) @@ -50177,7 +50177,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2595) @@ -50197,7 +50197,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2596) @@ -50217,7 +50217,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2597) @@ -50237,7 +50237,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2598) @@ -50257,7 +50257,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2599) @@ -50277,7 +50277,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2600) @@ -50297,7 +50297,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2601) @@ -50319,7 +50319,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2602) @@ -50341,7 +50341,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2603) @@ -50363,7 +50363,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2604) @@ -50385,7 +50385,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2605) @@ -50409,7 +50409,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2606) @@ -50429,7 +50429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2607) @@ -50449,7 +50449,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2608) @@ -50469,7 +50469,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2609) @@ -50489,7 +50489,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2610) @@ -50509,7 +50509,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2611) @@ -50529,7 +50529,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2620) @@ -50549,7 +50549,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2621) @@ -50569,7 +50569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2622) @@ -50589,7 +50589,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2623) @@ -50609,7 +50609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2624) @@ -50629,7 +50629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2625) @@ -50649,7 +50649,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2626) @@ -50669,7 +50669,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2627) @@ -50689,7 +50689,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2628) @@ -50709,7 +50709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2629) @@ -50729,7 +50729,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2632) @@ -50749,7 +50749,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2633) @@ -50769,7 +50769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2634) @@ -50789,7 +50789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2635) @@ -50809,7 +50809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2636) @@ -50829,7 +50829,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2637) @@ -50849,7 +50849,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2638) @@ -50869,7 +50869,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2639) @@ -50889,7 +50889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2640) @@ -50909,7 +50909,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2641) @@ -50929,7 +50929,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2642) @@ -50951,7 +50951,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2643) @@ -50971,7 +50971,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2644) @@ -50991,7 +50991,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2645) @@ -51011,7 +51011,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2646) @@ -51031,7 +51031,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2647) @@ -51051,7 +51051,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2648) @@ -51071,7 +51071,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2649) @@ -51091,7 +51091,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2650) @@ -51111,7 +51111,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2651) @@ -51131,7 +51131,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2652) @@ -51151,7 +51151,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2653) @@ -51171,7 +51171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2654) @@ -51191,7 +51191,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2655) @@ -51213,7 +51213,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2656) @@ -51233,7 +51233,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2657) @@ -51253,7 +51253,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2658) @@ -51273,7 +51273,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2659) @@ -51293,7 +51293,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2660) @@ -51315,7 +51315,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2661) @@ -51335,7 +51335,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2662) @@ -51355,7 +51355,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2663) @@ -51375,7 +51375,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2664) @@ -51395,7 +51395,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2665) @@ -51417,7 +51417,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2666) @@ -51437,7 +51437,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2667) @@ -51457,7 +51457,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2668) @@ -51477,7 +51477,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2669) @@ -51497,7 +51497,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2670) @@ -51519,7 +51519,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2671) @@ -51539,7 +51539,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2672) @@ -51559,7 +51559,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2673) @@ -51579,7 +51579,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2674) @@ -51601,7 +51601,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2675) @@ -51621,7 +51621,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2676) @@ -51641,7 +51641,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2677) @@ -51661,7 +51661,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2678) @@ -51681,7 +51681,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2679) @@ -51703,7 +51703,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2680) @@ -51725,7 +51725,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2681) @@ -51747,7 +51747,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2682) @@ -51767,7 +51767,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2683) @@ -51787,7 +51787,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2684) @@ -51807,7 +51807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2685) @@ -51827,7 +51827,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2686) @@ -51847,7 +51847,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2687) @@ -51867,7 +51867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2688) @@ -51889,7 +51889,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2689) @@ -51911,7 +51911,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2690) @@ -51933,7 +51933,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2691) @@ -51955,7 +51955,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2692) @@ -51979,7 +51979,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2693) @@ -51999,7 +51999,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2694) @@ -52019,7 +52019,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2695) @@ -52039,7 +52039,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2696) @@ -52059,7 +52059,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2697) @@ -52079,7 +52079,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2698) @@ -52098,7 +52098,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2763) @@ -52117,7 +52117,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2764) @@ -52136,7 +52136,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2765) @@ -52155,7 +52155,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2766) @@ -52174,7 +52174,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2767) @@ -52193,7 +52193,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2768) @@ -52212,7 +52212,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2769) @@ -52231,7 +52231,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2770) @@ -52250,7 +52250,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2771) @@ -52269,7 +52269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2772) @@ -52288,7 +52288,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2775) @@ -52307,7 +52307,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2776) @@ -52326,7 +52326,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2777) @@ -52349,7 +52349,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2778) @@ -52368,7 +52368,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2779) @@ -52387,7 +52387,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2788) @@ -52406,7 +52406,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2789) @@ -52425,7 +52425,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2790) @@ -52444,7 +52444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2791) @@ -52463,7 +52463,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2792) @@ -52482,7 +52482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2793) @@ -52501,7 +52501,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2794) @@ -52520,7 +52520,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2795) @@ -52539,7 +52539,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2796) @@ -52558,7 +52558,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2797) @@ -52577,7 +52577,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2800) @@ -52596,7 +52596,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2801) @@ -52615,7 +52615,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2802) @@ -52638,7 +52638,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2803) @@ -52657,7 +52657,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2804) @@ -52676,7 +52676,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2816) @@ -52695,7 +52695,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2817) @@ -52714,7 +52714,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2818) @@ -52733,7 +52733,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2819) @@ -52752,7 +52752,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2820) @@ -52771,7 +52771,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2821) @@ -52790,7 +52790,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2822) @@ -52809,7 +52809,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2823) @@ -52828,7 +52828,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2824) @@ -52847,7 +52847,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2825) @@ -52866,7 +52866,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2828) @@ -52885,7 +52885,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2829) @@ -52906,7 +52906,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2830) @@ -52925,7 +52925,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2831) @@ -52944,7 +52944,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2832) @@ -52963,7 +52963,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2833) @@ -52982,7 +52982,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2834) @@ -53001,7 +53001,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2835) @@ -53020,7 +53020,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2836) @@ -53039,7 +53039,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2837) @@ -53058,7 +53058,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2838) @@ -53077,7 +53077,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2839) @@ -53096,7 +53096,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2840) @@ -53115,7 +53115,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2841) @@ -53134,7 +53134,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2842) @@ -53153,7 +53153,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2843) @@ -53172,7 +53172,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2844) @@ -53191,7 +53191,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2845) @@ -53210,7 +53210,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2846) @@ -53229,7 +53229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2847) @@ -53248,7 +53248,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2848) @@ -53267,7 +53267,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2849) @@ -53286,7 +53286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2850) @@ -53305,7 +53305,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2851) @@ -53324,7 +53324,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2852) @@ -53343,7 +53343,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2853) @@ -53362,7 +53362,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2854) @@ -53381,7 +53381,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2855) @@ -53400,7 +53400,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2856) @@ -53419,7 +53419,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2857) @@ -53438,7 +53438,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2858) @@ -53457,7 +53457,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2859) @@ -53476,7 +53476,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2860) @@ -53495,7 +53495,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2861) @@ -53514,7 +53514,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2862) @@ -53533,7 +53533,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2863) @@ -53552,7 +53552,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2864) @@ -53571,7 +53571,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2865) @@ -53590,7 +53590,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2866) @@ -53609,7 +53609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2867) @@ -53628,7 +53628,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2868) @@ -53647,7 +53647,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2869) @@ -53666,7 +53666,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2870) @@ -53685,7 +53685,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2871) @@ -53704,7 +53704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2872) @@ -53723,7 +53723,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2873) @@ -53742,7 +53742,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2874) @@ -53761,7 +53761,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2875) @@ -53780,7 +53780,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2876) @@ -53799,7 +53799,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2877) @@ -53818,7 +53818,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2878) @@ -53837,7 +53837,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2879) @@ -53856,7 +53856,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2880) @@ -53875,7 +53875,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2881) @@ -53894,7 +53894,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2882) @@ -53913,7 +53913,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2883) @@ -53932,7 +53932,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2884) @@ -53951,7 +53951,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2885) @@ -53970,7 +53970,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2886) @@ -53989,7 +53989,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2887) @@ -54008,7 +54008,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2888) @@ -54027,7 +54027,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2889) @@ -54046,7 +54046,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2890) @@ -54065,7 +54065,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2891) @@ -54084,7 +54084,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2892) @@ -54103,7 +54103,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2893) @@ -54122,7 +54122,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2894) @@ -54141,7 +54141,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2895) @@ -54160,7 +54160,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2896) @@ -54179,7 +54179,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2897) @@ -54198,7 +54198,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2898) @@ -54217,7 +54217,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2899) @@ -54236,7 +54236,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2900) @@ -54255,7 +54255,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2901) @@ -54274,7 +54274,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2910) @@ -54293,7 +54293,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2911) @@ -54312,7 +54312,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2912) @@ -54331,7 +54331,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2913) @@ -54350,7 +54350,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2914) @@ -54369,7 +54369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2915) @@ -54388,7 +54388,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2916) @@ -54407,7 +54407,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2917) @@ -54426,7 +54426,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2918) @@ -54445,7 +54445,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2919) @@ -54464,7 +54464,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2922) @@ -54483,7 +54483,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2923) @@ -54504,7 +54504,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2924) @@ -54523,7 +54523,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2925) @@ -54542,7 +54542,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2926) @@ -54561,7 +54561,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2927) @@ -54580,7 +54580,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2928) @@ -54599,7 +54599,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2929) @@ -54618,7 +54618,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2930) @@ -54637,7 +54637,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2931) @@ -54656,7 +54656,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2932) @@ -54675,7 +54675,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2933) @@ -54694,7 +54694,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2934) @@ -54713,7 +54713,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2935) @@ -54732,7 +54732,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2936) @@ -54751,7 +54751,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2937) @@ -54770,7 +54770,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2938) @@ -54789,7 +54789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2939) @@ -54808,7 +54808,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2940) @@ -54827,7 +54827,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2941) @@ -54846,7 +54846,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2942) @@ -54865,7 +54865,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2943) @@ -54884,7 +54884,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3008) @@ -54903,7 +54903,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3009) @@ -54922,7 +54922,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3010) @@ -54941,7 +54941,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3011) @@ -54960,7 +54960,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3012) @@ -54979,7 +54979,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3013) @@ -54998,7 +54998,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3014) @@ -55017,7 +55017,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3015) @@ -55036,7 +55036,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3016) @@ -55055,7 +55055,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3017) @@ -55074,7 +55074,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3020) @@ -55093,7 +55093,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3021) @@ -55112,7 +55112,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3022) @@ -55133,7 +55133,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3023) @@ -55152,7 +55152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3024) @@ -55171,7 +55171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3033) @@ -55190,7 +55190,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3034) @@ -55209,7 +55209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3035) @@ -55228,7 +55228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3036) @@ -55247,7 +55247,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3037) @@ -55266,7 +55266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3038) @@ -55285,7 +55285,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3039) @@ -55304,7 +55304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3040) @@ -55323,7 +55323,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3041) @@ -55342,7 +55342,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3042) @@ -55361,7 +55361,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3045) @@ -55380,7 +55380,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3046) @@ -55399,7 +55399,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3047) @@ -55420,7 +55420,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3048) @@ -55439,7 +55439,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3049) @@ -55458,7 +55458,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3061) @@ -55477,7 +55477,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3062) @@ -55496,7 +55496,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3063) @@ -55515,7 +55515,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3064) @@ -55534,7 +55534,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3065) @@ -55553,7 +55553,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3066) @@ -55572,7 +55572,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3067) @@ -55591,7 +55591,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3068) @@ -55610,7 +55610,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3069) @@ -55629,7 +55629,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3070) @@ -55648,7 +55648,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3073) @@ -55667,7 +55667,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3074) @@ -55690,7 +55690,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3075) @@ -55709,7 +55709,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3076) @@ -55728,7 +55728,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3077) @@ -55747,7 +55747,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3078) @@ -55766,7 +55766,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3079) @@ -55785,7 +55785,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3080) @@ -55804,7 +55804,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3081) @@ -55823,7 +55823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3082) @@ -55842,7 +55842,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3083) @@ -55861,7 +55861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3084) @@ -55880,7 +55880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3085) @@ -55899,7 +55899,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3086) @@ -55918,7 +55918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3087) @@ -55937,7 +55937,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3096) @@ -55956,7 +55956,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3097) @@ -55975,7 +55975,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3098) @@ -55994,7 +55994,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3099) @@ -56013,7 +56013,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3100) @@ -56032,7 +56032,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3101) @@ -56051,7 +56051,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3102) @@ -56070,7 +56070,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3103) @@ -56089,7 +56089,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3104) @@ -56108,7 +56108,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3105) @@ -56127,7 +56127,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3108) @@ -56146,7 +56146,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3109) @@ -56169,7 +56169,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3110) @@ -56188,7 +56188,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3111) @@ -56207,7 +56207,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3112) @@ -56226,7 +56226,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3113) @@ -56245,7 +56245,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3114) @@ -56264,7 +56264,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3115) @@ -56283,7 +56283,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3116) @@ -56302,7 +56302,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3117) @@ -56321,7 +56321,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3118) @@ -56340,7 +56340,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3119) @@ -56359,7 +56359,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3120) @@ -56378,7 +56378,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3121) @@ -56397,7 +56397,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3122) diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index f05d44dd..0b75b78d 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -10,7 +10,7 @@ (type $ffi (func (param f32 f32) (result i32))) (type $v (func)) (import "JSOp" "mod" (func $std/mod/JSOp.mod (param f64 f64) (result f64))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\n\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s") (export "memory" (memory $0)) @@ -846,7 +846,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 21) @@ -864,7 +864,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -882,7 +882,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -900,7 +900,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -918,7 +918,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -936,7 +936,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 26) @@ -954,7 +954,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -972,7 +972,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -990,7 +990,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) @@ -1008,7 +1008,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 30) @@ -1026,7 +1026,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -1044,7 +1044,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 32) @@ -1062,7 +1062,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 33) @@ -1080,7 +1080,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 34) @@ -1098,7 +1098,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 35) @@ -1116,7 +1116,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 36) @@ -1134,7 +1134,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 37) @@ -1152,7 +1152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 38) @@ -1170,7 +1170,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 39) @@ -1188,7 +1188,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 40) @@ -1206,7 +1206,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 41) @@ -1224,7 +1224,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 42) @@ -1242,7 +1242,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 43) @@ -1260,7 +1260,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 44) @@ -1278,7 +1278,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -1296,7 +1296,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 46) @@ -1314,7 +1314,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 47) @@ -1332,7 +1332,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 48) @@ -1350,7 +1350,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 49) @@ -1368,7 +1368,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 52) @@ -1386,7 +1386,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 53) @@ -1404,7 +1404,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 54) @@ -1422,7 +1422,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 55) @@ -1440,7 +1440,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 56) @@ -1458,7 +1458,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 57) @@ -1476,7 +1476,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 58) @@ -1494,7 +1494,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 59) @@ -1512,7 +1512,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -1530,7 +1530,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 61) @@ -1548,7 +1548,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 62) @@ -1566,7 +1566,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -1584,7 +1584,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 64) @@ -1602,7 +1602,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) @@ -1620,7 +1620,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 66) @@ -1638,7 +1638,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 67) @@ -1656,7 +1656,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 68) @@ -1674,7 +1674,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 69) @@ -1692,7 +1692,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 70) @@ -1710,7 +1710,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 71) @@ -1728,7 +1728,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 72) @@ -1746,7 +1746,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 73) @@ -1764,7 +1764,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 74) @@ -1782,7 +1782,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 75) @@ -1800,7 +1800,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 76) @@ -1818,7 +1818,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 77) @@ -1836,7 +1836,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 78) @@ -1854,7 +1854,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 79) @@ -1872,7 +1872,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) @@ -1890,7 +1890,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 81) @@ -1908,7 +1908,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 82) @@ -1926,7 +1926,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 83) @@ -1944,7 +1944,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 84) @@ -1962,7 +1962,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 85) @@ -1980,7 +1980,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -1998,7 +1998,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 87) @@ -2016,7 +2016,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 88) @@ -2034,7 +2034,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 89) @@ -2052,7 +2052,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 90) @@ -2070,7 +2070,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 91) @@ -2088,7 +2088,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 92) @@ -2106,7 +2106,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 93) @@ -2124,7 +2124,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 94) @@ -2142,7 +2142,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 95) @@ -2160,7 +2160,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 96) @@ -2178,7 +2178,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 105) @@ -2196,7 +2196,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 106) @@ -2214,7 +2214,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 107) @@ -2232,7 +2232,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 108) @@ -2250,7 +2250,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 109) @@ -2268,7 +2268,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 110) @@ -2286,7 +2286,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 111) @@ -2304,7 +2304,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 112) @@ -2322,7 +2322,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 113) @@ -2340,7 +2340,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 114) @@ -2358,7 +2358,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 115) @@ -2376,7 +2376,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 116) @@ -2394,7 +2394,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 117) @@ -2412,7 +2412,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 118) @@ -2430,7 +2430,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 119) @@ -2448,7 +2448,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 120) @@ -2466,7 +2466,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 121) @@ -2484,7 +2484,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 122) @@ -2502,7 +2502,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 123) @@ -2520,7 +2520,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 124) @@ -2538,7 +2538,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 127) @@ -2556,7 +2556,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 128) @@ -2574,7 +2574,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 129) @@ -2592,7 +2592,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 130) @@ -2610,7 +2610,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 131) @@ -2628,7 +2628,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 132) @@ -2646,7 +2646,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 133) @@ -2664,7 +2664,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 134) @@ -2682,7 +2682,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 135) @@ -2700,7 +2700,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 136) @@ -2718,7 +2718,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 137) @@ -2736,7 +2736,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 138) @@ -2754,7 +2754,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 139) @@ -2772,7 +2772,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 140) @@ -2790,7 +2790,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 141) @@ -2808,7 +2808,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 142) @@ -2826,7 +2826,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 143) @@ -2844,7 +2844,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 144) @@ -2862,7 +2862,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 145) @@ -2880,7 +2880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 146) @@ -2898,7 +2898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 147) @@ -2916,7 +2916,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 148) @@ -2934,7 +2934,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 149) @@ -2952,7 +2952,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 150) @@ -2970,7 +2970,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 151) @@ -2988,7 +2988,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 152) @@ -3006,7 +3006,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 153) @@ -3024,7 +3024,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 154) @@ -3042,7 +3042,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 155) @@ -3060,7 +3060,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 156) @@ -3078,7 +3078,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 157) @@ -3096,7 +3096,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 158) @@ -3114,7 +3114,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 159) @@ -3132,7 +3132,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 160) @@ -3150,7 +3150,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 161) @@ -3168,7 +3168,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 162) @@ -3186,7 +3186,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 163) @@ -3204,7 +3204,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 164) @@ -3222,7 +3222,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 165) @@ -3240,7 +3240,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 166) @@ -3258,7 +3258,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 167) diff --git a/tests/compiler/std/mod.untouched.wat b/tests/compiler/std/mod.untouched.wat index 8e35f74f..f998d3ba 100644 --- a/tests/compiler/std/mod.untouched.wat +++ b/tests/compiler/std/mod.untouched.wat @@ -10,7 +10,7 @@ (type $ffi (func (param f32 f32) (result i32))) (type $v (func)) (import "JSOp" "mod" (func $std/mod/JSOp.mod (param f64 f64) (result f64))) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $std/mod/js i32 (i32.const 1)) (global $NaN f64 (f64.const nan:0x8000000000000)) (global $Infinity f64 (f64.const inf)) @@ -1033,7 +1033,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 21) @@ -1051,7 +1051,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -1069,7 +1069,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -1087,7 +1087,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -1105,7 +1105,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -1123,7 +1123,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 26) @@ -1141,7 +1141,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -1159,7 +1159,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -1177,7 +1177,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) @@ -1195,7 +1195,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 30) @@ -1213,7 +1213,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -1231,7 +1231,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 32) @@ -1249,7 +1249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 33) @@ -1267,7 +1267,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 34) @@ -1285,7 +1285,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 35) @@ -1303,7 +1303,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 36) @@ -1321,7 +1321,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 37) @@ -1339,7 +1339,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 38) @@ -1357,7 +1357,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 39) @@ -1375,7 +1375,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 40) @@ -1393,7 +1393,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 41) @@ -1411,7 +1411,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 42) @@ -1429,7 +1429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 43) @@ -1447,7 +1447,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 44) @@ -1465,7 +1465,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -1483,7 +1483,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 46) @@ -1501,7 +1501,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 47) @@ -1519,7 +1519,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 48) @@ -1537,7 +1537,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 49) @@ -1555,7 +1555,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 52) @@ -1573,7 +1573,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 53) @@ -1591,7 +1591,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 54) @@ -1609,7 +1609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 55) @@ -1627,7 +1627,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 56) @@ -1645,7 +1645,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 57) @@ -1663,7 +1663,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 58) @@ -1681,7 +1681,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 59) @@ -1699,7 +1699,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -1717,7 +1717,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 61) @@ -1735,7 +1735,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 62) @@ -1753,7 +1753,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -1771,7 +1771,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 64) @@ -1789,7 +1789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) @@ -1807,7 +1807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 66) @@ -1825,7 +1825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 67) @@ -1843,7 +1843,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 68) @@ -1861,7 +1861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 69) @@ -1879,7 +1879,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 70) @@ -1897,7 +1897,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 71) @@ -1915,7 +1915,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 72) @@ -1933,7 +1933,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 73) @@ -1951,7 +1951,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 74) @@ -1971,7 +1971,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 75) @@ -1991,7 +1991,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 76) @@ -2009,7 +2009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 77) @@ -2027,7 +2027,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 78) @@ -2047,7 +2047,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 79) @@ -2067,7 +2067,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) @@ -2085,7 +2085,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 81) @@ -2103,7 +2103,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 82) @@ -2123,7 +2123,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 83) @@ -2143,7 +2143,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 84) @@ -2161,7 +2161,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 85) @@ -2179,7 +2179,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 86) @@ -2199,7 +2199,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 87) @@ -2219,7 +2219,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 88) @@ -2237,7 +2237,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 89) @@ -2257,7 +2257,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 90) @@ -2277,7 +2277,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 91) @@ -2299,7 +2299,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 92) @@ -2317,7 +2317,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 93) @@ -2337,7 +2337,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 94) @@ -2355,7 +2355,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 95) @@ -2375,7 +2375,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 96) @@ -2393,7 +2393,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 105) @@ -2411,7 +2411,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 106) @@ -2429,7 +2429,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 107) @@ -2447,7 +2447,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 108) @@ -2465,7 +2465,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 109) @@ -2483,7 +2483,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 110) @@ -2501,7 +2501,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 111) @@ -2519,7 +2519,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 112) @@ -2537,7 +2537,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 113) @@ -2555,7 +2555,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 114) @@ -2573,7 +2573,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 115) @@ -2591,7 +2591,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 116) @@ -2609,7 +2609,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 117) @@ -2627,7 +2627,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 118) @@ -2645,7 +2645,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 119) @@ -2663,7 +2663,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 120) @@ -2681,7 +2681,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 121) @@ -2699,7 +2699,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 122) @@ -2717,7 +2717,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 123) @@ -2735,7 +2735,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 124) @@ -2753,7 +2753,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 127) @@ -2771,7 +2771,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 128) @@ -2789,7 +2789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 129) @@ -2807,7 +2807,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 130) @@ -2825,7 +2825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 131) @@ -2843,7 +2843,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 132) @@ -2861,7 +2861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 133) @@ -2879,7 +2879,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 134) @@ -2897,7 +2897,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 135) @@ -2915,7 +2915,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 136) @@ -2933,7 +2933,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 137) @@ -2951,7 +2951,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 138) @@ -2969,7 +2969,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 139) @@ -2987,7 +2987,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 140) @@ -3005,7 +3005,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 141) @@ -3023,7 +3023,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 142) @@ -3041,7 +3041,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 143) @@ -3059,7 +3059,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 144) @@ -3077,7 +3077,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 145) @@ -3097,7 +3097,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 146) @@ -3117,7 +3117,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 147) @@ -3135,7 +3135,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 148) @@ -3153,7 +3153,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 149) @@ -3173,7 +3173,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 150) @@ -3193,7 +3193,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 151) @@ -3211,7 +3211,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 152) @@ -3229,7 +3229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 153) @@ -3249,7 +3249,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 154) @@ -3269,7 +3269,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 155) @@ -3287,7 +3287,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 156) @@ -3305,7 +3305,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 157) @@ -3325,7 +3325,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 158) @@ -3345,7 +3345,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 159) @@ -3363,7 +3363,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 160) @@ -3383,7 +3383,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 161) @@ -3403,7 +3403,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 162) @@ -3425,7 +3425,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 163) @@ -3443,7 +3443,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 164) @@ -3463,7 +3463,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 165) @@ -3481,7 +3481,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 166) @@ -3501,7 +3501,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 167) diff --git a/tests/compiler/std/operator-overloading.optimized.wat b/tests/compiler/std/operator-overloading.optimized.wat index b517ad4a..cf8812a8 100644 --- a/tests/compiler/std/operator-overloading.optimized.wat +++ b/tests/compiler/std/operator-overloading.optimized.wat @@ -6,7 +6,7 @@ (type $FFF (func (param f64 f64) (result f64))) (type $FiF (func (param f64 i32) (result f64))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/operator-overloading/a1 (mut i32) (i32.const 0)) @@ -2072,7 +2072,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 87) @@ -2121,7 +2121,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 93) @@ -2171,7 +2171,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 99) @@ -2221,7 +2221,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 105) @@ -2270,7 +2270,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 111) @@ -2320,7 +2320,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 117) @@ -2370,7 +2370,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 123) @@ -2420,7 +2420,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 129) @@ -2470,7 +2470,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 135) @@ -2505,7 +2505,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 141) @@ -2537,7 +2537,7 @@ (if (get_global $std/operator-overloading/eqf) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 147) @@ -2555,7 +2555,7 @@ (if (get_global $std/operator-overloading/eq) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 151) @@ -2576,7 +2576,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 155) @@ -2611,7 +2611,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 161) @@ -2646,7 +2646,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 167) @@ -2681,7 +2681,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 173) @@ -2716,7 +2716,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 179) @@ -2785,7 +2785,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 193) @@ -2854,7 +2854,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 207) diff --git a/tests/compiler/std/operator-overloading.untouched.wat b/tests/compiler/std/operator-overloading.untouched.wat index 543a40f5..09b915dc 100644 --- a/tests/compiler/std/operator-overloading.untouched.wat +++ b/tests/compiler/std/operator-overloading.untouched.wat @@ -6,7 +6,7 @@ (type $FFF (func (param f64 f64) (result f64))) (type $FiF (func (param f64 i32) (result f64))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -2378,7 +2378,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 87) @@ -2428,7 +2428,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 93) @@ -2478,7 +2478,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 99) @@ -2528,7 +2528,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 105) @@ -2578,7 +2578,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 111) @@ -2628,7 +2628,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 117) @@ -2678,7 +2678,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 123) @@ -2728,7 +2728,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 129) @@ -2778,7 +2778,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 135) @@ -2815,7 +2815,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 141) @@ -2852,7 +2852,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 147) @@ -2875,7 +2875,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 151) @@ -2898,7 +2898,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 155) @@ -2935,7 +2935,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 161) @@ -2972,7 +2972,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 167) @@ -3009,7 +3009,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 173) @@ -3046,7 +3046,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 179) @@ -3121,7 +3121,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 193) @@ -3196,7 +3196,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 207) diff --git a/tests/compiler/std/polyfills.optimized.wat b/tests/compiler/std/polyfills.optimized.wat index 10c87df6..787ec382 100644 --- a/tests/compiler/std/polyfills.optimized.wat +++ b/tests/compiler/std/polyfills.optimized.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $II (func (param i64) (result i64))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\11\00\00\00~\00l\00i\00b\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s") (data (i32.const 48) "\10\00\00\00s\00t\00d\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s") @@ -22,7 +22,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -85,7 +85,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -111,7 +111,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -177,7 +177,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -203,7 +203,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -236,7 +236,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -289,7 +289,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -330,7 +330,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -376,7 +376,7 @@ (i32.const 48042) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 4) @@ -396,7 +396,7 @@ (i32.const 48042) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 5) @@ -413,7 +413,7 @@ (i32.const -573785174) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 8) @@ -430,7 +430,7 @@ (i32.const -573785174) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 9) @@ -447,7 +447,7 @@ (i64.const -2464388556401798912) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 12) @@ -464,7 +464,7 @@ (i64.const -2464388556401798912) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 13) @@ -481,7 +481,7 @@ (i32.const -573785174) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 16) @@ -498,7 +498,7 @@ (i32.const -573785174) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 17) @@ -518,7 +518,7 @@ (i32.const 48042) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 20) @@ -538,7 +538,7 @@ (i32.const 48042) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 21) @@ -555,7 +555,7 @@ (i32.const -7816278) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 24) @@ -572,7 +572,7 @@ (i32.const -7816278) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 25) diff --git a/tests/compiler/std/polyfills.untouched.wat b/tests/compiler/std/polyfills.untouched.wat index 7281512d..0150b04b 100644 --- a/tests/compiler/std/polyfills.untouched.wat +++ b/tests/compiler/std/polyfills.untouched.wat @@ -3,7 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $II (func (param i64) (result i64))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $HEAP_BASE i32 (i32.const 84)) (memory $0 1) (data (i32.const 8) "\11\00\00\00~\00l\00i\00b\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s\00") @@ -38,7 +38,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -132,7 +132,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -175,7 +175,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -272,7 +272,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -324,7 +324,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -389,7 +389,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -457,7 +457,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -560,7 +560,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -660,7 +660,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -725,7 +725,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -781,7 +781,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -861,7 +861,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 27) @@ -927,7 +927,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 4) @@ -958,7 +958,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 5) @@ -977,7 +977,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 8) @@ -996,7 +996,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 9) @@ -1015,7 +1015,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 12) @@ -1034,7 +1034,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 13) @@ -1053,7 +1053,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 16) @@ -1072,7 +1072,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 17) @@ -1094,7 +1094,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 20) @@ -1125,7 +1125,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 21) @@ -1144,7 +1144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 24) @@ -1163,7 +1163,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 25) diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index abd8cbea..560920e0 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -5,7 +5,7 @@ (type $iiiv (func (param i32 i32 i32))) (type $iv (func (param i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/set/set (mut i32) (i32.const 0)) @@ -1983,7 +1983,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 33) @@ -2095,7 +2095,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 22) @@ -2155,7 +2155,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 51) @@ -2263,7 +2263,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 70) @@ -2300,7 +2300,7 @@ (get_global $std/set/set) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -2335,7 +2335,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -2352,7 +2352,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -2369,7 +2369,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) @@ -2386,7 +2386,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 17) @@ -2401,7 +2401,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -2424,7 +2424,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -2441,7 +2441,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -2456,7 +2456,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -2473,7 +2473,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -2490,7 +2490,7 @@ (get_global $std/set/set) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) @@ -2505,7 +2505,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 30) diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index fb384006..35da191c 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -5,7 +5,7 @@ (type $iiiv (func (param i32 i32 i32))) (type $iv (func (param i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -2270,7 +2270,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 33) @@ -2388,7 +2388,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 22) @@ -2460,7 +2460,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 51) @@ -2580,7 +2580,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 32) (i32.const 70) @@ -2631,7 +2631,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -2668,7 +2668,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 13) @@ -2685,7 +2685,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 15) @@ -2702,7 +2702,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 16) @@ -2719,7 +2719,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 17) @@ -2738,7 +2738,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -2763,7 +2763,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -2780,7 +2780,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -2799,7 +2799,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -2816,7 +2816,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -2838,7 +2838,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) @@ -2857,7 +2857,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 30) diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index 907dcd58..3a3f932a 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -10,7 +10,7 @@ (type $iiF (func (param i32 i32) (result f64))) (type $iiFv (func (param i32 i32 f64))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 272)) @@ -506,7 +506,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 212) (i32.const 22) @@ -2409,7 +2409,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 212) (i32.const 32) @@ -2496,7 +2496,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 212) (i32.const 56) @@ -2537,7 +2537,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 180) (i32.const 86) @@ -2632,7 +2632,7 @@ (i32.const 134217727) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 180) (i32.const 86) @@ -2727,7 +2727,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 180) (i32.const 86) @@ -2822,7 +2822,7 @@ (i32.const 134217727) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 180) (i32.const 86) @@ -2887,7 +2887,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 8) @@ -2905,7 +2905,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 9) @@ -2923,7 +2923,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 10) @@ -2946,7 +2946,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 12) @@ -2963,7 +2963,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 14) @@ -2981,7 +2981,7 @@ (i64.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 15) @@ -2999,7 +2999,7 @@ (i64.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 16) @@ -3022,7 +3022,7 @@ (i64.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 18) @@ -3039,7 +3039,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 20) @@ -3057,7 +3057,7 @@ (f32.const 1.5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 21) @@ -3075,7 +3075,7 @@ (f32.const 2.5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 22) @@ -3098,7 +3098,7 @@ (f32.const 2.5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 24) @@ -3115,7 +3115,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 26) @@ -3133,7 +3133,7 @@ (f64.const 1.25) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 27) @@ -3151,7 +3151,7 @@ (f64.const 2.25) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 28) @@ -3174,7 +3174,7 @@ (f64.const 2.25) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 30) diff --git a/tests/compiler/std/static-array.untouched.wat b/tests/compiler/std/static-array.untouched.wat index e1fc5a36..dec26d39 100644 --- a/tests/compiler/std/static-array.untouched.wat +++ b/tests/compiler/std/static-array.untouched.wat @@ -10,7 +10,7 @@ (type $iiF (func (param i32 i32) (result f64))) (type $iiFv (func (param i32 i32 f64))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -567,7 +567,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 212) (i32.const 22) @@ -2733,7 +2733,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 212) (i32.const 32) @@ -2823,7 +2823,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 212) (i32.const 56) @@ -2871,7 +2871,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 180) (i32.const 86) @@ -2988,7 +2988,7 @@ (i32.const 134217727) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 180) (i32.const 86) @@ -3105,7 +3105,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 180) (i32.const 86) @@ -3222,7 +3222,7 @@ (i32.const 134217727) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 180) (i32.const 86) @@ -3295,7 +3295,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 8) @@ -3315,7 +3315,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 9) @@ -3335,7 +3335,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 10) @@ -3360,7 +3360,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 12) @@ -3379,7 +3379,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 14) @@ -3399,7 +3399,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 15) @@ -3419,7 +3419,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 16) @@ -3444,7 +3444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 18) @@ -3463,7 +3463,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 20) @@ -3483,7 +3483,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 21) @@ -3503,7 +3503,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 22) @@ -3528,7 +3528,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 24) @@ -3547,7 +3547,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 26) @@ -3567,7 +3567,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 27) @@ -3587,7 +3587,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 28) @@ -3612,7 +3612,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 136) (i32.const 30) diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 7efaeebe..ffe5eb58 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -8,7 +8,7 @@ (type $ii (func (param i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/string/str (mut i32) (i32.const 8)) @@ -59,7 +59,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 37) @@ -158,7 +158,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 231) @@ -245,7 +245,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 98) @@ -355,7 +355,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 210) @@ -977,7 +977,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 466) @@ -1174,7 +1174,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 340) (i32.const 20) @@ -3071,7 +3071,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 74) @@ -3555,7 +3555,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 383) @@ -3587,7 +3587,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 388) @@ -3695,7 +3695,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 9) @@ -3712,7 +3712,7 @@ (i32.const 16) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 11) @@ -3730,7 +3730,7 @@ (i32.const 104) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 12) @@ -3748,7 +3748,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 13) @@ -3771,7 +3771,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 14) @@ -3789,7 +3789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 15) @@ -3808,7 +3808,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 16) @@ -3827,7 +3827,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 17) @@ -3845,7 +3845,7 @@ (f64.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 23) @@ -3863,7 +3863,7 @@ (f64.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 24) @@ -3881,7 +3881,7 @@ (f64.const 5) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 25) @@ -3899,7 +3899,7 @@ (f64.const 455) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 26) @@ -3917,7 +3917,7 @@ (f64.const 3855) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 27) @@ -3935,7 +3935,7 @@ (f64.const 3855) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 28) @@ -3953,7 +3953,7 @@ (f64.const 11) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 29) @@ -3971,7 +3971,7 @@ (f64.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 30) @@ -3988,7 +3988,7 @@ (f64.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 32) @@ -4005,7 +4005,7 @@ (f64.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 33) @@ -4022,7 +4022,7 @@ (f64.const 0.1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 34) @@ -4039,7 +4039,7 @@ (f64.const 0.25) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 35) @@ -4056,7 +4056,7 @@ (f64.const 0.1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 36) @@ -4079,7 +4079,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 39) @@ -4096,7 +4096,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 40) @@ -4113,7 +4113,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 41) @@ -4130,7 +4130,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 42) @@ -4147,7 +4147,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 44) @@ -4164,7 +4164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 45) @@ -4181,7 +4181,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 46) @@ -4198,7 +4198,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 47) @@ -4213,7 +4213,7 @@ (i32.const 392) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 48) @@ -4228,7 +4228,7 @@ (get_global $std/string/nullStr) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 50) @@ -4243,7 +4243,7 @@ (i32.const 328) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 51) @@ -4260,7 +4260,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 53) @@ -4277,7 +4277,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 54) @@ -4294,7 +4294,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 55) @@ -4311,7 +4311,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 56) @@ -4326,7 +4326,7 @@ (i32.const 336) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 57) @@ -4341,7 +4341,7 @@ (i32.const 416) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 58) @@ -4356,7 +4356,7 @@ (i32.const 336) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 59) @@ -4371,7 +4371,7 @@ (i32.const 336) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 60) @@ -4388,7 +4388,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 61) @@ -4405,7 +4405,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 62) @@ -4422,7 +4422,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 64) @@ -4442,7 +4442,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 66) @@ -4462,7 +4462,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 67) @@ -4482,7 +4482,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 68) @@ -4502,7 +4502,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 69) @@ -4522,7 +4522,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 70) @@ -4542,7 +4542,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 71) @@ -4562,7 +4562,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 72) @@ -4582,7 +4582,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 73) @@ -4602,7 +4602,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 74) diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index 24aca8f0..a1e11e7c 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -8,7 +8,7 @@ (type $ii (func (param i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -96,7 +96,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 37) @@ -209,7 +209,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 231) @@ -316,7 +316,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 98) @@ -444,7 +444,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 210) @@ -1154,7 +1154,7 @@ (i32.const 0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 466) @@ -1382,7 +1382,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 340) (i32.const 20) @@ -3543,7 +3543,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 74) @@ -4110,7 +4110,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 383) @@ -4145,7 +4145,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 76) (i32.const 388) @@ -4266,7 +4266,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 9) @@ -4285,7 +4285,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 11) @@ -4305,7 +4305,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 12) @@ -4323,7 +4323,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 13) @@ -4346,7 +4346,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 14) @@ -4364,7 +4364,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 15) @@ -4385,7 +4385,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 16) @@ -4406,7 +4406,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 17) @@ -4426,7 +4426,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 23) @@ -4446,7 +4446,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 24) @@ -4466,7 +4466,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 25) @@ -4486,7 +4486,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 26) @@ -4506,7 +4506,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 27) @@ -4526,7 +4526,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 28) @@ -4546,7 +4546,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 29) @@ -4566,7 +4566,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 30) @@ -4585,7 +4585,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 32) @@ -4604,7 +4604,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 33) @@ -4623,7 +4623,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 34) @@ -4642,7 +4642,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 35) @@ -4661,7 +4661,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 36) @@ -4684,7 +4684,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 39) @@ -4701,7 +4701,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 40) @@ -4718,7 +4718,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 41) @@ -4735,7 +4735,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 42) @@ -4752,7 +4752,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 44) @@ -4769,7 +4769,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 45) @@ -4786,7 +4786,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 46) @@ -4803,7 +4803,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 47) @@ -4822,7 +4822,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 48) @@ -4841,7 +4841,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 50) @@ -4860,7 +4860,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 51) @@ -4877,7 +4877,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 53) @@ -4894,7 +4894,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 54) @@ -4911,7 +4911,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 55) @@ -4928,7 +4928,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 56) @@ -4947,7 +4947,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 57) @@ -4966,7 +4966,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 58) @@ -4985,7 +4985,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 59) @@ -5004,7 +5004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 60) @@ -5021,7 +5021,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 61) @@ -5038,7 +5038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 62) @@ -5057,7 +5057,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 64) @@ -5077,7 +5077,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 66) @@ -5097,7 +5097,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 67) @@ -5117,7 +5117,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 68) @@ -5137,7 +5137,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 69) @@ -5157,7 +5157,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 70) @@ -5177,7 +5177,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 71) @@ -5197,7 +5197,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 72) @@ -5217,7 +5217,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 73) @@ -5237,7 +5237,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 44) (i32.const 74) diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 482d5a70..05076d14 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -6,7 +6,7 @@ (type $iiiv (func (param i32 i32 i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/typedarray/arr (mut i32) (i32.const 0)) @@ -129,7 +129,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 108) (i32.const 22) @@ -495,7 +495,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -572,7 +572,7 @@ (i32.const 536870908) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -655,7 +655,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -738,7 +738,7 @@ (i32.const 134217727) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -825,7 +825,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -842,7 +842,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 19) @@ -859,7 +859,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -878,7 +878,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -895,7 +895,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -912,7 +912,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -931,7 +931,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -948,7 +948,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) @@ -965,7 +965,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 30) @@ -984,7 +984,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 33) @@ -1004,7 +1004,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 34) @@ -1021,7 +1021,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 35) @@ -1040,7 +1040,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 38) @@ -1060,7 +1060,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 39) @@ -1077,7 +1077,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 40) @@ -1096,7 +1096,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 43) @@ -1116,7 +1116,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 44) @@ -1133,7 +1133,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -1152,7 +1152,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 48) @@ -1172,7 +1172,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 49) @@ -1189,7 +1189,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 50) @@ -1208,7 +1208,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 53) @@ -1228,7 +1228,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 54) @@ -1245,7 +1245,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 55) @@ -1264,7 +1264,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 58) @@ -1284,7 +1284,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 59) @@ -1301,7 +1301,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -1320,7 +1320,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -1340,7 +1340,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 64) @@ -1357,7 +1357,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) @@ -1376,7 +1376,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 68) @@ -1396,7 +1396,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 69) @@ -1413,7 +1413,7 @@ (get_local $0) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 70) @@ -1443,7 +1443,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 48) @@ -1488,7 +1488,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 35) @@ -1638,7 +1638,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 48) @@ -1704,7 +1704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 35) @@ -1773,7 +1773,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) @@ -1787,7 +1787,7 @@ (get_global $std/typedarray/arr) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 81) @@ -1804,7 +1804,7 @@ (i32.const 12) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 82) @@ -1822,7 +1822,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 83) @@ -1840,7 +1840,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 84) @@ -1858,7 +1858,7 @@ (i32.const 3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 85) @@ -1882,7 +1882,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 88) @@ -1899,7 +1899,7 @@ (i32.const 4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 89) @@ -1916,7 +1916,7 @@ (i32.const 8) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 90) @@ -1934,7 +1934,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 91) @@ -1973,7 +1973,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 98) @@ -1994,7 +1994,7 @@ (i32.const 2) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 99) @@ -2015,7 +2015,7 @@ (i32.const 255) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 100) diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index c569bde8..fbf621fd 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -6,7 +6,7 @@ (type $iiiv (func (param i32 i32 i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -164,7 +164,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 108) (i32.const 22) @@ -551,7 +551,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -647,7 +647,7 @@ (i32.const 1073741816) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -743,7 +743,7 @@ (i32.const 536870908) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -839,7 +839,7 @@ (i32.const 536870908) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -935,7 +935,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -1031,7 +1031,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -1127,7 +1127,7 @@ (i32.const 134217727) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -1223,7 +1223,7 @@ (i32.const 134217727) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -1319,7 +1319,7 @@ (i32.const 268435454) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -1415,7 +1415,7 @@ (i32.const 134217727) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 18) @@ -1528,7 +1528,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 18) @@ -1550,7 +1550,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 19) @@ -1569,7 +1569,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 20) @@ -1594,7 +1594,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 23) @@ -1616,7 +1616,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -1635,7 +1635,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -1660,7 +1660,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 28) @@ -1682,7 +1682,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 29) @@ -1701,7 +1701,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 30) @@ -1726,7 +1726,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 33) @@ -1748,7 +1748,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 34) @@ -1767,7 +1767,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 35) @@ -1792,7 +1792,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 38) @@ -1814,7 +1814,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 39) @@ -1833,7 +1833,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 40) @@ -1858,7 +1858,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 43) @@ -1880,7 +1880,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 44) @@ -1899,7 +1899,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) @@ -1924,7 +1924,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 48) @@ -1946,7 +1946,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 49) @@ -1965,7 +1965,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 50) @@ -1990,7 +1990,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 53) @@ -2012,7 +2012,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 54) @@ -2031,7 +2031,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 55) @@ -2056,7 +2056,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 58) @@ -2078,7 +2078,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 59) @@ -2097,7 +2097,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 60) @@ -2122,7 +2122,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 63) @@ -2144,7 +2144,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 64) @@ -2163,7 +2163,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 65) @@ -2188,7 +2188,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 68) @@ -2210,7 +2210,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 69) @@ -2229,7 +2229,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 70) @@ -2265,7 +2265,7 @@ (get_local $4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 48) @@ -2321,7 +2321,7 @@ (get_local $3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 35) @@ -2507,7 +2507,7 @@ (get_local $4) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 48) @@ -2594,7 +2594,7 @@ (get_local $3) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 48) (i32.const 35) @@ -2636,7 +2636,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 1) @@ -2653,7 +2653,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 2) @@ -2670,7 +2670,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 3) @@ -2687,7 +2687,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 4) @@ -2704,7 +2704,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 5) @@ -2721,7 +2721,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 6) @@ -2738,7 +2738,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 7) @@ -2755,7 +2755,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -2772,7 +2772,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -2789,7 +2789,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 10) @@ -2806,7 +2806,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 11) @@ -2867,7 +2867,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 80) @@ -2886,7 +2886,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 81) @@ -2908,7 +2908,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 82) @@ -2928,7 +2928,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 83) @@ -2948,7 +2948,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 84) @@ -2968,7 +2968,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 85) @@ -2994,7 +2994,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 88) @@ -3016,7 +3016,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 89) @@ -3038,7 +3038,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 90) @@ -3058,7 +3058,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 91) @@ -3102,7 +3102,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 98) @@ -3125,7 +3125,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 99) @@ -3148,7 +3148,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 100) diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 88aedf48..dcb8f425 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $while/n (mut i32) (i32.const 10)) (global $while/m (mut i32) (i32.const 0)) (global $while/o (mut i32) (i32.const 0)) @@ -34,7 +34,7 @@ (if (get_global $while/n) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -49,7 +49,7 @@ (i32.const 10) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -103,7 +103,7 @@ (if (get_global $while/n) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 21) @@ -118,7 +118,7 @@ (i32.const 9) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -134,7 +134,7 @@ (if (get_global $while/n) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -149,7 +149,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -164,7 +164,7 @@ (i32.const 9) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 26) @@ -212,7 +212,7 @@ (i32.const -1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -227,7 +227,7 @@ (i32.const 1) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 32) diff --git a/tests/compiler/while.untouched.wat b/tests/compiler/while.untouched.wat index 421198e5..22c3e576 100644 --- a/tests/compiler/while.untouched.wat +++ b/tests/compiler/while.untouched.wat @@ -1,7 +1,7 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) - (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $while/n (mut i32) (i32.const 10)) (global $while/m (mut i32) (i32.const 0)) (global $while/o (mut i32) (i32.const 0)) @@ -44,7 +44,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 8) @@ -61,7 +61,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 9) @@ -126,7 +126,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 21) @@ -143,7 +143,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 22) @@ -166,7 +166,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 24) @@ -183,7 +183,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 25) @@ -200,7 +200,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 26) @@ -259,7 +259,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 31) @@ -276,7 +276,7 @@ ) ) (block - (call $abort + (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 32)