From 6c0a5c47d9e606b937b70efb7f5f7ea5dc10b93a Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Mon, 14 May 2018 16:55:55 +0200 Subject: [PATCH] Update Binaryen and take care of WebAssembly/binaryen#1547 --- dist/asc.js.map | 2 +- dist/assemblyscript.js | 2 +- dist/assemblyscript.js.map | 2 +- package-lock.json | 621 ++- package.json | 14 +- src/compiler.ts | 6 +- tests/binaryen/asmjs-math-builtins.js | 45 + tests/binaryen/unreachable-loop.wat | 11 + tests/compiler/abi.optimized.wat | 6 +- tests/compiler/abi.untouched.wat | 20 +- tests/compiler/assert.optimized.wat | 8 +- tests/compiler/assert.untouched.wat | 24 +- tests/compiler/binary.untouched.wat | 2 +- tests/compiler/builtins.optimized.wat | 56 +- tests/compiler/builtins.untouched.wat | 190 +- tests/compiler/call-inferred.optimized.wat | 10 +- tests/compiler/call-inferred.untouched.wat | 12 +- tests/compiler/call-optional.optimized.wat | 14 +- tests/compiler/call-optional.untouched.wat | 16 +- tests/compiler/class-extends.untouched.wat | 2 +- .../class-with-boolean-field.untouched.wat | 2 +- tests/compiler/class.optimized.wat | 2 +- tests/compiler/class.untouched.wat | 6 +- tests/compiler/closure.untouched.wat | 2 +- tests/compiler/comma.optimized.wat | 20 +- tests/compiler/comma.untouched.wat | 22 +- tests/compiler/declare.optimized.wat | 6 +- tests/compiler/declare.untouched.wat | 8 +- tests/compiler/do.optimized.wat | 18 +- tests/compiler/do.untouched.wat | 20 +- tests/compiler/empty.untouched.wat | 2 +- tests/compiler/enum.untouched.wat | 2 +- tests/compiler/export.untouched.wat | 2 +- tests/compiler/exports.optimized.wat | 14 +- tests/compiler/exports.untouched.wat | 2 +- tests/compiler/for.optimized.wat | 6 +- tests/compiler/for.untouched.wat | 8 +- .../function-expression.optimized.wat | 8 +- .../function-expression.untouched.wat | 10 +- tests/compiler/function-types.optimized.wat | 18 +- tests/compiler/function-types.untouched.wat | 20 +- tests/compiler/function.untouched.wat | 2 +- tests/compiler/getter-setter.optimized.wat | 8 +- tests/compiler/getter-setter.untouched.wat | 10 +- tests/compiler/i64-polyfill.untouched.wat | 2 +- tests/compiler/if.optimized.wat | 16 +- tests/compiler/if.untouched.wat | 18 +- tests/compiler/import.untouched.wat | 2 +- tests/compiler/infer-type.untouched.wat | 2 +- tests/compiler/inlining.optimized.wat | 12 +- tests/compiler/inlining.untouched.wat | 26 +- tests/compiler/limits.untouched.wat | 2 +- tests/compiler/literals.untouched.wat | 2 +- tests/compiler/logical.optimized.wat | 18 +- tests/compiler/logical.untouched.wat | 20 +- tests/compiler/mandelbrot.untouched.wat | 2 +- tests/compiler/many-locals.optimized.wat | 6 +- tests/compiler/many-locals.untouched.wat | 8 +- tests/compiler/memcpy.optimized.wat | 26 +- tests/compiler/memcpy.untouched.wat | 28 +- tests/compiler/memmove.optimized.wat | 26 +- tests/compiler/memmove.untouched.wat | 28 +- tests/compiler/memset.optimized.wat | 16 +- tests/compiler/memset.untouched.wat | 16 +- .../named-export-default.untouched.wat | 2 +- .../named-import-default.untouched.wat | 2 +- tests/compiler/namespace.untouched.wat | 2 +- tests/compiler/overflow.optimized.wat | 74 +- tests/compiler/overflow.untouched.wat | 76 +- .../portable-conversions.untouched.wat | 2 +- tests/compiler/recursive.untouched.wat | 2 +- tests/compiler/reexport.untouched.wat | 2 +- tests/compiler/retain-i32.optimized.wat | 38 +- tests/compiler/retain-i32.untouched.wat | 68 +- tests/compiler/scoped.untouched.wat | 2 +- tests/compiler/showcase.optimized.wat | 116 +- tests/compiler/showcase.untouched.wat | 258 +- tests/compiler/static-this.optimized.wat | 4 +- tests/compiler/static-this.untouched.wat | 6 +- .../std/allocator_arena.optimized.wat | 26 +- .../std/allocator_arena.untouched.wat | 14 +- tests/compiler/std/array-access.optimized.wat | 12 +- tests/compiler/std/array-access.untouched.wat | 16 +- .../compiler/std/array-literal.optimized.wat | 12 +- tests/compiler/std/array.optimized.wat | 417 +- tests/compiler/std/array.untouched.wat | 412 +- tests/compiler/std/arraybuffer.optimized.wat | 88 +- tests/compiler/std/arraybuffer.untouched.wat | 34 +- tests/compiler/std/constructor.optimized.wat | 14 +- tests/compiler/std/constructor.untouched.wat | 2 +- tests/compiler/std/hash.optimized.wat | 20 +- tests/compiler/std/hash.untouched.wat | 20 +- tests/compiler/std/libm.optimized.wat | 32 +- tests/compiler/std/libm.untouched.wat | 2 +- tests/compiler/std/math.optimized.wat | 4108 ++++++++--------- tests/compiler/std/math.untouched.wat | 4034 ++++++++-------- tests/compiler/std/mod.optimized.wat | 272 +- tests/compiler/std/mod.untouched.wat | 274 +- tests/compiler/std/new.optimized.wat | 14 +- tests/compiler/std/new.untouched.wat | 2 +- .../std/operator-overloading.optimized.wat | 54 +- .../std/operator-overloading.untouched.wat | 42 +- tests/compiler/std/polyfills.optimized.wat | 44 +- tests/compiler/std/polyfills.untouched.wat | 54 +- tests/compiler/std/set.optimized.wat | 50 +- tests/compiler/std/set.untouched.wat | 38 +- tests/compiler/std/static-array.optimized.wat | 12 +- tests/compiler/std/string.optimized.wat | 370 +- tests/compiler/std/string.untouched.wat | 362 +- tests/compiler/std/typedarray.optimized.wat | 176 +- tests/compiler/std/typedarray.untouched.wat | 152 +- tests/compiler/switch.untouched.wat | 2 +- tests/compiler/ternary.untouched.wat | 2 +- tests/compiler/typealias.untouched.wat | 2 +- tests/compiler/unary.untouched.wat | 2 +- tests/compiler/void.untouched.wat | 2 +- tests/compiler/while.optimized.wat | 20 +- tests/compiler/while.untouched.wat | 22 +- 118 files changed, 6852 insertions(+), 6590 deletions(-) create mode 100644 tests/binaryen/asmjs-math-builtins.js create mode 100644 tests/binaryen/unreachable-loop.wat diff --git a/dist/asc.js.map b/dist/asc.js.map index aaef2b1e..d2c8175e 100644 --- a/dist/asc.js.map +++ b/dist/asc.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://asc/webpack/universalModuleDefinition","webpack://asc/webpack/bootstrap","webpack://asc/../node_modules/node-libs-browser/mock/process.js","webpack://asc/../node_modules/webpack/buildin/global.js","webpack://asc/../node_modules/path-browserify/index.js","webpack://asc/../node_modules/browser-process-hrtime/index.js","webpack://asc/../node_modules/minimist/index.js","webpack://asc/external \"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;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\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\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":"CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,EAAA,WAA0E,IAAM,OAAAG,QAAA,kBAAoC,MAAAC,KAApH,IACA,mBAAAC,eAAAC,IACAD,QAAA,kBAAAL,GACA,iBAAAC,QACAA,QAAA,IAAAD,EAAA,WAA0E,IAAM,OAAAG,QAAA,kBAAoC,MAAAC,KAApH,IAEAL,EAAA,IAAAC,EAAAD,EAAA,gBARA,CASC,oBAAAQ,UAAAC,KAAA,SAAAC,gCACD,mBCTA,IAAAC,KAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAX,QAGA,IAAAC,EAAAQ,EAAAE,IACAC,EAAAD,EACAE,GAAA,EACAb,YAUA,OANAc,EAAAH,GAAAI,KAAAd,EAAAD,QAAAC,IAAAD,QAAAU,GAGAT,EAAAY,GAAA,EAGAZ,EAAAD,QA2CA,OAtCAU,EAAAM,EAAAF,EAGAJ,EAAAO,EAAAR,EAGAC,EAAAQ,EAAA,SAAAlB,EAAAmB,EAAAC,GACAV,EAAAW,EAAArB,EAAAmB,IACAG,OAAAC,eAAAvB,EAAAmB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAA3B,GACAsB,OAAAC,eAAAvB,EAAA,cAAiD4B,OAAA,KAIjDlB,EAAAmB,EAAA,SAAA5B,GACA,IAAAmB,EAAAnB,KAAA6B,WACA,WAA2B,OAAA7B,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAS,EAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAU,EAAAC,GAAsD,OAAAV,OAAAW,UAAAC,eAAAnB,KAAAgB,EAAAC,IAGtDtB,EAAAyB,EAAA,GAIAzB,IAAA0B,EAAA,sBCpDA,IAEAC,EADAC,EAhBAtC,EAAAuC,SAAA,SAAAC,GACAC,WAAAD,EAAA,IAGAxC,EAAA0C,SAAA1C,EAAA2C,KACA3C,EAAA4C,SAAA5C,EAAA6C,MAAA,UACA7C,EAAA8C,IAAA,EACA9C,EAAA+C,SAAA,EACA/C,EAAAgD,OACAhD,EAAAiD,QAEAjD,EAAAkD,QAAA,SAAA/B,GACA,UAAAgC,MAAA,8CAIAb,EAAA,IAEAtC,EAAAsC,IAAA,WAA+B,OAAAA,GAC/BtC,EAAAoD,MAAA,SAAAC,GACAhB,MAAA3B,EAAA,IACA4B,EAAAD,EAAAiB,QAAAD,EAAAf,IAIAtC,EAAAuD,KAAAvD,EAAAwD,KACAxD,EAAAyD,MAAAzD,EAAA0D,OACA1D,EAAA2D,OAAA3D,EAAA4D,YACA5D,EAAA6D,WAAA,aACA7D,EAAA8D,2BC7BA,IAAAC,EAGAA,EAAA,WACA,OAAAxD,KADA,GAIA,IAEAwD,KAAAC,SAAA,cAAAA,KAAA,EAAAC,MAAA,QACC,MAAA9D,GAED,iBAAA+D,SAAAH,EAAAG,QAOAjE,EAAAD,QAAA+D,oBCnBA,SAAAI,GAyBA,SAAAC,EAAAC,EAAAC,GAGA,IADA,IAAAC,EAAA,EACA3D,EAAAyD,EAAAG,OAAA,EAAgC5D,GAAA,EAAQA,IAAA,CACxC,IAAA6D,EAAAJ,EAAAzD,GACA,MAAA6D,EACAJ,EAAAK,OAAA9D,EAAA,GACK,OAAA6D,GACLJ,EAAAK,OAAA9D,EAAA,GACA2D,KACKA,IACLF,EAAAK,OAAA9D,EAAA,GACA2D,KAKA,GAAAD,EACA,KAAUC,IAAMA,EAChBF,EAAAM,QAAA,MAIA,OAAAN,EAKA,IAAAO,EACA,gEACAC,EAAA,SAAAC,GACA,OAAAF,EAAAG,KAAAD,GAAAE,MAAA,IAuJA,SAAAC,EAAAC,EAAAC,GACA,GAAAD,EAAAD,OAAA,OAAAC,EAAAD,OAAAE,GAEA,IADA,IAAAC,KACAxE,EAAA,EAAmBA,EAAAsE,EAAAV,OAAe5D,IAClCuE,EAAAD,EAAAtE,KAAAsE,IAAAE,EAAAC,KAAAH,EAAAtE,IAEA,OAAAwE,EAxJApF,EAAAsD,QAAA,WAIA,IAHA,IAAAgC,EAAA,GACAC,GAAA,EAEA3E,EAAA4E,UAAAhB,OAAA,EAAoC5D,IAAA,IAAA2E,EAA8B3E,IAAA,CAClE,IAAAyB,EAAAzB,GAAA,EAAA4E,UAAA5E,GAAAuD,EAAA7B,MAGA,oBAAAD,EACA,UAAAoD,UAAA,6CACKpD,IAILiD,EAAAjD,EAAA,IAAAiD,EACAC,EAAA,MAAAlD,EAAAqD,OAAA,IAWA,OAJAJ,EAAAlB,EAAAa,EAAAK,EAAAK,MAAA,cAAAxD,GACA,QAAAA,KACGoD,GAAAK,KAAA,MAEHL,EAAA,QAAAD,GAAA,KAKAtF,EAAA6F,UAAA,SAAAxD,GACA,IAAAyD,EAAA9F,EAAA8F,WAAAzD,GACA0D,EAAA,MAAAC,EAAA3D,GAAA,GAcA,OAXAA,EAAA+B,EAAAa,EAAA5C,EAAAsD,MAAA,cAAAxD,GACA,QAAAA,KACG2D,GAAAF,KAAA,OAEHE,IACAzD,EAAA,KAEAA,GAAA0D,IACA1D,GAAA,MAGAyD,EAAA,QAAAzD,GAIArC,EAAA8F,WAAA,SAAAzD,GACA,YAAAA,EAAAqD,OAAA,IAIA1F,EAAA4F,KAAA,WACA,IAAAK,EAAAC,MAAAjE,UAAA+C,MAAAjE,KAAAyE,UAAA,GACA,OAAAxF,EAAA6F,UAAAZ,EAAAgB,EAAA,SAAA9D,EAAAgE,GACA,oBAAAhE,EACA,UAAAsD,UAAA,0CAEA,OAAAtD,IACGyD,KAAA,OAMH5F,EAAAoG,SAAA,SAAAC,EAAAC,GAIA,SAAAC,EAAAC,GAEA,IADA,IAAAC,EAAA,EACUA,EAAAD,EAAAhC,QACV,KAAAgC,EAAAC,GAD8BA,KAK9B,IADA,IAAAC,EAAAF,EAAAhC,OAAA,EACUkC,GAAA,GACV,KAAAF,EAAAE,GADoBA,KAIpB,OAAAD,EAAAC,KACAF,EAAAxB,MAAAyB,EAAAC,EAAAD,EAAA,GAfAJ,EAAArG,EAAAsD,QAAA+C,GAAAL,OAAA,GACAM,EAAAtG,EAAAsD,QAAAgD,GAAAN,OAAA,GAsBA,IALA,IAAAW,EAAAJ,EAAAF,EAAAV,MAAA,MACAiB,EAAAL,EAAAD,EAAAX,MAAA,MAEAnB,EAAAqC,KAAAC,IAAAH,EAAAnC,OAAAoC,EAAApC,QACAuC,EAAAvC,EACA5D,EAAA,EAAiBA,EAAA4D,EAAY5D,IAC7B,GAAA+F,EAAA/F,KAAAgG,EAAAhG,GAAA,CACAmG,EAAAnG,EACA,MAIA,IAAAoG,KACA,IAAApG,EAAAmG,EAA+BnG,EAAA+F,EAAAnC,OAAsB5D,IACrDoG,EAAA3B,KAAA,MAKA,OAFA2B,IAAAC,OAAAL,EAAA5B,MAAA+B,KAEAnB,KAAA,MAGA5F,EAAAkH,IAAA,IACAlH,EAAAmH,UAAA,IAEAnH,EAAAoH,QAAA,SAAA/E,GACA,IAAAgF,EAAAxC,EAAAxC,GACAvC,EAAAuH,EAAA,GACAhE,EAAAgE,EAAA,GAEA,OAAAvH,GAAAuD,GAKAA,IAEAA,IAAA2C,OAAA,EAAA3C,EAAAmB,OAAA,IAGA1E,EAAAuD,GARA,KAYArD,EAAAsH,SAAA,SAAAjF,EAAAkF,GACA,IAAApC,EAAAN,EAAAxC,GAAA,GAKA,OAHAkF,GAAApC,EAAAa,QAAA,EAAAuB,EAAA/C,UAAA+C,IACApC,IAAAa,OAAA,EAAAb,EAAAX,OAAA+C,EAAA/C,SAEAW,GAIAnF,EAAAwH,QAAA,SAAAnF,GACA,OAAAwC,EAAAxC,GAAA,IAaA,IAAA2D,EAAA,WAAAA,QAAA,GACA,SAAAyB,EAAAhB,EAAAiB,GAAkC,OAAAD,EAAAzB,OAAAS,EAAAiB,IAClC,SAAAD,EAAAhB,EAAAiB,GAEA,OADAjB,EAAA,IAAAA,EAAAgB,EAAAjD,OAAAiC,GACAgB,EAAAzB,OAAAS,EAAAiB,wCC7NA,SAAAvD,EAAAwD,GAAA1H,EAAAD,QAAAmE,EAAAyD,QAcA,SAAAC,GACA,IAAAC,EAAA,KAAAC,EAAAhH,KAAAiH,GACAC,EAAApB,KAAAqB,MAAAJ,GACAK,EAAAtB,KAAAqB,MAAAJ,EAAA,OACAD,IACAI,GAAAJ,EAAA,IACAM,GAAAN,EAAA,IACA,IACAI,IACAE,GAAA,MAGA,OAAAF,EAAAE,IAvBA,IAAAH,EAAAL,EAAAK,gBACAD,EACAC,EAAAI,KACAJ,EAAAK,QACAL,EAAAM,OACAN,EAAAO,MACAP,EAAAQ,WACA,WAAa,WAAAC,MAAAC,iDC4Nb,SAAAC,EAAAC,GACA,uBAAAA,MACA,iBAAAC,KAAAD,IACA,6CAAAC,KAAAD,IAzOA3I,EAAAD,QAAA,SAAA8I,EAAAC,GACAA,UAEA,IAAAC,GAAiBC,SAAWC,WAAcC,UAAA,MAE1C,mBAAAJ,EAAA,UACAC,EAAAG,UAAAJ,EAAA,SAGA,kBAAAA,EAAA,SAAAA,EAAA,QACAC,EAAAI,UAAA,KAEAnC,OAAA8B,EAAA,SAAA9D,OAAAoE,SAAAC,QAAA,SAAAC,GACAP,EAAAC,MAAAM,IAAA,IAIA,IAAAC,KACAlI,OAAAmI,KAAAV,EAAAW,WAAgCJ,QAAA,SAAAC,GAChCC,EAAAD,MAAAtC,OAAA8B,EAAAW,MAAAH,IACAC,EAAAD,GAAAD,QAAA,SAAAV,GACAY,EAAAZ,IAAAW,GAAAtC,OAAAuC,EAAAD,GAAAtE,OAAA,SAAA0E,GACA,OAAAf,IAAAe,YAKA1C,OAAA8B,EAAAa,QAAA3E,OAAAoE,SAAAC,QAAA,SAAAC,GACAP,EAAAE,QAAAK,IAAA,EACAC,EAAAD,KACAP,EAAAE,QAAAM,EAAAD,KAAA,KAIA,IAAAM,EAAAd,EAAA,YAEA9F,GAAgB6G,MAChBxI,OAAAmI,KAAAT,EAAAC,OAAAK,QAAA,SAAAC,GACAQ,EAAAR,OAAAS,IAAAH,EAAAN,IAAAM,EAAAN,MAGA,IAAAU,KAYA,SAAAF,EAAAR,EAAAW,EAAAC,GACA,IAAAA,IAAAnB,EAAAG,WANA,SAAAI,EAAAY,GACA,OAAAnB,EAAAI,UAAA,YAAAP,KAAAsB,IACAnB,EAAAE,QAAAK,IAAAP,EAAAC,MAAAM,IAAAC,EAAAD,GAIAa,CAAAb,EAAAY,KACA,IAAAnB,EAAAG,UAAAgB,GADA,CAIA,IAAAvI,GAAAoH,EAAAE,QAAAK,IAAAZ,EAAAuB,GACAG,OAAAH,KAEAI,EAAArH,EAAAsG,EAAA5D,MAAA,KAAA/D,IAEA4H,EAAAD,QAAAD,QAAA,SAAAV,GACA0B,EAAArH,EAAA2F,EAAAjD,MAAA,KAAA/D,MAIA,SAAA0I,EAAAC,EAAAd,EAAA7H,GACA,IAAAP,EAAAkJ,EACAd,EAAAzE,MAAA,MAAAsE,QAAA,SAAAC,QACAS,IAAA3I,EAAAkI,KAAAlI,EAAAkI,OACAlI,IAAAkI,KAGA,IAAAA,EAAAE,IAAAjF,OAAA,QACAwF,IAAA3I,EAAAkI,IAAAP,EAAAC,MAAAM,IAAA,kBAAAlI,EAAAkI,GACAlI,EAAAkI,GAAA3H,EAEAsE,MAAAsE,QAAAnJ,EAAAkI,IACAlI,EAAAkI,GAAAlE,KAAAzD,GAGAP,EAAAkI,IAAAlI,EAAAkI,GAAA3H,GAIA,SAAA6I,EAAAlB,GACA,OAAAC,EAAAD,GAAAmB,KAAA,SAAA9B,GACA,OAAAI,EAAAC,MAAAL,MA9CA,IAAAE,EAAA6B,QAAA,QACAV,EAAAnB,EAAA9D,MAAA8D,EAAA6B,QAAA,SACA7B,IAAA9D,MAAA,EAAA8D,EAAA6B,QAAA,QAgDA,QAAA/J,EAAA,EAAmBA,EAAAkI,EAAAtE,OAAiB5D,IAAA,CACpC,IAAAuJ,EAAArB,EAAAlI,GAEA,YAAAiI,KAAAsB,GAAA,CAIA,IAAAnJ,EAAAmJ,EAAAS,MAAA,yBACArB,EAAAvI,EAAA,GACAY,EAAAZ,EAAA,GACAgI,EAAAC,MAAAM,KACA3H,EAAA,UAAAA,GAEAmI,EAAAR,EAAA3H,EAAAuI,QAEA,cAAAtB,KAAAsB,GAAA,CAEAJ,EADAR,EAAAY,EAAAS,MAAA,kBACA,EAAAT,QAEA,WAAAtB,KAAAsB,GAAA,CACAZ,EAAAY,EAAAS,MAAA,mBAEAZ,KADAa,EAAA/B,EAAAlI,EAAA,KACA,KAAAiI,KAAAgC,IACA7B,EAAAC,MAAAM,IACAP,EAAAI,UACAI,EAAAD,IAAAkB,EAAAlB,GAIA,iBAAAV,KAAAgC,IACAd,EAAAR,EAAA,SAAAsB,EAAAV,GACAvJ,KAGAmJ,EAAAR,GAAAP,EAAAE,QAAAK,IAAA,GAAAY,IARAJ,EAAAR,EAAAsB,EAAAV,GACAvJ,UAUA,aAAAiI,KAAAsB,GAAA,CAIA,IAHA,IAAAW,EAAAX,EAAAnF,MAAA,MAAAW,MAAA,IAEAoF,GAAA,EACAC,EAAA,EAA2BA,EAAAF,EAAAtG,OAAoBwG,IAAA,CAC/C,IAAAH,EAEA,UAFAA,EAAAV,EAAAnF,MAAAgG,EAAA,IAEA,CAKA,cAAAnC,KAAAiC,EAAAE,KAAA,IAAAnC,KAAAgC,GAAA,CACAd,EAAAe,EAAAE,GAAAH,EAAAlF,MAAA,QAAAwE,GACAY,GAAA,EACA,MAGA,cAAAlC,KAAAiC,EAAAE,KACA,0BAAAnC,KAAAgC,GAAA,CACAd,EAAAe,EAAAE,GAAAH,EAAAV,GACAY,GAAA,EACA,MAGA,GAAAD,EAAAE,EAAA,IAAAF,EAAAE,EAAA,GAAAJ,MAAA,OACAb,EAAAe,EAAAE,GAAAb,EAAAnF,MAAAgG,EAAA,GAAAb,GACAY,GAAA,EACA,MAGAhB,EAAAe,EAAAE,IAAAhC,EAAAE,QAAA4B,EAAAE,KAAA,GAAAb,QAvBAJ,EAAAe,EAAAE,GAAAH,EAAAV,GA2BAZ,EAAAY,EAAAnF,OAAA,MACA+F,GAAA,MAAAxB,KACAT,EAAAlI,EAAA,kBAAAiI,KAAAC,EAAAlI,EAAA,KACAoI,EAAAC,MAAAM,IACAC,EAAAD,IAAAkB,EAAAlB,GAIAT,EAAAlI,EAAA,iBAAAiI,KAAAC,EAAAlI,EAAA,KACAmJ,EAAAR,EAAA,SAAAT,EAAAlI,EAAA,GAAAuJ,GACAvJ,KAGAmJ,EAAAR,GAAAP,EAAAE,QAAAK,IAAA,GAAAY,IARAJ,EAAAR,EAAAT,EAAAlI,EAAA,GAAAuJ,GACAvJ,WAiBA,GALAoI,EAAAG,YAAA,IAAAH,EAAAG,UAAAgB,IACAlH,EAAA6G,EAAAzE,KACA2D,EAAAE,QAAA,IAAAP,EAAAwB,KAAAE,OAAAF,IAGApB,EAAAkC,UAAA,CACAhI,EAAA6G,EAAAzE,KAAA6F,MAAAjI,EAAA6G,EAAAhB,EAAA9D,MAAApE,EAAA,IACA,OA2BA,OAtBAU,OAAAmI,KAAAI,GAAAP,QAAA,SAAAC,GAyBA,IAAAgB,EAAAd,EACApI,EADAkJ,EAxBAtH,EAwBAwG,EAxBAF,EAAA5D,MAAA,KAyBAtE,EAAAkJ,EACAd,EAAAzE,MAAA,MAAAsE,QAAA,SAAAC,GACAlI,IAAAkI,SAGAE,IAAAjF,OAAA,KACAnD,IA9BAiJ,EAAArH,EAAAsG,EAAA5D,MAAA,KAAAkE,EAAAN,KAEAC,EAAAD,QAAAD,QAAA,SAAAV,GACA0B,EAAArH,EAAA2F,EAAAjD,MAAA,KAAAkE,EAAAN,SAKAR,EAAA,OACA9F,EAAA,UAAAiD,MACA+D,EAAAX,QAAA,SAAAC,GACAtG,EAAA,MAAAoC,KAAAkE,MAIAU,EAAAX,QAAA,SAAAC,GACAtG,EAAA6G,EAAAzE,KAAAkE,KAIAtG,6/GCzNA,YAAAzC,+BAAA,CAA2D,IAAAL,EAAA,IAAAgD,MAAA,uCAAwF,MAA7BhD,EAAAgL,KAAA,mBAA6BhL,EACnJF,EAAAD,QAAAQ,6DCMA,IAAA4K,EAAApL,EAOAoL,EAAA5G,OAAA,SAAAoF,GAGA,IAFA,IAAAlC,EAAA,EACAzG,EAAA,EACAL,EAAA,EAAmBA,EAAAgJ,EAAApF,SAAmB5D,GACtCK,EAAA2I,EAAAyB,WAAAzK,IACA,IACA8G,GAAA,EACAzG,EAAA,KACAyG,GAAA,EACA,cAAAzG,IAAA,cAAA2I,EAAAyB,WAAAzK,EAAA,OACAA,EACA8G,GAAA,GAEAA,GAAA,EAEA,OAAAA,GAUA0D,EAAAE,KAAA,SAAAC,EAAA9E,EAAAC,GAEA,GADAA,EAAAD,EACA,EACA,SAKA,IAJA,IAGA+E,EAHAnH,EAAA,KACAoH,KACA7K,EAAA,EAEA6F,EAAAC,IACA8E,EAAAD,EAAA9E,MACA,IACAgF,EAAA7K,KAAA4K,EACAA,EAAA,KAAAA,EAAA,IACAC,EAAA7K,MAAA,GAAA4K,IAAA,KAAAD,EAAA9E,KACA+E,EAAA,KAAAA,EAAA,KACAA,IAAA,EAAAA,IAAA,OAAAD,EAAA9E,OAAA,OAAA8E,EAAA9E,OAAA,KAAA8E,EAAA9E,MAAA,MACAgF,EAAA7K,KAAA,OAAA4K,GAAA,IACAC,EAAA7K,KAAA,YAAA4K,IAEAC,EAAA7K,MAAA,GAAA4K,IAAA,OAAAD,EAAA9E,OAAA,KAAA8E,EAAA9E,KACA7F,EAAA,QACAyD,WAAAgB,KAAAqG,OAAAC,aAAAT,MAAAQ,OAAAD,IACA7K,EAAA,GAGA,OAAAyD,GACAzD,GACAyD,EAAAgB,KAAAqG,OAAAC,aAAAT,MAAAQ,OAAAD,EAAAzG,MAAA,EAAApE,KACAyD,EAAAuB,KAAA,KAEA8F,OAAAC,aAAAT,MAAAQ,OAAAD,EAAAzG,MAAA,EAAApE,KAUAwK,EAAAQ,MAAA,SAAAhC,EAAA2B,EAAAM,GAIA,IAHA,IACAC,EACAC,EAFAtF,EAAAoF,EAGAjL,EAAA,EAAmBA,EAAAgJ,EAAApF,SAAmB5D,GACtCkL,EAAAlC,EAAAyB,WAAAzK,IACA,IACA2K,EAAAM,KAAAC,EACSA,EAAA,MACTP,EAAAM,KAAAC,GAAA,MACAP,EAAAM,KAAA,GAAAC,EAAA,KACS,cAAAA,IAAA,eAAAC,EAAAnC,EAAAyB,WAAAzK,EAAA,MACTkL,EAAA,aAAAA,IAAA,UAAAC,KACAnL,EACA2K,EAAAM,KAAAC,GAAA,OACAP,EAAAM,KAAAC,GAAA,UACAP,EAAAM,KAAAC,GAAA,SACAP,EAAAM,KAAA,GAAAC,EAAA,MAEAP,EAAAM,KAAAC,GAAA,OACAP,EAAAM,KAAAC,GAAA,SACAP,EAAAM,KAAA,GAAAC,EAAA,KAGA,OAAAD,EAAApF,kECvGA,SAAAtC,QAAAwD,QAaA,MAAAqE,GAAAtL,oBAAA,GACA2B,KAAA3B,oBAAA,GACA0K,KAAA1K,oBAAA,GACAuL,IAAA,UAAA9H,QAAAzB,SAAA,YAGA,IAAAwJ,eAAAC,MA+rBA,SAAAC,eAAAnJ,GACA,MAAA8F,KAeA,OAdAzH,OAAAmI,KAAAzJ,QAAAqM,SAAA/C,QAAAC,IACA,MAAA+C,EAAAtM,QAAAqM,QAAA9C,GACA+C,EAAA9C,WACAT,EAAAW,QAAAX,EAAAW,WAAqCH,GAAA+C,EAAA9C,cAErCQ,IAAAsC,EAAAC,WACAxD,EAAAwD,UAAAxD,EAAAwD,aAAyChD,GAAA+C,EAAAC,SAEzC,WAAAD,EAAAE,MACAzD,EAAAa,SAAAb,EAAAa,YAAAvE,KAAAkE,GACK,YAAA+C,EAAAE,OACLzD,EAAA0D,UAAA1D,EAAA0D,aAAApH,KAAAkE,KAGA7I,oBAAA,EAAAA,CAAAuC,EAAA8F,GAMA,SAAA2D,iBAAAC,EAAAC,GAGA,IAFA,IAAAC,EACAC,GAAA,EACA,OAAAD,EAAAX,eAAAa,eAAAJ,KACAC,EAAAhB,MACAM,eAAAc,iBAAAH,EAAAD,EAAAK,OAAA,GACAhB,SAEAC,eAAAgB,QAAAL,KAAAC,GAAA,GAEA,OAAAA,EAMA,SAAAK,cACA,OACAC,SAAA,EACAC,UAAA,EACAC,UAAA,EACAC,WAAA,EACAC,UAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,EACAC,SAAA,EACAC,UAAA,EACAC,aAAA,EACAC,cAAA,EACAC,aAAA,EACAC,cAAA,GASA,SAAAC,QAAA1L,GACA,MAAAiE,EAAAtC,QAAAyD,SACApF,IACA,MAAA2L,EAAAhK,QAAAyD,OAAAnB,GACA,WAAA0H,EAAA,GAAAA,EAAA,GAKA,SAAAC,WAAAC,GACA,OAAAA,KAAA,KAAAC,QAAA,eAMA,SAAAC,WAAAC,EAAAC,GACA,SAAAC,EAAAL,EAAAM,GACA,OAAAP,WAAAC,IAEAI,GAAAtK,QAAAyK,QAAAhD,OACA,eAAA8C,EAAAF,EAAApB,SAAAoB,EAAAnB,WACA,eAAAqB,EAAAF,EAAAlB,UAAAkB,EAAAjB,YACA,eAAAmB,EAAAF,EAAAhB,UAAAgB,EAAAf,YACA,eAAAiB,EAAAF,EAAAd,YAAAc,EAAAb,cACA,eAAAe,EAAAF,EAAAZ,SAAAY,EAAAX,WACA,eAAAa,EAAAF,EAAAV,aAAAU,EAAAT,eACA,eAAAW,EAAAF,EAAAR,aAAAQ,EAAAP,gBACArI,KAAAqG,UAxxBA,MACA,IACAC,eAAAxL,oBAAA,GACAyL,OAAA,EACA,IAASzL,qBAAA,eAAAP,EAAA,IAAAgD,MAAA,iDAAAhD,EAAAgL,KAAA,mBAAAhL,EAAA,IAAA0O,UAA2C,MAAA1O,KACjD,MAAAA,GACH,IACAO,qBAAA,eAAAP,EAAA,IAAAgD,MAAA,sCAAAhD,EAAAgL,KAAA,mBAAAhL,EAAA,IAAA2O,UAAmCC,QAAA1M,KAAAuD,KAAA,kCACnClF,qBAAA,eAAAP,EAAA,IAAAgD,MAAA,6CAAAhD,EAAAgL,KAAA,mBAAAhL,EAAA,IACA+L,eAAAxL,qBAAA,eAAAP,EAAA,IAAAgD,MAAA,qCAAAhD,EAAAgL,KAAA,mBAAAhL,EAAA,IACAgM,OAAA,EACK,MAAAhM,GAEL+L,eAAAjI,KAAA,+BACAkI,OAAA,KAdA,GAoBAnM,QAAAgP,UAAA,EAGAhP,QAAAmM,YAGAnM,QAAAiP,QAAAjP,QAAAgP,SAAA,QAAAtO,qBAAA,eAAAP,EAAA,IAAAgD,MAAA,8CAAAhD,EAAAgL,KAAA,mBAAAhL,EAAA,IAAA8O,QAGAjP,QAAAqM,QAAA3L,oBAAA,GAGAV,QAAAkP,cAAA,qBAGAlP,QAAAmP,cAAAjD,eAAAkD,eAGApP,QAAAqP,qBAAA,EAGArP,QAAAsP,mBAAA,EAGAtP,QAAAuP,aAAAvP,QAAAgP,SAAA1N,QAAAkO,kBAAA,ouCAAAC,kBAAA,y1mBAAAC,uBAAA,+pBAAAC,mBAAA,ujBAAAC,iBAAA,0ljBAAAC,MAAA,08VAAAC,YAAA,u6BAAAC,SAAA,qmSAAAC,iBAAA,o4PAAAC,MAAA,iPAAAC,qBAAA,mWAAAC,iBAAA,60GAAAC,uBAAA,oxGAAAC,gBAAA,gtEAAAC,kBAAA,2zGAAAC,sBAAA,s/EAAAC,SAAA,4GAAAC,IAAA,0yBAAAC,KAAA,038EAAAC,OAAA,4jPAAAC,UAAA,u7BAAAC,OAAA,2YAAAC,IAAA,2hEAAAlH,OAAA,ukZAAAmH,WAAA,ooGACA,MAAAC,EAAA3O,KAAAuD,KAAA,2BAEAqL,KAEA,OAHAvQ,qBAAA,eAAAP,EAAA,IAAAgD,MAAA,mCAAAhD,EAAAgL,KAAA,mBAAAhL,EAAA,IAAA+Q,KAAA,WAAoD5O,IAAA0O,IAEpD1H,QAAA6H,GAAAF,EAAAE,EAAAC,QAAA,aAAApF,GAAAqF,aAAAhP,KAAAuD,KAAAoL,EAAAG,GAAA,SACAF,GALA,GASAjR,QAAAsR,gBAAAtR,QAAAgP,SAAA1N,QAAAiQ,SAAA,my3BAAAC,SAAA,k9fACA,MAAAC,EAAApP,KAAAuD,KAAA,gBACA,OACA2L,SAAAvF,GAAAqF,aAAAhP,KAAAuD,KAAA6L,EAAA,yBACAD,SAAAxF,GAAAqF,aAAAhP,KAAAuD,KAAA6L,EAAA,2BAJA,GASAzR,QAAA0R,cAAA,EAAAC,EAAAtF,KACA,iBAAAsF,OAA8CC,WAAAD,IAC9C,MAAAlD,EAAAnN,OAAAuQ,QACAjD,OAAAkD,qBACAlF,OAAAkF,qBACAC,OAAA,KACAC,KAAA,OAcA,OAZAhS,QAAAiS,MACA,wBACA,uBACA3Q,OAAAmI,KAAA4C,OAAgCoE,IAAAtG,QAAkBA,KAAOkC,EAAAlC,SACzD7I,OAAAmI,KAAAkI,KAEA/C,OAAAH,EAAAG,OACAhC,OAAA6B,EAAA7B,OACAsF,SAAA/Q,GAAAwQ,EAAAzP,eAAAf,GAAAwQ,EAAAxQ,GAAA,KACAgR,UAAA,CAAAhR,EAAAiR,IAAA3D,EAAAtN,GAAAiR,EACAC,UAAA,SAEA5D,IAIAzO,QAAAiS,KAAA,SAAAhP,EAAAoJ,EAAAiG,GACA,mBAAAjG,GACAiG,EAAAjG,EACAA,MACGA,IACHA,MAGA,MAAAuC,EAAAvC,EAAAuC,QAAAzK,QAAAyK,OACAhC,EAAAP,EAAAO,QAAAzI,QAAAyI,OACAsF,EAAA7F,EAAA6F,UAAAK,EACAJ,EAAA9F,EAAA8F,WAAAK,EACAH,EAAAhG,EAAAgG,WAAAI,EACAjE,EAAAnC,EAAAmC,OAAArB,cAGA,IAAAyB,EAAA,MAAAzL,MAAA,sCACA,IAAAyJ,EAAA,MAAAzJ,MAAA,sCACA,IAAA6I,GAAAqF,aAAA,CACA,GAAAa,IAAAK,EAAA,MAAApP,MAAA,wCACA,GAAAgP,IAAAK,EAAA,MAAArP,MAAA,yCACA,GAAAkP,IAAAI,EAAA,MAAAtP,MAAA,yCAGA,MAAA2F,EAAAsD,eAAAnJ,GAcA,GAVAqP,MAAA,SAAAI,GACA,IAAAvH,EAAA,EAKA,OAJAuH,IACA9F,EAAAhB,MAAA8G,EAAAC,MAAA1G,KACAd,EAAA,GAEAA,IAIArC,EAAAmG,QAEA,OADAL,EAAAhD,MAAA,WAAA5L,QAAAiP,SAAA9C,MAAA,WAAAF,KACAqG,EAAA,MAGA,GAAAxJ,EAAA8J,MAAA9J,EAAAgB,EAAAtF,OAAA,GACA,MAAAuE,KAiCA,OAhCAzH,OAAAmI,KAAAzJ,QAAAqM,SAAA/C,QAAAnI,IACA,IAAA0R,EAAA7S,QAAAqM,QAAAlL,GACA6Q,EAAA,IAKA,IAJAA,GAAA,KAAA7Q,EACA0R,EAAArJ,SAAA,IAAAqJ,EAAArJ,QAAA,GAAAhF,SACAwN,GAAA,MAAAa,EAAArJ,QAAA,IAEAwI,EAAAxN,OA3BA,IA4BAwN,GAAA,IAEA9L,MAAAsE,QAAAqI,EAAAC,MACA/J,EAAA1D,KAAA2M,EAAAa,EAAAC,KAAA,GAAAD,EAAAC,KAAA9N,MAAA,GAAAyL,IAAAsC,IACA,QAAAnS,EAAA,EAAyBA,EAhCzB,KAgCqCA,EACrCmS,EAAA,IAAAA,EAEA,OAAA9G,IAAA8G,IACSnN,KAAA,KAETmD,EAAA1D,KAAA2M,EAAAa,EAAAC,SAIAhK,EAAA8J,KAAAhE,EAAAhC,GAAAhB,OACA,WAAA5L,QAAAiP,SAAA9C,MAAA,WACA,0CACA,GACA,yBACA,oDACA,uDACA,GACA,YACAlF,OAAA8B,GAAAnD,KAAAqG,UACAqG,EAAA,MAIA,MAAAU,EAAAlK,EAAAkK,QAAA3Q,KAAAiB,QAAAwF,EAAAkK,SAAA,IAGA,IAAAC,EAAA,KAGAnK,EAAAoK,OACA5R,OAAAmI,KAAAzJ,QAAAuP,cAAAjG,QAAA6J,IACAA,EAAAxI,QAAA,UACA6D,EAAAf,aACAe,EAAAhB,WAAAU,QAAA,KACA+E,EAAA/G,eAAAkH,UACApT,QAAAuP,aAAA4D,GACAnT,QAAAmP,cAAAgE,EAAA,OACA,EACAF,QAKA,MAAAI,KACA,GAAAvK,EAAAwK,IAAA,CACA,iBAAAxK,EAAAwK,MAAAxK,EAAAwK,IAAAxK,EAAAwK,IAAA3N,MAAA,MACAO,MAAAjE,UAAAoD,KAAA6F,MAAAmI,EAAAvK,EAAAwK,IAAA7C,IAAA6C,KAAA/M,SACA,QAAA3F,EAAA,EAAA2S,EAAAF,EAAA7O,OAA6C5D,EAAA2S,IAAO3S,EAAA,CACpD,IACA4S,EADAxC,EAAAqC,EAAAzS,GAEAoQ,EAAAyC,SAAA,QACAD,GAAAnR,KAAAiF,SAAA0J,IACAA,EAAA3O,KAAA+E,QAAA4J,IAEAwC,EAAAnB,EAAArB,GAEA,QAAAhG,EAAA,EAAAnK,EAAA2S,EAAAhP,OAA0CwG,EAAAnK,IAAOmK,EAAA,CACjD,IAAAmI,EAAAK,EAAAxI,GACA0I,EAAAxB,EAAA7P,KAAAuD,KAAAoL,EAAAmC,IACA,UAAAO,EAAA,OAAApB,EAAAnP,MAAA,iBAAAgQ,EAAA,iBACA3E,EAAAf,aACAe,EAAAhB,WAAAU,QAAA,KACA+E,EAAA/G,eAAAkH,UACAM,EACA1T,QAAAmP,cAAAgE,GACA,EACAF,OAQA,QAAArS,EAAA,EAAA2S,EAAAzK,EAAAgB,EAAAtF,OAAoC5D,EAAA2S,IAAO3S,EAAA,CAG3C,IAAA+S,EAFA7K,EAAAgB,EAAAlJ,GAEAwQ,QAAA,WAAAA,QAAA,iBAGAwC,EAAA1B,EAAA7P,KAAAuD,KAAAoN,EAAAW,GAAA,OACA,UAAAC,EAAA,CAEA,WADAA,EAAA1B,EAAA7P,KAAAuD,KAAAoN,EAAAW,EAAA,cAEA,OAAArB,EAAAnP,MAAA,eAAAwQ,EAAA,oBAEAA,GAAA,iBAGAA,GAAA,MASA,IANAnF,EAAAf,aACAe,EAAAhB,WAAAU,QAAA,KACA+E,EAAA/G,eAAAkH,UAAAQ,EAAAD,GAAA,EAAAV,KAIA,OAAAU,EAAAV,EAAAY,aAAA,CAIA,GAAAF,EAAAG,WAAA9T,QAAAmP,eAAA,CACA,MAAA4E,EAAAJ,EAAAK,UAAAhU,QAAAmP,cAAA3K,QACAyP,EAAAN,EAAAK,UAAAhU,QAAAmP,cAAA3K,QAAA,SACA,GAAAxE,QAAAuP,aAAArN,eAAA6R,GACAH,EAAA5T,QAAAuP,aAAAwE,GACAJ,EAAA3T,QAAAmP,cAAA4E,EAAA,WACS,GAAA/T,QAAAuP,aAAArN,eAAA+R,GACTL,EAAA5T,QAAAuP,aAAA0E,GACAN,EAAA3T,QAAAmP,cAAA8E,EAAA,WAEA,QAAArT,EAAA,EAAA2S,EAAAF,EAAA7O,OAAmD5D,EAAA2S,IAAO3S,EAAA,CAC1D,MAAAyC,EAAAgQ,EAAAzS,GAEA,WADAgT,EAAA1B,EAAA7P,KAAAuD,KAAAvC,EAAA0Q,EAAA,SACA,CACAJ,EAAA3T,QAAAmP,cAAA4E,EAAA,MACA,MAGA,WADAH,EAAA1B,EAAA7P,KAAAuD,KAAAvC,EAAA4Q,EAAA,SACA,CACAN,EAAA3T,QAAAmP,cAAA8E,EAAA,MACA,YAOO,CACP,MAAAF,EAAAJ,EACAM,EAAAN,EAAA,SAEA,WADAC,EAAA1B,EAAA7P,KAAAuD,KAAAoN,EAAAe,EAAA,SAEAJ,EAAAI,EAAA,WAGA,WADAH,EAAA1B,EAAA7P,KAAAuD,KAAAoN,EAAAiB,EAAA,SAEAN,EAAAM,EAAA,WACW,IAAAF,EAAAD,WAAA,KACX,GAAA9T,QAAAuP,aAAArN,eAAA6R,GACAH,EAAA5T,QAAAuP,aAAAwE,GACAJ,EAAA3T,QAAAmP,cAAA4E,EAAA,WACa,GAAA/T,QAAAuP,aAAArN,eAAA+R,GACbL,EAAA5T,QAAAuP,aAAA0E,GACAN,EAAA3T,QAAAmP,cAAA8E,EAAA,WAEA,QAAArT,EAAA,EAAA2S,EAAAF,EAAA7O,OAAuD5D,EAAA2S,IAAO3S,EAAA,CAC9D,MAAAyC,EAAAgQ,EAAAzS,GAEA,WADAgT,EAAA1B,EAAA7P,KAAAuD,KAAAvC,EAAA0Q,EAAA,SACA,CACAJ,EAAA3T,QAAAmP,cAAA4E,EAAA,MACA,MAGA,WADAH,EAAA1B,EAAA7P,KAAAuD,KAAAvC,EAAA4Q,EAAA,SACA,CACAN,EAAA3T,QAAAmP,cAAA8E,EAAA,MACA,QAQA,SAAAL,EACA,OAAAtB,EAAAnP,MAAA,gBAAAwQ,EAAA,oBAEAnF,EAAAf,aACAe,EAAAhB,WAAAU,QAAA,KACAhC,eAAAkH,UAAAQ,EAAAD,GAAA,EAAAV,KAGA,GAAAvG,iBAAAuG,EAAArG,GACA,OAAA0F,EAAAnP,MAAA,gBAKA,MAAA+Q,EAAAhI,eAAAiI,cAAAlB,GAGAmB,EAAAlI,eAAAmI,gBACAnI,eAAAoI,UAAAF,EAAA,GACAlI,eAAAqI,iBAAAH,IAAAtL,EAAA0L,eACAtI,eAAAuI,YAAAL,IAAAtL,EAAA4L,UACAxI,eAAAyI,YAAAP,IAAAtL,EAAA8L,UACA1I,eAAA2I,gBAAAT,IAAAtL,EAAAgM,cACA5I,eAAA6I,eAAAX,IAAAtL,EAAAkM,aACA9I,eAAA+I,cAAAb,EAAAtL,EAAAoM,aAAA,GACAhJ,eAAAiJ,aAAAf,EAAA,MAAAtL,EAAAsM,WAGAlJ,eAAAmJ,eAAAjB,EAAA,qBACAlI,eAAAmJ,eAAAjB,EAAA,uBAGA,IAAA5K,EAAAV,EAAAwM,IACA,SAAA9L,EAAA,CACA,iBAAAA,QAAA7D,MAAA,MACA,QAAA/E,EAAA,EAAA2S,EAAA/J,EAAAhF,OAAuC5D,EAAA2S,IAAO3S,EAAA,CAC9C,IAAA2U,EAAA/L,EAAA5I,GACAuB,EAAAoT,EAAA5K,QAAA,KACA,GAAAxI,EAAA,SAAAmQ,EAAAnP,MAAA,iBAAAoS,EAAA,kBACA,IAAApU,EAAAoU,EAAAvB,UAAA,EAAA7R,GAAAoE,OACAmD,EAAA6L,EAAAvB,UAAA7R,EAAA,GAAAoE,OACA,IAAApF,EAAAqD,SAAAkF,EAAAlF,OAAA,OAAA8N,EAAAnP,MAAA,iBAAAoS,EAAA,kBACArJ,eAAAmJ,eAAAjB,EAAAjT,EAAAuI,IAKA,IAWAzJ,EAXA6D,EAAAgF,EAAA0M,OACA,SAAA1R,EAAA,CACA,iBAAAA,QAAA6B,MAAA,MACA,QAAA/E,EAAA,EAAA2S,EAAAzP,EAAAU,OAAwC5D,EAAA2S,IAAO3S,EAAA,CAC/C,IAAAO,EAAA2C,EAAAlD,GAAA2F,OACAkP,EAAAvJ,eAAA,WAAA/K,EAAAiQ,QAAA,WAAAsE,eACA,IAAAD,EAAA,OAAAnD,EAAAnP,MAAA,YAAAhC,EAAA,kBACA+K,eAAAyJ,cAAAvB,EAAAqB,IAeA,GAVAjH,EAAAb,eACA,MACA,IACAa,EAAAd,aAAAQ,QAAA,KACAjO,EAAAiM,eAAA0J,eAAA1B,EAAAE,KAEK,MAAAjU,GACL,OAAAmS,EAAAnS,KANA,GASAuM,iBAAAuG,EAAArG,GAEA,OADA3M,KAAA4V,UACAvD,EAAAnP,MAAA,kBAeA,GAXA2F,EAAAgN,WACAtH,EAAAT,gBACAS,EAAAV,cAAAI,QAAA,KACA,IAAAjO,EAAA6V,WAEA,OADA7V,EAAA4V,UACAvD,EAAAnP,MAAA,sBAMA,UAAA2F,EAAAiN,SACAvH,EAAAP,gBACAO,EAAAR,cAAAE,QAAA,KACAjO,EAAA+V,WAAA,2BAEG,UAAAlN,EAAAiN,SACHvH,EAAAP,gBACAO,EAAAR,cAAAE,QAAA,KACAjO,EAAA+V,WAAA,wBAEG,aAAAlN,EAAAiN,SAEH,OADA9V,EAAA4V,UACAvD,EAAAnP,MAAA,0BAGA,IAAA8S,GAAA,EACAC,EAAA,EACAC,GAAArN,EAAAsN,SAEA,IAAAtN,EAAAuN,WACA,iBAAAvN,EAAAuN,SACAJ,EAAAnN,EAAAuN,SACKvN,EAAA,GACLmN,EAAA,EACKnN,EAAA,GACLmN,EAAA,EACKnN,EAAA,GACLmN,EAAA,EACKnN,EAAA,GACLmN,EAAA,GACK,IAAAnN,EAAAuN,UACLJ,EAAAjW,QAAAqP,qBACA6G,EAAAlW,QAAAsP,oBAEA2G,EAAA,GAGAnN,EAAA,EACAoN,EAAA,EACGpN,EAAA,IACHoN,EAAA,GAGA,iBAAApN,EAAAmN,gBACAA,EAAAnN,EAAAmN,eAGA,iBAAAnN,EAAAoN,YACAA,EAAApN,EAAAoN,YACG,MAAApN,EAAAoN,YACHA,EAAA,EACG,MAAApN,EAAAoN,cACHA,EAAA,GAGAjW,EAAAqW,iBAAAL,EAAA,EAAAA,EAAA,GACAhW,EAAAsW,eAAAL,GACAjW,EAAAuW,aAAAL,GAEA,IAAAH,KA8BA,GA7BAlN,EAAAkN,YACA,iBAAAlN,EAAAkN,YACAlN,EAAAkN,UAAAlN,EAAAkN,UAAArQ,MAAA,MAEAmD,EAAAkN,UAAAxR,QACAsE,EAAAkN,UAAA1M,QAAAmN,IACAT,EAAArL,QAAA8L,GAAA,GACAT,EAAA3Q,KAAAoR,MAMAR,GAAA,IACAzH,EAAAP,gBACAO,EAAAR,cAAAE,QAAA,KACAjO,EAAAoW,cAKAL,EAAAxR,SACAgK,EAAAP,gBACAO,EAAAR,cAAAE,QAAA,KACAjO,EAAA+V,YAAAvF,IAAAgG,KAAAlQ,aAKAuC,EAAA4N,OAAA,CACA,IAAAC,GAAA,EACAC,GAAA,EAaA,GAXA,MAAA9N,EAAA+N,UACA,WAAAhO,KAAAC,EAAA+N,UAAA,MAAA/N,EAAAgO,SACAhO,EAAAgO,SAAAhO,EAAA+N,QACO,QAAAhO,KAAAC,EAAA+N,UAAA,MAAA/N,EAAAiO,UACPjO,EAAAiO,UAAAjO,EAAA+N,QACO,MAAA/N,EAAAkO,aACPlO,EAAAkO,WAAAlO,EAAA+N,UAKA,MAAA/N,EAAAkO,WAAA,CACA,IAMAC,EANAC,EAAA,MAAApO,EAAAsM,UACAtM,EAAAsM,UAAA5Q,OACAsE,EAAAsM,UACA/S,KAAAiF,SAAAwB,EAAAkO,YAAA,OACA,KAiBA,GAdAxI,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACA+I,EAAAhX,EAAAkX,SAAAD,KAGApO,EAAAkO,WAAAxS,OACA2N,EAAA9P,KAAAuD,KAAAoN,EAAAlK,EAAAkO,YAAAC,EAAAxI,SAEA2I,EAAAH,EAAAxI,QACAkI,GAAA,GAEAC,GAAA,EAGA,MAAAK,EAAA7B,UACA,GAAAtM,EAAAkO,WAAAxS,OAAA,CACA,IAAA4Q,EAAAiC,KAAAC,MAAAL,EAAA7B,WACAA,EAAAmC,WAAAvX,QAAAkP,cACAkG,EAAAzD,QAAArI,QAAA,CAAAnI,EAAAgF,KACA,IAAA6L,EAAA,KACA,GAAA7Q,EAAA2S,WAAA9T,QAAAmP,eAAA,CACA,IAAAqI,EAAArW,EAAA6S,UAAAhU,QAAAmP,cAAA3K,QAAA4M,QAAA,YACA,GAAApR,QAAAuP,aAAArN,eAAAsV,GACAxF,EAAAhS,QAAAuP,aAAAiI,QAEA,QAAA5W,EAAA,EAAA2S,EAAAF,EAAA7O,OAAyD5D,EAAA2S,GAKzD,QAJAvB,EAAAE,EAAA7P,KAAAuD,KACAyN,EAAAzS,GACAO,EAAA6S,UAAAhU,QAAAmP,cAAA3K,aAHgE5D,SAShEoR,EAAAE,EAAA7P,KAAAuD,KAAAoN,EAAA7R,IAEA,UAAA6Q,EACA,OAAAM,EAAAnP,MAAA,gBAAAhC,EAAA,iBAEAiU,EAAAqC,iBAAArC,EAAAqC,mBACArC,EAAAqC,eAAAtR,GAAA6L,IAEAG,EAAA9P,KAAAuD,KACAoN,EACA3Q,KAAA+E,QAAA0B,EAAAkO,YACA3U,KAAAiF,SAAA4P,IACAG,KAAAK,UAAAtC,SAEAxI,EAAAhB,MAAA,+CAAAK,KAMA,SAAAnD,EAAAiO,UAAA,CACA,IAAAY,EACA7O,EAAAiO,UAAAvS,QACAgK,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACAyJ,EAAA1X,EAAA2X,YAEAzF,EAAA9P,KAAAuD,KAAAoN,EAAAlK,EAAAiO,WAAAY,IACOhB,IACPnI,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACAyJ,EAAA1X,EAAA2X,YAEAR,EAAAO,GACAhB,GAAA,GAEAC,GAAA,EAIA,SAAA9N,EAAA+O,QAAA,CACA,IAAAC,EACAhP,EAAA+O,QAAArT,QACAgK,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACA4J,EAAA5L,eAAA6L,SAAA7D,KAEA/B,EAAA9P,KAAAuD,KAAAoN,EAAAlK,EAAA+O,SAAAC,IACOnB,IACPnI,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACA4J,EAAA5L,eAAA6L,SAAA7D,KAEAkD,EAAAU,GACAnB,GAAA,GAEAC,GAAA,EAIA,SAAA9N,EAAAkP,QAAA,CACA,IAAAC,EACAnP,EAAAkP,QAAAxT,QACAgK,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACA+J,EAAA/L,eAAAgM,SAAAhE,KAEA/B,EAAA9P,KAAAuD,KAAAoN,EAAAlK,EAAAkP,SAAAC,IACOtB,IACPnI,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACA+J,EAAA/L,eAAAgM,SAAAhE,KAEAkD,EAAAa,GACAtB,GAAA,GAEAC,GAAA,EAIA,SAAA9N,EAAAgO,WAAAF,EAAA,CACA,IAAAuB,EACArP,EAAAgO,UAAAhO,EAAAgO,SAAAtS,QACAgK,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACAiK,EAAAlY,EAAAmY,WAEAjG,EAAA9P,KAAAuD,KAAAoN,EAAAlK,EAAAgO,UAAAqB,IACOxB,IACPnI,EAAAX,YACAW,EAAAZ,UAAAM,QAAA,KACAiK,EAAAlY,EAAAmY,WAEAhB,EAAAe,KASA,OAJAlY,EAAA4V,UACA/M,EAAAoF,SACAK,WAAAC,EAAA5B,GAEA0F,EAAA,MAEA,SAAAC,EAAAzN,GACA,IACA,IAAAkN,EAKA,OAJAxD,EAAAnB,YACAmB,EAAApB,UAAAc,QAAA,KACA8D,EAAAhG,GAAAqF,aAAAvM,GAA0CuT,SAAA,WAE1CrG,EACK,MAAA7R,GACL,aAIA,SAAAqS,EAAA1N,EAAAsN,GACA,IASA,OARA5D,EAAAjB,aACAiB,EAAAlB,WAAAY,QAAA,KACA,iBAAAkE,EACApG,GAAAsM,cAAAxT,EAAAsN,GAAgDiG,SAAA,SAEhDrM,GAAAsM,cAAAxT,EAAAsN,MAGA,EACK,MAAAjS,GACL,UAIA,SAAAsS,EAAArL,GACA,IAAAmR,EACA,IAIA,OAHA/J,EAAApB,UAAAc,QAAA,KACAqK,EAAA7X,qBAAA,eAAAP,EAAA,IAAAgD,MAAA,mCAAAhD,EAAAgL,KAAA,mBAAAhL,EAAA,IAAA+Q,KAAA,QAA8C5O,IAAA8E,MAE9CmR,EACK,MAAApY,GACL,UAIA,SAAAiX,EAAAhF,GACAgF,EAAAoB,OACAhK,EAAAjB,aACA6J,EAAAoB,MAAA,GAEAhK,EAAAlB,WAAAY,QAAA,KACA,iBAAAkE,EACAxD,EAAAhD,MAAAwG,GAAgCiG,SAAA,SAEhCzJ,EAAAhD,MAAAwG,OA0BApS,QAAAoM,8BAgBApM,QAAA0M,kCAsBA1M,QAAAmN,wBAEAhJ,QAAAyD,SAAAzD,QAAAyD,OAAAlH,oBAAA,IAUAV,QAAAkO,gBAMAlO,QAAAoO,sBAkBApO,QAAAuO,sBAEA,IAAAkK,iBAAA,IAAA9Q,eAAA+Q,OACA/Q,OAAA+Q,OAAAC,aAAA,SAAAjR,GAAgD,WAAAC,OAAA+Q,OAAAhR,IAChD,SAAAA,GAAmB,WAAAkR,WAAAlR,IAGnB,SAAAoK,mBAAAtP,GACA,IAAAqW,KA0BA,OAzBAA,EAAAjN,MAAA,SAAAH,GAEA,GADAjJ,KAAAiJ,GACA,iBAAAA,EAAA,CACA,IAAAF,EAAAkN,YAAArN,KAAA5G,OAAAiH,IACAL,KAAAQ,MAAAH,EAAAF,EAAA,GACAE,EAAAF,EAEAhL,KAAA8E,KAAAoG,IAEAoN,EAAAC,SAAA,WAEA,IADA,IAAAjN,EAAA,EAAAjL,EAAA,EAAA2S,EAAAhT,KAAAiE,OACA5D,EAAA2S,GAAA1H,GAAAtL,KAAAK,KAAA4D,OACA,IAAA+G,EAAAkN,YAAA5M,GAEA,IADAA,EAAAjL,EAAA,EACAA,EAAA2S,GACAhI,EAAAuF,IAAAvQ,KAAAK,GAAAiL,GACAA,GAAAtL,KAAAK,GAAA4D,SACA5D,EAEA,OAAA2K,GAEAsN,EAAAE,SAAA,WACA,IAAAxN,EAAAhL,KAAAuY,WACA,OAAA1N,KAAAE,KAAAC,EAAA,EAAAA,EAAA/G,SAEAqU,EAGA7Y,QAAA8R,sCAGA9R,QAAAgZ,YACAC,cAAA,EACAC,eAAA,EACAC,mBAAA,EACAC,gBAAA,EACAC,eAAA,EACAC,kBAAA,EACAC,wBAAA,EACAC,OAAA,SACAvZ,OAAA,WACAiT,OAAA,EACAuG,SACAC,SAAA","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\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 121f2f7a..c427bb40 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,T,E=new Map,f=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,F,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 D(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&&(F=te.return)&&F.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=F;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){T={error:e}}finally{try{u&&!u.done&&(E=l.return)&&E.call(l)}finally{if(T)throw T.error}}}}var y,g,T,E,f=c.prototype.declaration;if(f){var I=f.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 T;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 Te=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=Te;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 fe=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=fe;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 u=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=u;var h=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(c.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=s}return this.nextToken},t.prototype.skip=function(e){var t=this.pos,r=this.token,n=this.tokenPos,i=i32.MAX_VALUE;switch(e){case a.GREATERTHAN:i=1}return this.token=this.unsafeNext(e==a.IDENTIFIER,i),this.token==e?(this.nextToken=-1,!0):(this.pos=t,this.token=r,this.tokenPos=n,!1)},t.prototype.mark=function(){var e;return _?(e=_,_=null):e=new d,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){_=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 u(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(s.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(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.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(s.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(s.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(c.isLineBreak(n)){this.error(s.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(s.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(s.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(s.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(s.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(s.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(s.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(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.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}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=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,r.usizeType.byteSize)),n.module=p.Module.create(),n}return i(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){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,T=!0,E=!0;for(h=0;h=0){v=r.flow;m&&v.set(1),g&&v.set(4096),T&&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 T=!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 f=n.flow.scopedLocals;if(f){if(f.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,_.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=f=new Map;f.set(y,E),T=!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(!T){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 T=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(y,d.Type.f32,1,0),a=this.currentType,!(T=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(!(f=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=T=f.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,!(T=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(!(f=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[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(!(T=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(!(f=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):h.createUnreachable();break;case 12:if(!(T=this.f64ModInstance)){var E,f;if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(f=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[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 T=i.getterPrototype;assert(null!=T);var E=T.resolve();if(!E)return n.createUnreachable();var f=(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,f)])],f)}return n.createBlock(null,[this.makeCallDirect(g,[t]),this.makeCallDirect(E)],f)}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,T=0;Ts&&!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=T,this.module.createGetLocal(E,T.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(g))return this.module.createUnreachable();var f=g.type;return assert(f!=d.Type.void),g.is(l.CommonFlags.INLINED)?this.compileInlineConstant(g,t,r):(this.currentType=f,this.module.createGetGlobal(g.internalName,f.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,T=0;T=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 T=d.Type.commonCompatible(i,a,!1);return T?(r=this.convertExpression(r,i,T,1,0,s),n=this.convertExpression(n,a,T,1,0,o),this.currentType=T,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(),T=y.prototype.declaration;if(assert(!y.isAny(l.CommonFlags.CONST)),T.initializer)u.push(i.createStore(m.byteSize,i.createGetLocal(p.index,c),this.compileExpression(T.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.skip(s.Token.IDENTIFIER))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.skip(s.Token.IDENTIFIER)){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skip(s.Token.IDENTIFIER))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.skip(s.Token.IDENTIFIER))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.skip(s.Token.IDENTIFIER))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(e.skip(s.Token.PUBLIC)?(i=e.range(),t||this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,i,"public"),c|=a.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(i=e.range(),t||this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,i,"protected"),c|=a.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(i=e.range(),t||this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,i,"private"),c|=a.CommonFlags.PRIVATE),e.skip(s.Token.READONLY)&&(i||(i=e.range()),t||this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,i,"readonly"),c|=a.CommonFlags.READONLY),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.skip(s.Token.IDENTIFIER)){r||(i=e.range());var l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),u=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,l.range),e.skip(s.Token.COLON)){if(!(u=this.parseType(e)))return null}else u=p.Node.createOmittedType(e.range(e.pos));var h=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,l.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,l.range):n=!0,!(h=this.parseExpression(e,1))))return null;var d=p.Node.createParameter(l,u,h,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,s.Range.join(i,e.range()));return d.flags|=c,d}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skip(s.Token.IDENTIFIER))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.skip(s.Token.IDENTIFIER)?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.skip(s.Token.IDENTIFIER))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,T=!1,E=!1,f=0,I=0;if(e.skip(s.Token.GET)?e.peek(!0,!0)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.GET,T=!0,f=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,!0)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.SET|a.CommonFlags.SET,E=!0,f=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.skip(s.Token.IDENTIFIER))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)):T||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 T=u;if(T.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,T.expression.range),null;T.expression=p.Node.createPropertyAccessExpression(r,T.expression,e.range(a,e.pos)),r=T}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?T:g;if(t){if(e<0)return T;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,T=0,E=0;return T+=(E+=s*d)>>>16,y+=(T+=a*d)>>>16,T&=65535,y+=(T+=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((T&=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?T:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return T;if(e.gt(this.shru(1)))return f;a=T}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?T: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);f=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);f=e.currentType;switch(m=e.compileExpression(c[1],f,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=f,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:T=E.createSelect(y,m,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=E.createUnreachable()}return T;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);f=e.currentType;if(e.currentType=f.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=f.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:T=E.createIf(E.createUnary(s.UnaryOp.EqzI32,y),R);break;case 3:case 8:T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,y),R);break;case 4:case 9:T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),R);break;case 11:T=E.createIf(E.createBinary(s.BinaryOp.EqF32,y,E.createF32(0)),R);break;case 12:T=E.createIf(E.createBinary(s.BinaryOp.EqF64,y,E.createF64(0)),R);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=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));T=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);T=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);T=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);T=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);T=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);T=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),T=R}return T;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),T=e.compileExpressionRetainType(c[0],h,0),A.unset(2048),T);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,F,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 D(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&&(F=te.return)&&F.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=F;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(e.skip(s.Token.PUBLIC)?(i=e.range(),t||this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,i,"public"),c|=a.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(i=e.range(),t||this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,i,"protected"),c|=a.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(i=e.range(),t||this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,i,"private"),c|=a.CommonFlags.PRIVATE),e.skip(s.Token.READONLY)&&(i||(i=e.range()),t||this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,i,"readonly"),c|=a.CommonFlags.READONLY),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 l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),u=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,l.range),e.skip(s.Token.COLON)){if(!(u=this.parseType(e)))return null}else u=p.Node.createOmittedType(e.range(e.pos));var h=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,l.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,l.range):n=!0,!(h=this.parseExpression(e,1))))return null;var d=p.Node.createParameter(l,u,h,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,s.Range.join(i,e.range()));return d.flags|=c,d}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 5ea0bdab..29eb1104 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","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","preferIdentifier","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","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skip","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","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","parseStatement","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,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCC,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MA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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;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\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 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(preferIdentifier: bool = false): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(preferIdentifier);\r\n }\r\n\r\n private unsafeNext(preferIdentifier: bool = false, maxTokenLength: i32 = i32.MAX_VALUE): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n 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 !(preferIdentifier && tokenIsAlsoIdentifier(keywordToken))\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n preferIdentifier: bool = false,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(preferIdentifier, 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 skip(token: Token): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(token == Token.IDENTIFIER, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n 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 max(options.memoryBase, options.usizeType.byteSize) // leave space for `null`\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n 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.isAny(FlowFlags.BREAKS | FlowFlags.CONTINUES | 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} 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 tn.next();\r\n flags |= CommonFlags.ABSTRACT;\r\n if (!tn.skip(Token.CLASS)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"class\"\r\n );\r\n break;\r\n }\r\n // 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 tn.next();\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\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: {\r\n tn.next();\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n 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.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var 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.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n 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 (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"public\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"protected\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"private\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.skip(Token.READONLY)) {\r\n if (!startRange) startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"readonly\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.READONLY;\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var 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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\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, true) == 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, true) == 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.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n 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.skip(Token.IDENTIFIER)) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n 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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\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.TYPE: {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\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 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(true);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(true);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n 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.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n 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.skip(Token.IDENTIFIER)) {\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(true);\r\n var startPos = tn.tokenPos;\r\n var expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var p = determinePrecedenceStart(token);\r\n if (p != Precedence.INVALID) {\r\n 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(true)) {\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 assert(false);\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.is(CommonFlags.PRIVATE)) 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(\"get \");\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n } else if (element.is(CommonFlags.SET)) {\r\n sb.push(\"set \");\r\n sb.push(element.prototype.declaration.name.text);\r\n } else {\r\n if (!element.is(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)) {\r\n sb.push(\"abstract \");\r\n }\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 /* TBD: the compiler implicitly generates setters if the class is exported\r\n indent(sb, this.indentLevel);\r\n sb.push(\"get \");\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 if (!element.is(CommonFlags.READONLY)) {\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(\"set \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\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 }\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 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","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","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","parseStatement","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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AM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCC,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,M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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 tn.next();\r\n flags |= CommonFlags.ABSTRACT;\r\n if (!tn.skip(Token.CLASS)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"class\"\r\n );\r\n break;\r\n }\r\n // 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 tn.next();\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\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: {\r\n tn.next();\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\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 (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"public\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"protected\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"private\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.skip(Token.READONLY)) {\r\n if (!startRange) startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"readonly\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.READONLY;\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.TYPE: {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\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 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 assert(false);\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.is(CommonFlags.PRIVATE)) 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(\"get \");\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n } else if (element.is(CommonFlags.SET)) {\r\n sb.push(\"set \");\r\n sb.push(element.prototype.declaration.name.text);\r\n } else {\r\n if (!element.is(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)) {\r\n sb.push(\"abstract \");\r\n }\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 /* TBD: the compiler implicitly generates setters if the class is exported\r\n indent(sb, this.indentLevel);\r\n sb.push(\"get \");\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 if (!element.is(CommonFlags.READONLY)) {\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(\"set \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\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 }\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 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/package-lock.json b/package-lock.json index e524ec74..1c063a87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==", "dev": true, "requires": { - "@types/node": "10.0.4" + "@types/node": "10.0.8" } }, "@types/glob": { @@ -48,7 +48,7 @@ "requires": { "@types/events": "1.2.0", "@types/minimatch": "3.0.3", - "@types/node": "10.0.4" + "@types/node": "10.0.8" } }, "@types/handlebars": { @@ -82,9 +82,9 @@ "dev": true }, "@types/node": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.0.4.tgz", - "integrity": "sha512-RisaZmcmCLjRipAY7nVi3fmkIk4Z0JMn8YHdGF6qYMsIDpD0dfzz+3yy2dL5Q5aHWOnqPx51IRxkA44myknJvw==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.0.8.tgz", + "integrity": "sha512-MFFKFv2X4iZy/NFl1m1E8uwE1CR96SGwJjgHma09PLtqOWoj3nqeJHMG+P/EuJGVLvC2I6MdQRQsr4TcRduIow==", "dev": true }, "@types/shelljs": { @@ -94,7 +94,236 @@ "dev": true, "requires": { "@types/glob": "5.0.35", - "@types/node": "10.0.4" + "@types/node": "10.0.8" + } + }, + "@webassemblyjs/ast": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.4.3.tgz", + "integrity": "sha512-S6npYhPcTHDYe9nlsKa9CyWByFi8Vj8HovcAgtmMAQZUOczOZbQ8CnwMYKYC5HEZzxEE+oY0jfQk4cVlI3J59Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/wast-parser": "1.4.3", + "debug": "3.1.0", + "webassemblyjs": "1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.4.3.tgz", + "integrity": "sha512-3zTkSFswwZOPNHnzkP9ONq4bjJSeKVMcuahGXubrlLmZP8fmTIJ58dW7h/zOVWiFSuG2em3/HH3BlCN7wyu9Rw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.4.3.tgz", + "integrity": "sha512-e8+KZHh+RV8MUvoSRtuT1sFXskFnWG9vbDy47Oa166xX+l0dD5sERJ21g5/tcH8Yo95e9IN3u7Jc3NbhnUcSkw==", + "dev": true, + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.4.3.tgz", + "integrity": "sha512-9FgHEtNsZQYaKrGCtsjswBil48Qp1agrzRcPzCbQloCoaTbOXLJ9IRmqT+uEZbenpULLRNFugz3I4uw18hJM8w==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.4.3" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.4.3.tgz", + "integrity": "sha512-JINY76U+702IRf7ePukOt037RwmtH59JHvcdWbTTyHi18ixmQ+uOuNhcdCcQHTquDAH35/QgFlp3Y9KqtyJsCQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.4.3.tgz", + "integrity": "sha512-I7bS+HaO0K07Io89qhJv+z1QipTpuramGwUSDkwEaficbSvCcL92CUZEtgykfNtk5wb0CoLQwWlmXTwGbNZUeQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.4.3.tgz", + "integrity": "sha512-p0yeeO/h2r30PyjnJX9xXSR6EDcvJd/jC6xa/Pxg4lpfcNi7JUswOpqDToZQ55HMMVhXDih/yqkaywHWGLxqyQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-buffer": "1.4.3", + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/wasm-gen": "1.4.3", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/leb128": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.4.3.tgz", + "integrity": "sha512-4u0LJLSPzuRDWHwdqsrThYn+WqMFVqbI2ltNrHvZZkzFPO8XOZ0HFQ5eVc4jY/TNHgXcnwrHjONhPGYuuf//KQ==", + "dev": true, + "requires": { + "leb": "0.3.0" + } + }, + "@webassemblyjs/validation": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/validation/-/validation-1.4.3.tgz", + "integrity": "sha512-R+rRMKfhd9mq0rj2mhU9A9NKI2l/Rw65vIYzz4lui7eTKPcCu1l7iZNi4b9Gen8D42Sqh/KGiaQNk/x5Tn/iBQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3" + } + }, + "@webassemblyjs/wasm-edit": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.4.3.tgz", + "integrity": "sha512-qzuwUn771PV6/LilqkXcS0ozJYAeY/OKbXIWU3a8gexuqb6De2p4ya/baBeH5JQ2WJdfhWhSvSbu86Vienttpw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-buffer": "1.4.3", + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/helper-wasm-section": "1.4.3", + "@webassemblyjs/wasm-gen": "1.4.3", + "@webassemblyjs/wasm-opt": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "@webassemblyjs/wast-printer": "1.4.3", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.4.3.tgz", + "integrity": "sha512-eR394T8dHZfpLJ7U/Z5pFSvxl1L63JdREebpv9gYc55zLhzzdJPAuxjBYT4XqevUdW67qU2s0nNA3kBuNJHbaQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/leb128": "1.4.3" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.4.3.tgz", + "integrity": "sha512-7Gp+nschuKiDuAL1xmp4Xz0rgEbxioFXw4nCFYEmy+ytynhBnTeGc9W9cB1XRu1w8pqRU2lbj2VBBA4cL5Z2Kw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-buffer": "1.4.3", + "@webassemblyjs/wasm-gen": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.4.3.tgz", + "integrity": "sha512-KXBjtlwA3BVukR/yWHC9GF+SCzBcgj0a7lm92kTOaa4cbjaTaa47bCjXw6cX4SGQpkncB9PU2hHGYVyyI7wFRg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/leb128": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "webassemblyjs": "1.4.3" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.4.3.tgz", + "integrity": "sha512-QhCsQzqV0CpsEkRYyTzQDilCNUZ+5j92f+g35bHHNqS22FppNTywNFfHPq8ZWZfYCgbectc+PoghD+xfzVFh1Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/floating-point-hex-parser": "1.4.3", + "@webassemblyjs/helper-code-frame": "1.4.3", + "@webassemblyjs/helper-fsm": "1.4.3", + "long": "3.2.0", + "webassemblyjs": "1.4.3" + }, + "dependencies": { + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", + "dev": true + } + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.4.3.tgz", + "integrity": "sha512-EgXk4anf8jKmuZJsqD8qy5bz2frEQhBvZruv+bqwNoLWUItjNSFygk8ywL3JTEz9KtxTlAmqTXNrdD1d9gNDtg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/wast-parser": "1.4.3", + "long": "3.2.0" + }, + "dependencies": { + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", + "dev": true + } } }, "acorn": { @@ -113,15 +342,15 @@ } }, "ajv": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", - "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", + "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", "dev": true, "requires": { - "fast-deep-equal": "1.1.0", + "fast-deep-equal": "2.0.1", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1", - "uri-js": "3.0.2" + "uri-js": "4.2.1" } }, "ajv-keywords": { @@ -304,9 +533,9 @@ "dev": true }, "atob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", - "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", "dev": true }, "babel-code-frame": { @@ -1090,7 +1319,7 @@ "requires": { "babel-core": "6.26.3", "babel-runtime": "6.26.0", - "core-js": "2.5.5", + "core-js": "2.5.6", "home-or-tmp": "2.0.0", "lodash": "4.17.5", "mkdirp": "0.5.1", @@ -1120,7 +1349,7 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.5", + "core-js": "2.5.6", "regenerator-runtime": "0.11.1" } }, @@ -1267,9 +1496,9 @@ "dev": true }, "binaryen": { - "version": "47.0.0-nightly.20180509", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-47.0.0-nightly.20180509.tgz", - "integrity": "sha512-NlJAQGajqq4akizkkhQYYGiqBR8XboIe5cWtdYnLCYS9tY+f7jAlyyzjz5kg/vI8uuD8cuiuF7J2WdgSZ/dejw==" + "version": "47.0.0-nightly.20180513", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-47.0.0-nightly.20180513.tgz", + "integrity": "sha512-XQ57QMbT3fBMj5B5NhCUlelzhFXJyYWD9sEnuUV0nemNLB9IGsbyat18Vs4VTuYbwmmwyCPkV5sBPraefff4sA==" }, "binaryextensions": { "version": "2.1.1", @@ -1350,7 +1579,7 @@ "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "browserify-cipher": { @@ -1453,7 +1682,7 @@ "chownr": "1.0.1", "glob": "7.1.2", "graceful-fs": "4.1.11", - "lru-cache": "4.1.2", + "lru-cache": "4.1.3", "mississippi": "2.0.0", "mkdirp": "0.5.1", "move-concurrently": "1.0.1", @@ -1590,7 +1819,7 @@ "dev": true, "requires": { "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "class-utils": { @@ -1782,9 +2011,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.4.tgz", - "integrity": "sha512-6Y+iBnWmXL+AWtlOp2Vr6R2w5MUlNJRwR0ShVFaAb1CqWzhPOpQg4L0jxD+xpw/Nc8QJwaq3KM79QUCriY8CWQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", "dev": true }, "commander": { @@ -1864,9 +2093,9 @@ "dev": true }, "core-js": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", - "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==", "dev": true }, "core-util-is": { @@ -1876,9 +2105,9 @@ "dev": true }, "create-ecdh": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", - "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { "bn.js": "4.11.8", @@ -1908,7 +2137,7 @@ "create-hash": "1.2.0", "inherits": "2.0.3", "ripemd160": "2.0.2", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "sha.js": "2.4.11" } }, @@ -1941,7 +2170,7 @@ "requires": { "browserify-cipher": "1.0.1", "browserify-sign": "4.0.4", - "create-ecdh": "4.0.1", + "create-ecdh": "4.0.3", "create-hash": "1.2.0", "create-hmac": "1.1.7", "diffie-hellman": "5.0.3", @@ -2282,7 +2511,7 @@ "dev": true, "requires": { "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "execa": { @@ -2306,7 +2535,7 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.2", + "lru-cache": "4.1.3", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -2360,18 +2589,18 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "2.2.4" }, "dependencies": { "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { "is-number": "2.1.0", "isobject": "2.1.0", - "randomatic": "1.1.7", + "randomatic": "3.0.0", "repeat-element": "1.1.2", "repeat-string": "1.6.1" } @@ -2442,7 +2671,7 @@ "dev": true, "requires": { "chardet": "0.4.2", - "iconv-lite": "0.4.21", + "iconv-lite": "0.4.23", "tmp": "0.0.33" } }, @@ -2512,9 +2741,9 @@ } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-glob": { @@ -2581,7 +2810,7 @@ "dev": true, "requires": { "commondir": "1.0.1", - "make-dir": "1.2.0", + "make-dir": "1.3.0", "pkg-dir": "2.0.0" } }, @@ -2604,9 +2833,9 @@ } }, "flow-parser": { - "version": "0.71.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.71.0.tgz", - "integrity": "sha512-rXSvqSBLf8aRI6T3P99jMcUYvZoO1KZcKDkzGJmXvYdNAgRKu7sfGNtxEsn3cX4TgungBuJpX+K8aHRC9/B5MA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.72.0.tgz", + "integrity": "sha512-kFaDtviKlD/rHi6NRp42KTbnPgz/nKcWUJQhqDnLDeKA8uGcRVSy0YlQjaf9M3pFo5PgC3SNFnCPpQGLtHjH2w==", "dev": true }, "flush-write-stream": { @@ -2725,7 +2954,7 @@ "lowercase-keys": "1.0.1", "p-cancelable": "0.3.0", "p-timeout": "1.2.1", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "timed-out": "4.0.1", "url-parse-lax": "1.0.0", "url-to-options": "1.0.1" @@ -2906,24 +3135,18 @@ "dev": true }, "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", "dev": true, "requires": { "array-union": "1.0.2", + "dir-glob": "2.0.0", + "fast-glob": "2.2.1", "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "ignore": "3.3.8", + "pify": "3.0.0", + "slash": "1.0.0" } }, "got": { @@ -2945,7 +3168,7 @@ "p-cancelable": "0.4.1", "p-timeout": "2.0.1", "pify": "3.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "timed-out": "4.0.1", "url-parse-lax": "3.0.0", "url-to-options": "1.0.1" @@ -3123,7 +3346,7 @@ "dev": true, "requires": { "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -3191,9 +3414,9 @@ "dev": true }, "iconv-lite": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", - "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { "safer-buffer": "2.1.2" @@ -3675,8 +3898,8 @@ "babel-preset-stage-1": "6.24.1", "babel-register": "6.26.0", "babylon": "7.0.0-beta.46", - "colors": "1.2.4", - "flow-parser": "0.71.0", + "colors": "1.2.5", + "flow-parser": "0.72.0", "lodash": "4.17.5", "micromatch": "2.3.11", "neo-async": "2.5.1", @@ -3841,6 +4064,12 @@ "invert-kv": "1.0.0" } }, + "leb": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/leb/-/leb-0.3.0.tgz", + "integrity": "sha1-Mr7p+tFoMo1q6oUi2DP0GA7tHaM=", + "dev": true + }, "listr": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", @@ -4038,7 +4267,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -4149,7 +4378,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -4192,9 +4421,9 @@ "dev": true }, "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { "pseudomap": "1.0.2", @@ -4202,9 +4431,9 @@ } }, "make-dir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", - "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { "pify": "3.0.0" @@ -4236,6 +4465,12 @@ "integrity": "sha512-+AKbNsjZl6jFfLPwHhWmGTqE009wTKn3RTmn9K8oUKHrX/abPJjtcRtXpYB/FFrwPJRUA86LX/de3T0knkPCmQ==", "dev": true }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -4267,9 +4502,9 @@ } }, "mem-fs-editor": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.1.tgz", - "integrity": "sha512-54fptqhSZX1sSYsVVInG2qzUWPPrEv/6qYxHAwXJZQfzDcviJcL+7p/wmupg8SdAOi42m/vilMBemx3D6Sz22g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.2.tgz", + "integrity": "sha512-QHvdXLLNmwJXxKdf7x27aNUren6IoPxwcM8Sfd+S6/ddQQMcYdEtVKsh6ilpqMrU18VQuKZEaH0aCGt3JDbA0g==", "dev": true, "requires": { "commondir": "1.0.1", @@ -4297,21 +4532,6 @@ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, - "globby": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", - "dev": true, - "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "fast-glob": "2.2.1", - "glob": "7.1.2", - "ignore": "3.3.8", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -4570,7 +4790,7 @@ "querystring-es3": "0.2.1", "readable-stream": "2.3.6", "stream-browserify": "2.0.1", - "stream-http": "2.8.1", + "stream-http": "2.8.2", "string_decoder": "1.1.1", "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", @@ -4811,7 +5031,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -5074,7 +5294,7 @@ "create-hash": "1.2.0", "create-hmac": "1.1.7", "ripemd160": "2.0.2", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "sha.js": "2.4.11" } }, @@ -5244,23 +5464,21 @@ "dev": true }, "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" }, "dependencies": { - "kind-of": { + "is-number": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true } } }, @@ -5270,7 +5488,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -5280,7 +5498,7 @@ "dev": true, "requires": { "randombytes": "2.0.6", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "read-chunk": { @@ -5290,7 +5508,7 @@ "dev": true, "requires": { "pify": "3.0.0", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "read-pkg": { @@ -5324,7 +5542,7 @@ "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "string_decoder": "1.1.1", "util-deprecate": "1.0.2" } @@ -5363,9 +5581,9 @@ } }, "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", "dev": true }, "regenerator-runtime": { @@ -5410,7 +5628,7 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.3.3", + "regenerate": "1.4.0", "regjsgen": "0.2.0", "regjsparser": "0.1.5" } @@ -5587,21 +5805,6 @@ "aproba": "1.2.0" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, "rxjs": { "version": "5.5.10", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", @@ -5612,9 +5815,9 @@ } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safe-regex": { @@ -5638,7 +5841,7 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "6.4.0", + "ajv": "6.5.0", "ajv-keywords": "3.2.0" } }, @@ -5708,7 +5911,7 @@ "dev": true, "requires": { "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "shebang-command": { @@ -5773,7 +5976,7 @@ "extend-shallow": "2.0.1", "map-cache": "0.2.2", "source-map": "0.5.7", - "source-map-resolve": "0.5.1", + "source-map-resolve": "0.5.2", "use": "3.1.0" }, "dependencies": { @@ -5895,12 +6098,12 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.0", + "atob": "2.1.1", "decode-uri-component": "0.2.0", "resolve-url": "0.2.1", "source-map-url": "0.4.0", @@ -5908,9 +6111,9 @@ } }, "source-map-support": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", - "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", + "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", "requires": { "buffer-from": "1.0.0", "source-map": "0.6.1" @@ -5975,7 +6178,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "static-extend": { @@ -6020,9 +6223,9 @@ } }, "stream-http": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", - "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", + "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", "dev": true, "requires": { "builtin-status-codes": "3.0.0", @@ -6092,7 +6295,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "strip-ansi": { @@ -6280,9 +6483,9 @@ "dev": true }, "ts-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-4.2.0.tgz", - "integrity": "sha512-EvnwgbEUklPQK82OiZS0NDrG0ZoH91+zef8PFXSOZocSQ5jklQyvAM84Id20UxjVdXVIzMgFu+vlKCQomfq27A==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-4.3.0.tgz", + "integrity": "sha512-+zduqQJaeouVrGY3y6+nUG7+OE1+Q7slGCHsiQM/aITCEZ0og3GxrJVsnjM5QcWvOcu9C4VR5dP+egIyT+sNNg==", "dev": true, "requires": { "chalk": "2.4.1", @@ -6293,9 +6496,9 @@ } }, "ts-node": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.0.2.tgz", - "integrity": "sha512-H/KWK27B3JJAc5WFOBBUxN638DukbV8PptdQgiHWPO2SGDVJzuVOl8Ye0XJ5+FiZIdFtgUuGOJRV4c/XBQ5dBg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.0.3.tgz", + "integrity": "sha512-ARaOMNFEPKg2ZuC1qJddFvHxHNFVckR0g9xLxMIoMqSSIkDc8iS4/LoV53EdDWWNq2FGwqcEf0bVVGJIWpsznw==", "requires": { "arrify": "1.0.1", "chalk": "2.4.1", @@ -6303,7 +6506,7 @@ "make-error": "1.3.4", "minimist": "1.2.0", "mkdirp": "0.5.1", - "source-map-support": "0.5.5", + "source-map-support": "0.5.6", "yn": "2.0.0" } }, @@ -6556,9 +6759,9 @@ "dev": true }, "uri-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", - "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.1.tgz", + "integrity": "sha512-jpKCA3HjsBfSDOEgxRDAxQCNyHfCPSbq57PqCkd3gAyBuPb3IWxw54EHncqESznIdqSetHfw3D7ylThu2Kcc9A==", "dev": true, "requires": { "punycode": "2.1.0" @@ -6704,15 +6907,39 @@ "neo-async": "2.5.1" } }, - "webpack": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.7.0.tgz", - "integrity": "sha512-OXOAip9mjy0ahFYCXu6LLNzTiIQzd2UOHkNHANc/dyxf8CYCgcJ5UKsTXfbfeJb4tqkKb6B1FIQ9Xtl6gftb8Q==", + "webassemblyjs": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webassemblyjs/-/webassemblyjs-1.4.3.tgz", + "integrity": "sha512-4lOV1Lv6olz0PJkDGQEp82HempAn147e6BXijWDzz9g7/2nSebVP9GVg62Fz5ZAs55mxq13GA0XLyvY8XkyDjg==", "dev": true, "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/validation": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "@webassemblyjs/wast-parser": "1.4.3", + "long": "3.2.0" + }, + "dependencies": { + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", + "dev": true + } + } + }, + "webpack": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.8.3.tgz", + "integrity": "sha512-/hfAjBISycdK597lxONjKEFX7dSIU1PsYwC3XlXUXoykWBlv9QV5HnO+ql3HvrrgfBJ7WXdnjO9iGPR2aAc5sw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/wasm-edit": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", "acorn": "5.5.3", "acorn-dynamic-import": "3.0.0", - "ajv": "6.4.0", + "ajv": "6.5.0", "ajv-keywords": "3.2.0", "chrome-trace-event": "0.1.3", "enhanced-resolve": "4.0.0", @@ -6823,8 +7050,8 @@ "babel-preset-stage-1": "6.24.1", "babel-register": "6.26.0", "babylon": "6.18.0", - "colors": "1.2.4", - "flow-parser": "0.71.0", + "colors": "1.2.5", + "flow-parser": "0.72.0", "lodash": "4.17.5", "micromatch": "2.3.11", "node-dir": "0.1.8", @@ -6871,7 +7098,7 @@ "dev": true, "requires": { "ast-types": "0.10.1", - "core-js": "2.5.5", + "core-js": "2.5.6", "esprima": "4.0.0", "private": "0.1.8", "source-map": "0.6.1" @@ -6880,9 +7107,9 @@ } }, "webpack-cli": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.2.tgz", - "integrity": "sha512-2C6bs9gORlzCSgkNZTnj8hnXMxe3g2v+yqiUdB+1l/I3sI36ND4zZStV00yq0eGjE5CNu0eqOQr7YYe+42H2Yw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.3.tgz", + "integrity": "sha512-5AsKoL/Ccn8iTrwk3uErdyhetGH+c7VRQ7Itim2GL0IhBRq5rtojVDk00buMRmFmBpw1RvHXq97Gup965LbozA==", "dev": true, "requires": { "chalk": "2.4.1", @@ -6909,7 +7136,7 @@ "v8-compile-cache": "1.1.2", "webpack-addons": "1.1.5", "yargs": "11.1.0", - "yeoman-environment": "2.0.6", + "yeoman-environment": "2.1.0", "yeoman-generator": "2.0.5" } }, @@ -7064,22 +7291,24 @@ } }, "yeoman-environment": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", - "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.1.0.tgz", + "integrity": "sha512-vFmvdxLyM1Nf2ehW7P/nGcjvUvXs1/KUpLSn5adSCVybtaqHcuIKrSQ7dnicOzB/dbcJYUf3kNu419JjrZSVfQ==", "dev": true, "requires": { "chalk": "2.4.1", + "cross-spawn": "6.0.5", "debug": "3.1.0", "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "globby": "6.1.0", + "globby": "8.0.1", "grouped-queue": "0.3.3", - "inquirer": "3.3.0", + "inquirer": "5.2.0", "is-scoped": "1.0.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "log-symbols": "2.2.0", "mem-fs": "1.1.3", + "strip-ansi": "4.0.0", "text-table": "0.2.0", "untildify": "3.0.2" }, @@ -7099,27 +7328,11 @@ "ms": "2.0.0" } }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.5", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - } + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true }, "strip-ansi": { "version": "4.0.0", @@ -7151,8 +7364,8 @@ "github-username": "4.1.0", "istextorbinary": "2.2.1", "lodash": "4.17.10", - "make-dir": "1.2.0", - "mem-fs-editor": "4.0.1", + "make-dir": "1.3.0", + "mem-fs-editor": "4.0.2", "minimist": "1.2.0", "pretty-bytes": "4.0.2", "read-chunk": "2.1.0", @@ -7162,7 +7375,7 @@ "shelljs": "0.8.1", "text-table": "0.2.0", "through2": "2.0.3", - "yeoman-environment": "2.0.6" + "yeoman-environment": "2.1.0" }, "dependencies": { "async": { diff --git a/package.json b/package.json index e620c5c6..1c7e6c07 100644 --- a/package.json +++ b/package.json @@ -12,25 +12,25 @@ }, "dependencies": { "@protobufjs/utf8": "^1.1.0", - "binaryen": "47.0.0-nightly.20180509", + "binaryen": "47.0.0-nightly.20180513", "glob": "^7.1.2", "long": "^4.0.0", "minimist": "^1.2.0", - "ts-node": "^6.0.2" + "ts-node": "^6.0.3" }, "devDependencies": { - "@types/node": "^10.0.4", + "@types/node": "^10.0.8", "browser-process-hrtime": "^0.1.2", "chalk": "^2.4.1", "diff": "^3.5.0", - "source-map-support": "^0.5.5", - "ts-loader": "^4.2.0", + "source-map-support": "^0.5.6", + "ts-loader": "^4.3.0", "tslint": "^5.10.0", "typedoc": "^0.11.1", "typedoc-plugin-external-module-name": "^1.1.1", "typescript": "^2.8.3", - "webpack": "^4.7.0", - "webpack-cli": "^2.1.2" + "webpack": "^4.8.3", + "webpack-cli": "^2.1.3" }, "main": "index.js", "types": "index.d.ts", diff --git a/src/compiler.ts b/src/compiler.ts index f9022545..46d65690 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -276,7 +276,9 @@ export class Compiler extends DiagnosticEmitter { if (!options) options = new Options(); this.options = options; this.memoryOffset = i64_new( - max(options.memoryBase, options.usizeType.byteSize) // leave space for `null` + // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0. + // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547) + max(options.memoryBase, 8) ); this.module = Module.create(); } @@ -5079,7 +5081,7 @@ export class Compiler extends DiagnosticEmitter { let stmt = this.compileStatement(statements[i]); if (getExpressionId(stmt) != ExpressionId.Nop) { body.push(stmt); - if (flow.isAny(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)) break; + if (flow.is(FlowFlags.RETURNS)) break; } } } else { diff --git a/tests/binaryen/asmjs-math-builtins.js b/tests/binaryen/asmjs-math-builtins.js new file mode 100644 index 00000000..cf8452b8 --- /dev/null +++ b/tests/binaryen/asmjs-math-builtins.js @@ -0,0 +1,45 @@ +var binaryen = require("binaryen"); + +var mod = new binaryen.Module(); +var funcType = mod.addFunctionType("F", binaryen.f64, [ binaryen.f64 ]); + +var func = mod.addFunction("floor", funcType, [], + mod.f64.floor( + mod.get_local(0, binaryen.f64) + ) +); +mod.addExport("floor", "floor"); + +func = mod.addFunction("ceil", funcType, [], + mod.f64.ceil( + mod.get_local(0, binaryen.f64) + ) +); +mod.addExport("ceil", "ceil"); + +func = mod.addFunction("sqrt", funcType, [], + mod.f64.sqrt( + mod.get_local(0, binaryen.f64) + ) +); +mod.addExport("sqrt", "sqrt"); + +func = mod.addFunction("trunc", funcType, [], + mod.f64.trunc( + mod.get_local(0, binaryen.f64) + ) +); +mod.addExport("trunc", "trunc"); + +func = mod.addFunction("nearest", funcType, [], + mod.f64.nearest( + mod.get_local(0, binaryen.f64) + ) +); +mod.addExport("nearest", "nearest"); + +console.log(mod.emitText()); +if (!mod.validate()) + console.log("-> does not validate"); + +console.log(mod.emitAsmjs()); diff --git a/tests/binaryen/unreachable-loop.wat b/tests/binaryen/unreachable-loop.wat new file mode 100644 index 00000000..7458bb4d --- /dev/null +++ b/tests/binaryen/unreachable-loop.wat @@ -0,0 +1,11 @@ +(module + (func $0 + (drop + (block $label$1 (result i32) + (loop $label$2 + (unreachable) + ) + ) + ) + ) +) \ No newline at end of file diff --git a/tests/compiler/abi.optimized.wat b/tests/compiler/abi.optimized.wat index a41dbd5c..a5904285 100644 --- a/tests/compiler/abi.optimized.wat +++ b/tests/compiler/abi.optimized.wat @@ -6,7 +6,7 @@ (global $abi/condition (mut i32) (i32.const 0)) (global $abi/y (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\06\00\00\00a\00b\00i\00.\00t\00s") + (data (i32.const 8) "\06\00\00\00a\00b\00i\00.\00t\00s") (export "exported" (func $abi/exported)) (export "exportedExported" (func $abi/exportedExported)) (export "exportedInternal" (func $abi/exportedInternal)) @@ -64,7 +64,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 58) (i32.const 2) ) @@ -79,7 +79,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 2) ) diff --git a/tests/compiler/abi.untouched.wat b/tests/compiler/abi.untouched.wat index aea7362b..53cd5514 100644 --- a/tests/compiler/abi.untouched.wat +++ b/tests/compiler/abi.untouched.wat @@ -5,9 +5,9 @@ (import "env" "abort" (func $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 20)) + (global $HEAP_BASE i32 (i32.const 24)) (memory $0 1) - (data (i32.const 4) "\06\00\00\00a\00b\00i\00.\00t\00s\00") + (data (i32.const 8) "\06\00\00\00a\00b\00i\00.\00t\00s\00") (export "exported" (func $abi/exported)) (export "exportedExported" (func $abi/exportedExported)) (export "exportedInternal" (func $abi/exportedInternal)) @@ -75,7 +75,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 32) (i32.const 2) ) @@ -129,7 +129,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 2) ) @@ -171,7 +171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 58) (i32.const 2) ) @@ -198,7 +198,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 2) ) @@ -222,7 +222,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 72) (i32.const 2) ) @@ -244,7 +244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 74) (i32.const 2) ) @@ -263,7 +263,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 77) (i32.const 2) ) @@ -282,7 +282,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 79) (i32.const 2) ) diff --git a/tests/compiler/assert.optimized.wat b/tests/compiler/assert.optimized.wat index 94c652c8..5735445b 100644 --- a/tests/compiler/assert.optimized.wat +++ b/tests/compiler/assert.optimized.wat @@ -3,8 +3,8 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 4) "\t\00\00\00a\00s\00s\00e\00r\00t\00.\00t\00s") - (data (i32.const 28) "\0c\00\00\00m\00u\00s\00t\00 \00b\00e\00 \00t\00r\00u\00e") + (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") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -18,8 +18,8 @@ (get_local $0) (block (call $abort - (i32.const 28) - (i32.const 4) + (i32.const 32) + (i32.const 8) (i32.const 10) (i32.const 5) ) diff --git a/tests/compiler/assert.untouched.wat b/tests/compiler/assert.untouched.wat index a8e4cb17..ac01e4bd 100644 --- a/tests/compiler/assert.untouched.wat +++ b/tests/compiler/assert.untouched.wat @@ -2,10 +2,10 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) - (global $HEAP_BASE i32 (i32.const 56)) + (global $HEAP_BASE i32 (i32.const 60)) (memory $0 1) - (data (i32.const 4) "\t\00\00\00a\00s\00s\00e\00r\00t\00.\00t\00s\00") - (data (i32.const 28) "\0c\00\00\00m\00u\00s\00t\00 \00b\00e\00 \00t\00r\00u\00e\00") + (data (i32.const 8) "\t\00\00\00a\00s\00s\00e\00r\00t\00.\00t\00s\00") + (data (i32.const 32) "\0c\00\00\00m\00u\00s\00t\00 \00b\00e\00 \00t\00r\00u\00e\00") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -17,7 +17,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1) (i32.const 0) ) @@ -31,7 +31,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 0) ) @@ -48,7 +48,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3) (i32.const 0) ) @@ -63,7 +63,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 0) ) @@ -80,7 +80,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -94,7 +94,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 6) (i32.const 0) ) @@ -111,7 +111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -127,8 +127,8 @@ (get_local $0) (block (call $abort - (i32.const 28) - (i32.const 4) + (i32.const 32) + (i32.const 8) (i32.const 10) (i32.const 5) ) diff --git a/tests/compiler/binary.untouched.wat b/tests/compiler/binary.untouched.wat index a30b3e0b..294f83d3 100644 --- a/tests/compiler/binary.untouched.wat +++ b/tests/compiler/binary.untouched.wat @@ -12,7 +12,7 @@ (global $binary/I (mut i64) (i64.const 0)) (global $binary/f (mut f32) (f32.const 0)) (global $binary/F (mut f64) (f64.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/builtins.optimized.wat b/tests/compiler/builtins.optimized.wat index 89bc93cf..8463dffd 100644 --- a/tests/compiler/builtins.optimized.wat +++ b/tests/compiler/builtins.optimized.wat @@ -13,8 +13,8 @@ (global $builtins/U (mut i64) (i64.const 0)) (global $builtins/s (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s") - (data (i32.const 32) "\01\00\00\001") + (data (i32.const 8) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s") + (data (i32.const 36) "\01\00\00\001") (export "test" (func $builtins/test)) (export "memory" (memory $0)) (start $start) @@ -108,7 +108,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 43) (i32.const 19) ) @@ -135,7 +135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 44) (i32.const 20) ) @@ -160,7 +160,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 20) ) @@ -205,7 +205,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 61) (i32.const 19) ) @@ -234,7 +234,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 62) (i32.const 20) ) @@ -259,7 +259,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 20) ) @@ -273,7 +273,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 0) ) @@ -290,7 +290,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 81) (i32.const 0) ) @@ -307,7 +307,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 82) (i32.const 0) ) @@ -321,7 +321,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 83) (i32.const 0) ) @@ -335,7 +335,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 84) (i32.const 0) ) @@ -349,7 +349,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 85) (i32.const 0) ) @@ -406,7 +406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 116) (i32.const 0) ) @@ -423,7 +423,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 117) (i32.const 0) ) @@ -440,7 +440,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 118) (i32.const 0) ) @@ -454,7 +454,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 119) (i32.const 0) ) @@ -468,7 +468,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 120) (i32.const 0) ) @@ -482,7 +482,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 121) (i32.const 0) ) @@ -839,7 +839,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 261) (i32.const 0) ) @@ -855,7 +855,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 262) (i32.const 0) ) @@ -869,7 +869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 263) (i32.const 0) ) @@ -883,7 +883,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 264) (i32.const 0) ) @@ -897,7 +897,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 265) (i32.const 0) ) @@ -911,7 +911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 266) (i32.const 0) ) @@ -927,7 +927,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 267) (i32.const 0) ) @@ -943,7 +943,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 268) (i32.const 0) ) diff --git a/tests/compiler/builtins.untouched.wat b/tests/compiler/builtins.untouched.wat index c53164d5..85580ac1 100644 --- a/tests/compiler/builtins.untouched.wat +++ b/tests/compiler/builtins.untouched.wat @@ -15,10 +15,10 @@ (global $builtins/u (mut i32) (i32.const 0)) (global $builtins/U (mut i64) (i64.const 0)) (global $builtins/s (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 40)) + (global $HEAP_BASE i32 (i32.const 44)) (memory $0 1) - (data (i32.const 4) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s\00") - (data (i32.const 32) "\01\00\00\001\00") + (data (i32.const 8) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s\00") + (data (i32.const 36) "\01\00\00\001\00") (export "test" (func $builtins/test)) (export "memory" (memory $0)) (start $start) @@ -75,7 +75,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -91,7 +91,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 6) (i32.const 0) ) @@ -105,7 +105,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -121,7 +121,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -135,7 +135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -151,7 +151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 0) ) @@ -165,7 +165,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 11) (i32.const 0) ) @@ -181,7 +181,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) @@ -195,7 +195,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 14) (i32.const 0) ) @@ -211,7 +211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -225,7 +225,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 0) ) @@ -241,7 +241,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 17) (i32.const 0) ) @@ -255,7 +255,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 0) ) @@ -271,7 +271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 19) (i32.const 0) ) @@ -285,7 +285,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 0) ) @@ -301,7 +301,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 21) (i32.const 0) ) @@ -315,7 +315,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 0) ) @@ -331,7 +331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -460,7 +460,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 43) (i32.const 19) ) @@ -491,7 +491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 44) (i32.const 20) ) @@ -522,7 +522,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 20) ) @@ -623,7 +623,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 61) (i32.const 19) ) @@ -654,7 +654,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 62) (i32.const 20) ) @@ -685,7 +685,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 20) ) @@ -758,7 +758,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 0) ) @@ -777,7 +777,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 81) (i32.const 0) ) @@ -796,7 +796,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 82) (i32.const 0) ) @@ -815,7 +815,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 83) (i32.const 0) ) @@ -836,7 +836,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 84) (i32.const 0) ) @@ -855,7 +855,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 85) (i32.const 0) ) @@ -998,7 +998,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 116) (i32.const 0) ) @@ -1017,7 +1017,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 117) (i32.const 0) ) @@ -1036,7 +1036,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 118) (i32.const 0) ) @@ -1055,7 +1055,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 119) (i32.const 0) ) @@ -1076,7 +1076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 120) (i32.const 0) ) @@ -1095,7 +1095,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 121) (i32.const 0) ) @@ -1548,7 +1548,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 237) (i32.const 0) ) @@ -1565,7 +1565,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 238) (i32.const 0) ) @@ -1582,7 +1582,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 239) (i32.const 0) ) @@ -1599,7 +1599,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 240) (i32.const 0) ) @@ -1619,7 +1619,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 242) (i32.const 0) ) @@ -1636,7 +1636,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 243) (i32.const 0) ) @@ -1653,7 +1653,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 244) (i32.const 0) ) @@ -1670,7 +1670,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 245) (i32.const 0) ) @@ -1687,7 +1687,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 246) (i32.const 0) ) @@ -1707,7 +1707,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 248) (i32.const 0) ) @@ -1724,7 +1724,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 249) (i32.const 0) ) @@ -1741,7 +1741,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 252) (i32.const 0) ) @@ -1758,7 +1758,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 253) (i32.const 0) ) @@ -1775,7 +1775,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 254) (i32.const 0) ) @@ -1792,7 +1792,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 255) (i32.const 0) ) @@ -1809,7 +1809,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 257) (i32.const 0) ) @@ -1826,7 +1826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 258) (i32.const 0) ) @@ -1843,7 +1843,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 260) (i32.const 0) ) @@ -1859,7 +1859,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 261) (i32.const 0) ) @@ -1875,7 +1875,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 262) (i32.const 0) ) @@ -1893,7 +1893,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 263) (i32.const 0) ) @@ -1911,7 +1911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 264) (i32.const 0) ) @@ -1929,7 +1929,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 265) (i32.const 0) ) @@ -1947,7 +1947,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 266) (i32.const 0) ) @@ -1963,7 +1963,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 267) (i32.const 0) ) @@ -1979,7 +1979,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 268) (i32.const 0) ) @@ -2002,7 +2002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 281) (i32.const 0) ) @@ -2019,7 +2019,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 282) (i32.const 0) ) @@ -2042,7 +2042,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 283) (i32.const 0) ) @@ -2059,7 +2059,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 284) (i32.const 0) ) @@ -2076,7 +2076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 285) (i32.const 0) ) @@ -2093,7 +2093,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 286) (i32.const 0) ) @@ -2110,7 +2110,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 287) (i32.const 0) ) @@ -2127,7 +2127,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 288) (i32.const 0) ) @@ -2144,7 +2144,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 290) (i32.const 0) ) @@ -2161,7 +2161,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 291) (i32.const 0) ) @@ -2178,7 +2178,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 292) (i32.const 0) ) @@ -2195,7 +2195,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 293) (i32.const 0) ) @@ -2212,7 +2212,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 294) (i32.const 0) ) @@ -2229,7 +2229,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 295) (i32.const 0) ) @@ -2246,7 +2246,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 296) (i32.const 0) ) @@ -2263,7 +2263,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 297) (i32.const 0) ) @@ -2280,7 +2280,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 298) (i32.const 0) ) @@ -2297,7 +2297,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 298) (i32.const 29) ) @@ -2314,7 +2314,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 299) (i32.const 0) ) @@ -2331,7 +2331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 299) (i32.const 29) ) @@ -2348,7 +2348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 301) (i32.const 0) ) @@ -2365,7 +2365,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 302) (i32.const 0) ) @@ -2382,7 +2382,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 303) (i32.const 0) ) @@ -2399,7 +2399,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 304) (i32.const 0) ) @@ -2416,7 +2416,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 305) (i32.const 0) ) @@ -2433,7 +2433,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 306) (i32.const 0) ) @@ -2450,7 +2450,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 307) (i32.const 0) ) @@ -2467,7 +2467,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 308) (i32.const 0) ) @@ -2484,7 +2484,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 309) (i32.const 0) ) @@ -2501,7 +2501,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 310) (i32.const 0) ) diff --git a/tests/compiler/call-inferred.optimized.wat b/tests/compiler/call-inferred.optimized.wat index b72566b7..5580157d 100644 --- a/tests/compiler/call-inferred.optimized.wat +++ b/tests/compiler/call-inferred.optimized.wat @@ -6,7 +6,7 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 4) "\10\00\00\00c\00a\00l\00l\00-\00i\00n\00f\00e\00r\00r\00e\00d\00.\00t\00s") + (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)) (start $start) (func $call-inferred/foo (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -29,7 +29,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -46,7 +46,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 6) (i32.const 0) ) @@ -63,7 +63,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -80,7 +80,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) diff --git a/tests/compiler/call-inferred.untouched.wat b/tests/compiler/call-inferred.untouched.wat index 6ac8eb96..8a27bbe8 100644 --- a/tests/compiler/call-inferred.untouched.wat +++ b/tests/compiler/call-inferred.untouched.wat @@ -5,9 +5,9 @@ (type $ff (func (param f32) (result f32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) - (global $HEAP_BASE i32 (i32.const 40)) + (global $HEAP_BASE i32 (i32.const 44)) (memory $0 1) - (data (i32.const 4) "\10\00\00\00c\00a\00l\00l\00-\00i\00n\00f\00e\00r\00r\00e\00d\00.\00t\00s\00") + (data (i32.const 8) "\10\00\00\00c\00a\00l\00l\00-\00i\00n\00f\00e\00r\00r\00e\00d\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $call-inferred/foo (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -43,7 +43,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -62,7 +62,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 6) (i32.const 0) ) @@ -81,7 +81,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -100,7 +100,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) diff --git a/tests/compiler/call-optional.optimized.wat b/tests/compiler/call-optional.optimized.wat index 8ef4da6b..7bb64c2b 100644 --- a/tests/compiler/call-optional.optimized.wat +++ b/tests/compiler/call-optional.optimized.wat @@ -8,7 +8,7 @@ (table 1 1 anyfunc) (elem (i32.const 0) $call-optional/opt|trampoline) (memory $0 1) - (data (i32.const 4) "\10\00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s") + (data (i32.const 8) "\10\00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) @@ -64,7 +64,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 0) ) @@ -88,7 +88,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -107,7 +107,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 6) (i32.const 0) ) @@ -129,7 +129,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -154,7 +154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 0) ) @@ -179,7 +179,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 11) (i32.const 0) ) diff --git a/tests/compiler/call-optional.untouched.wat b/tests/compiler/call-optional.untouched.wat index d28b0547..d596a204 100644 --- a/tests/compiler/call-optional.untouched.wat +++ b/tests/compiler/call-optional.untouched.wat @@ -5,11 +5,11 @@ (import "env" "abort" (func $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 40)) + (global $HEAP_BASE i32 (i32.const 44)) (table 1 1 anyfunc) (elem (i32.const 0) $call-optional/opt|trampoline) (memory $0 1) - (data (i32.const 4) "\10\00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s\00") + (data (i32.const 8) "\10\00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s\00") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) @@ -72,7 +72,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 0) ) @@ -98,7 +98,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -119,7 +119,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 6) (i32.const 0) ) @@ -146,7 +146,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -173,7 +173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 0) ) @@ -200,7 +200,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 11) (i32.const 0) ) diff --git a/tests/compiler/class-extends.untouched.wat b/tests/compiler/class-extends.untouched.wat index c9d8faec..7de46775 100644 --- a/tests/compiler/class-extends.untouched.wat +++ b/tests/compiler/class-extends.untouched.wat @@ -1,6 +1,6 @@ (module (type $iv (func (param i32))) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "test" (func $class-extends/test)) (export "memory" (memory $0)) diff --git a/tests/compiler/class-with-boolean-field.untouched.wat b/tests/compiler/class-with-boolean-field.untouched.wat index d4b87fe8..0d211994 100644 --- a/tests/compiler/class-with-boolean-field.untouched.wat +++ b/tests/compiler/class-with-boolean-field.untouched.wat @@ -1,6 +1,6 @@ (module (type $i (func (result i32))) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "test" (func $class-with-boolean-field/test)) (export "memory" (memory $0)) diff --git a/tests/compiler/class.optimized.wat b/tests/compiler/class.optimized.wat index 16484bf0..b096559c 100644 --- a/tests/compiler/class.optimized.wat +++ b/tests/compiler/class.optimized.wat @@ -7,7 +7,7 @@ (type $v (func)) (global $class/Animal.ONE (mut i32) (i32.const 1)) (memory $0 1) - (data (i32.const 4) "\08\00\00\00c\00l\00a\00s\00s\00.\00t\00s") + (data (i32.const 8) "\08\00\00\00c\00l\00a\00s\00s\00.\00t\00s") (export "test" (func $class/test)) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/class.untouched.wat b/tests/compiler/class.untouched.wat index b1671e6e..a7fbce83 100644 --- a/tests/compiler/class.untouched.wat +++ b/tests/compiler/class.untouched.wat @@ -8,9 +8,9 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $class/Animal.ONE (mut i32) (i32.const 1)) - (global $HEAP_BASE i32 (i32.const 24)) + (global $HEAP_BASE i32 (i32.const 28)) (memory $0 1) - (data (i32.const 4) "\08\00\00\00c\00l\00a\00s\00s\00.\00t\00s\00") + (data (i32.const 8) "\08\00\00\00c\00l\00a\00s\00s\00.\00t\00s\00") (export "test" (func $class/test)) (export "memory" (memory $0)) (start $start) @@ -139,7 +139,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) diff --git a/tests/compiler/closure.untouched.wat b/tests/compiler/closure.untouched.wat index eee09c0f..6fff041d 100644 --- a/tests/compiler/closure.untouched.wat +++ b/tests/compiler/closure.untouched.wat @@ -1,5 +1,5 @@ (module - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) ) diff --git a/tests/compiler/comma.optimized.wat b/tests/compiler/comma.optimized.wat index a92507f2..8fee05d5 100644 --- a/tests/compiler/comma.optimized.wat +++ b/tests/compiler/comma.optimized.wat @@ -5,7 +5,7 @@ (global $comma/a (mut i32) (i32.const 0)) (global $comma/b (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\08\00\00\00c\00o\00m\00m\00a\00.\00t\00s") + (data (i32.const 8) "\08\00\00\00c\00o\00m\00m\00a\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -31,7 +31,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 0) ) @@ -43,7 +43,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -67,7 +67,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -82,7 +82,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -116,7 +116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 14) (i32.const 0) ) @@ -131,7 +131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -160,7 +160,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 0) ) @@ -175,7 +175,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 19) (i32.const 0) ) @@ -216,7 +216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 0) ) diff --git a/tests/compiler/comma.untouched.wat b/tests/compiler/comma.untouched.wat index af276b9d..829b43e3 100644 --- a/tests/compiler/comma.untouched.wat +++ b/tests/compiler/comma.untouched.wat @@ -4,9 +4,9 @@ (import "env" "abort" (func $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 24)) + (global $HEAP_BASE i32 (i32.const 28)) (memory $0 1) - (data (i32.const 4) "\08\00\00\00c\00o\00m\00m\00a\00.\00t\00s\00") + (data (i32.const 8) "\08\00\00\00c\00o\00m\00m\00a\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -41,7 +41,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 0) ) @@ -58,7 +58,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -86,7 +86,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -103,7 +103,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -139,7 +139,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 14) (i32.const 0) ) @@ -156,7 +156,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -189,7 +189,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 0) ) @@ -206,7 +206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 19) (i32.const 0) ) @@ -254,7 +254,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 0) ) diff --git a/tests/compiler/declare.optimized.wat b/tests/compiler/declare.optimized.wat index a38b5a1b..b1d9ae6d 100644 --- a/tests/compiler/declare.optimized.wat +++ b/tests/compiler/declare.optimized.wat @@ -7,7 +7,7 @@ (import "my" "externalFunction" (func $declare/my.externalFunction)) (import "my" "externalConstant" (global $declare/my.externalConstant i32)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00d\00e\00c\00l\00a\00r\00e\00.\00t\00s") + (data (i32.const 8) "\n\00\00\00d\00e\00c\00l\00a\00r\00e\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $start (; 3 ;) (type $v) @@ -20,7 +20,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -36,7 +36,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) diff --git a/tests/compiler/declare.untouched.wat b/tests/compiler/declare.untouched.wat index f59ad313..7c152461 100644 --- a/tests/compiler/declare.untouched.wat +++ b/tests/compiler/declare.untouched.wat @@ -6,9 +6,9 @@ (import "env" "abort" (func $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 28)) + (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00d\00e\00c\00l\00a\00r\00e\00.\00t\00s\00") + (data (i32.const 8) "\n\00\00\00d\00e\00c\00l\00a\00r\00e\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $start (; 3 ;) (type $v) @@ -23,7 +23,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -41,7 +41,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 26cae21b..17bf46be 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -6,7 +6,7 @@ (global $do/m (mut i32) (i32.const 0)) (global $do/o (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\05\00\00\00d\00o\00.\00t\00s") + (data (i32.const 8) "\05\00\00\00d\00o\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -33,7 +33,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -48,7 +48,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -79,7 +79,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) @@ -127,7 +127,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 2) ) @@ -142,7 +142,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 2) ) @@ -158,7 +158,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 0) ) @@ -173,7 +173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 0) ) @@ -188,7 +188,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 0) ) diff --git a/tests/compiler/do.untouched.wat b/tests/compiler/do.untouched.wat index 2358b4fd..2b8eb870 100644 --- a/tests/compiler/do.untouched.wat +++ b/tests/compiler/do.untouched.wat @@ -5,9 +5,9 @@ (global $do/n (mut i32) (i32.const 10)) (global $do/m (mut i32) (i32.const 0)) (global $do/o (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 20)) + (global $HEAP_BASE i32 (i32.const 24)) (memory $0 1) - (data (i32.const 4) "\05\00\00\00d\00o\00.\00t\00s\00") + (data (i32.const 8) "\05\00\00\00d\00o\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -43,7 +43,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -60,7 +60,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -99,7 +99,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) @@ -158,7 +158,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 2) ) @@ -175,7 +175,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 2) ) @@ -198,7 +198,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 0) ) @@ -215,7 +215,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 0) ) @@ -232,7 +232,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 0) ) diff --git a/tests/compiler/empty.untouched.wat b/tests/compiler/empty.untouched.wat index eee09c0f..6fff041d 100644 --- a/tests/compiler/empty.untouched.wat +++ b/tests/compiler/empty.untouched.wat @@ -1,5 +1,5 @@ (module - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) ) diff --git a/tests/compiler/enum.untouched.wat b/tests/compiler/enum.untouched.wat index e4a362b9..d650fa43 100644 --- a/tests/compiler/enum.untouched.wat +++ b/tests/compiler/enum.untouched.wat @@ -17,7 +17,7 @@ (global $enum/NonConstant.ONE (mut i32) (i32.const 0)) (global $enum/SelfReference.ZERO i32 (i32.const 0)) (global $enum/SelfReference.ONE i32 (i32.const 1)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "Implicit.ZERO" (global $enum/Implicit.ZERO)) (export "Implicit.ONE" (global $enum/Implicit.ONE)) diff --git a/tests/compiler/export.untouched.wat b/tests/compiler/export.untouched.wat index e4a1945f..2e6b337a 100644 --- a/tests/compiler/export.untouched.wat +++ b/tests/compiler/export.untouched.wat @@ -4,7 +4,7 @@ (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $export/c i32 (i32.const 3)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "add" (func $export/add)) (export "sub" (func $export/sub)) diff --git a/tests/compiler/exports.optimized.wat b/tests/compiler/exports.optimized.wat index 00d53977..f6539f20 100644 --- a/tests/compiler/exports.optimized.wat +++ b/tests/compiler/exports.optimized.wat @@ -15,7 +15,7 @@ (global $exports/Car.TIRES i32 (i32.const 4)) (global $exports/vehicles.Car.TIRES i32 (i32.const 4)) (global $exports/outer.inner.a i32 (i32.const 42)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "add" (func $exports/add)) (export "_setargc" (func $~setargc)) @@ -103,7 +103,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -118,7 +118,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -128,14 +128,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -147,7 +147,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -166,7 +166,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) diff --git a/tests/compiler/exports.untouched.wat b/tests/compiler/exports.untouched.wat index cbfdcfb8..dc315f3e 100644 --- a/tests/compiler/exports.untouched.wat +++ b/tests/compiler/exports.untouched.wat @@ -19,7 +19,7 @@ (global $exports/Car.TIRES i32 (i32.const 4)) (global $exports/vehicles.Car.TIRES i32 (i32.const 4)) (global $exports/outer.inner.a i32 (i32.const 42)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "add" (func $exports/add)) (export "_setargc" (func $~setargc)) diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index ca0cd06a..86383f6c 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -4,7 +4,7 @@ (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $for/i (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\06\00\00\00f\00o\00r\00.\00t\00s") + (data (i32.const 8) "\06\00\00\00f\00o\00r\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -37,7 +37,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -83,7 +83,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) diff --git a/tests/compiler/for.untouched.wat b/tests/compiler/for.untouched.wat index 12b66e60..fc5d9cfd 100644 --- a/tests/compiler/for.untouched.wat +++ b/tests/compiler/for.untouched.wat @@ -3,9 +3,9 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $for/i (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 20)) + (global $HEAP_BASE i32 (i32.const 24)) (memory $0 1) - (data (i32.const 4) "\06\00\00\00f\00o\00r\00.\00t\00s\00") + (data (i32.const 8) "\06\00\00\00f\00o\00r\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -43,7 +43,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -104,7 +104,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) diff --git a/tests/compiler/function-expression.optimized.wat b/tests/compiler/function-expression.optimized.wat index 6a85669f..209b1aa5 100644 --- a/tests/compiler/function-expression.optimized.wat +++ b/tests/compiler/function-expression.optimized.wat @@ -12,7 +12,7 @@ (table 4 4 anyfunc) (elem (i32.const 0) $start~anonymous|0 $start~anonymous|0 $start~someName|2 $start~anonymous|3) (memory $0 1) - (data (i32.const 4) "\16\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s") + (data (i32.const 8) "\16\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) @@ -42,7 +42,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 0) ) @@ -65,7 +65,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -93,7 +93,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 0) ) diff --git a/tests/compiler/function-expression.untouched.wat b/tests/compiler/function-expression.untouched.wat index 623bebc1..c2e74722 100644 --- a/tests/compiler/function-expression.untouched.wat +++ b/tests/compiler/function-expression.untouched.wat @@ -9,11 +9,11 @@ (global $function-expression/f2 (mut i32) (i32.const 1)) (global $function-expression/f3 (mut i32) (i32.const 2)) (global $function-expression/f4 (mut i32) (i32.const 3)) - (global $HEAP_BASE i32 (i32.const 52)) + (global $HEAP_BASE i32 (i32.const 56)) (table 4 4 anyfunc) (elem (i32.const 0) $start~anonymous|0 $start~anonymous|1 $start~someName|2 $start~anonymous|3) (memory $0 1) - (data (i32.const 4) "\16\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00") + (data (i32.const 8) "\16\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) @@ -52,7 +52,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 0) ) @@ -77,7 +77,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -109,7 +109,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 0) ) diff --git a/tests/compiler/function-types.optimized.wat b/tests/compiler/function-types.optimized.wat index 065e36f3..a9c32fe7 100644 --- a/tests/compiler/function-types.optimized.wat +++ b/tests/compiler/function-types.optimized.wat @@ -13,7 +13,7 @@ (table 4 4 anyfunc) (elem (i32.const 0) $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|1 $function-types/makeAdder~anonymous|2 $function-types/makeAdder~anonymous|0) (memory $0 1) - (data (i32.const 4) "\11\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s") + (data (i32.const 8) "\11\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) @@ -108,7 +108,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 11) (i32.const 0) ) @@ -135,7 +135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -159,7 +159,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 17) (i32.const 0) ) @@ -178,7 +178,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -196,7 +196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 0) ) @@ -215,7 +215,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 35) (i32.const 0) ) @@ -239,7 +239,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 41) (i32.const 0) ) @@ -258,7 +258,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 42) (i32.const 0) ) diff --git a/tests/compiler/function-types.untouched.wat b/tests/compiler/function-types.untouched.wat index 1402ab65..3520c68c 100644 --- a/tests/compiler/function-types.untouched.wat +++ b/tests/compiler/function-types.untouched.wat @@ -10,11 +10,11 @@ (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)) - (global $HEAP_BASE i32 (i32.const 44)) + (global $HEAP_BASE i32 (i32.const 48)) (table 4 4 anyfunc) (elem (i32.const 0) $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|1 $function-types/makeAdder~anonymous|2 $function-types/addI32) (memory $0 1) - (data (i32.const 4) "\11\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s\00") + (data (i32.const 8) "\11\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s\00") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) @@ -154,7 +154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 11) (i32.const 0) ) @@ -183,7 +183,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -209,7 +209,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 17) (i32.const 0) ) @@ -230,7 +230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -250,7 +250,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 0) ) @@ -271,7 +271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 35) (i32.const 0) ) @@ -297,7 +297,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 41) (i32.const 0) ) @@ -318,7 +318,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 42) (i32.const 0) ) diff --git a/tests/compiler/function.untouched.wat b/tests/compiler/function.untouched.wat index 91fd442c..4b20ef9a 100644 --- a/tests/compiler/function.untouched.wat +++ b/tests/compiler/function.untouched.wat @@ -14,7 +14,7 @@ (type $IiI (func (param i64 i32) (result i64))) (type $fff (func (param f32 f32) (result f32))) (type $FFF (func (param f64 f64) (result f64))) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/getter-setter.optimized.wat b/tests/compiler/getter-setter.optimized.wat index 8c011e1e..c0a5090b 100644 --- a/tests/compiler/getter-setter.optimized.wat +++ b/tests/compiler/getter-setter.optimized.wat @@ -6,7 +6,7 @@ (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $getter-setter/Foo._bar (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\10\00\00\00g\00e\00t\00t\00e\00r\00-\00s\00e\00t\00t\00e\00r\00.\00t\00s") + (data (i32.const 8) "\10\00\00\00g\00e\00t\00t\00e\00r\00-\00s\00e\00t\00t\00e\00r\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $getter-setter/Foo.get:bar (; 1 ;) (type $i) (result i32) @@ -23,7 +23,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) @@ -41,7 +41,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -61,7 +61,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 0) ) diff --git a/tests/compiler/getter-setter.untouched.wat b/tests/compiler/getter-setter.untouched.wat index 4778a397..13175512 100644 --- a/tests/compiler/getter-setter.untouched.wat +++ b/tests/compiler/getter-setter.untouched.wat @@ -5,9 +5,9 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $getter-setter/Foo._bar (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 40)) + (global $HEAP_BASE i32 (i32.const 44)) (memory $0 1) - (data (i32.const 4) "\10\00\00\00g\00e\00t\00t\00e\00r\00-\00s\00e\00t\00t\00e\00r\00.\00t\00s\00") + (data (i32.const 8) "\10\00\00\00g\00e\00t\00t\00e\00r\00-\00s\00e\00t\00t\00e\00r\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $getter-setter/Foo.get:bar (; 1 ;) (type $i) (result i32) @@ -31,7 +31,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) @@ -51,7 +51,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -73,7 +73,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 0) ) diff --git a/tests/compiler/i64-polyfill.untouched.wat b/tests/compiler/i64-polyfill.untouched.wat index a62263a3..1b81661e 100644 --- a/tests/compiler/i64-polyfill.untouched.wat +++ b/tests/compiler/i64-polyfill.untouched.wat @@ -6,7 +6,7 @@ (global $../../examples/i64-polyfill/assembly/i64/hi (mut i32) (i32.const 0)) (global $NaN f64 (f64.const nan:0x8000000000000)) (global $Infinity f64 (f64.const inf)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "getHi" (func $../../examples/i64-polyfill/assembly/i64/getHi)) (export "getLo" (func $../../examples/i64-polyfill/assembly/i64/getLo)) diff --git a/tests/compiler/if.optimized.wat b/tests/compiler/if.optimized.wat index 39652ba7..c08fe217 100644 --- a/tests/compiler/if.optimized.wat +++ b/tests/compiler/if.optimized.wat @@ -4,7 +4,7 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 4) "\05\00\00\00i\00f\00.\00t\00s") + (data (i32.const 8) "\05\00\00\00i\00f\00.\00t\00s") (export "ifThenElse" (func $if/ifThenElse)) (export "ifThen" (func $if/ifThen)) (export "ifThenElseBlock" (func $if/ifThenElse)) @@ -36,7 +36,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 37) (i32.const 4) ) @@ -52,7 +52,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -69,7 +69,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -83,7 +83,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 17) (i32.const 0) ) @@ -100,7 +100,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 0) ) @@ -114,7 +114,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 30) (i32.const 0) ) @@ -131,7 +131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) diff --git a/tests/compiler/if.untouched.wat b/tests/compiler/if.untouched.wat index 32cfca54..5708cfce 100644 --- a/tests/compiler/if.untouched.wat +++ b/tests/compiler/if.untouched.wat @@ -3,9 +3,9 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) - (global $HEAP_BASE i32 (i32.const 20)) + (global $HEAP_BASE i32 (i32.const 24)) (memory $0 1) - (data (i32.const 4) "\05\00\00\00i\00f\00.\00t\00s\00") + (data (i32.const 8) "\05\00\00\00i\00f\00.\00t\00s\00") (export "ifThenElse" (func $if/ifThenElse)) (export "ifThen" (func $if/ifThen)) (export "ifThenElseBlock" (func $if/ifThenElseBlock)) @@ -54,7 +54,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 37) (i32.const 4) ) @@ -75,7 +75,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -94,7 +94,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -113,7 +113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 17) (i32.const 0) ) @@ -132,7 +132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 0) ) @@ -151,7 +151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 30) (i32.const 0) ) @@ -170,7 +170,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) diff --git a/tests/compiler/import.untouched.wat b/tests/compiler/import.untouched.wat index 00cdcc5c..19ef6331 100644 --- a/tests/compiler/import.untouched.wat +++ b/tests/compiler/import.untouched.wat @@ -4,7 +4,7 @@ (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $export/c i32 (i32.const 3)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/infer-type.untouched.wat b/tests/compiler/infer-type.untouched.wat index 4d63a17b..38170f5f 100644 --- a/tests/compiler/infer-type.untouched.wat +++ b/tests/compiler/infer-type.untouched.wat @@ -11,7 +11,7 @@ (global $infer-type/rI (mut i64) (i64.const 0)) (global $infer-type/rf (mut f32) (f32.const 0)) (global $infer-type/rF (mut f64) (f64.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/inlining.optimized.wat b/tests/compiler/inlining.optimized.wat index 4b986503..e313e0dc 100644 --- a/tests/compiler/inlining.optimized.wat +++ b/tests/compiler/inlining.optimized.wat @@ -8,7 +8,7 @@ (table 1 1 anyfunc) (elem (i32.const 0) $inlining/test_funcs~anonymous|0) (memory $0 1) - (data (i32.const 4) "\0b\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s") + (data (i32.const 8) "\0b\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s") (export "test" (func $inlining/test)) (export "memory" (memory $0)) (export "table" (table $0)) @@ -49,7 +49,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 2) ) @@ -84,7 +84,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 61) (i32.const 2) ) @@ -119,7 +119,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 62) (i32.const 2) ) @@ -142,7 +142,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 68) (i32.const 2) ) @@ -159,7 +159,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 0) ) diff --git a/tests/compiler/inlining.untouched.wat b/tests/compiler/inlining.untouched.wat index 9b61ef14..20cb9c21 100644 --- a/tests/compiler/inlining.untouched.wat +++ b/tests/compiler/inlining.untouched.wat @@ -6,11 +6,11 @@ (import "env" "abort" (func $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 32)) + (global $HEAP_BASE i32 (i32.const 36)) (table 1 1 anyfunc) (elem (i32.const 0) $inlining/test_funcs~anonymous|0) (memory $0 1) - (data (i32.const 4) "\0b\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 8) "\0b\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s\00") (export "test" (func $inlining/test)) (export "memory" (memory $0)) (export "table" (table $0)) @@ -76,7 +76,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 2) ) @@ -116,7 +116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 61) (i32.const 2) ) @@ -156,7 +156,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 62) (i32.const 2) ) @@ -180,7 +180,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 2) ) @@ -204,7 +204,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 64) (i32.const 2) ) @@ -245,7 +245,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 2) ) @@ -286,7 +286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 66) (i32.const 2) ) @@ -320,7 +320,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 68) (i32.const 2) ) @@ -350,7 +350,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 69) (i32.const 2) ) @@ -380,7 +380,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 71) (i32.const 2) ) @@ -399,7 +399,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 0) ) diff --git a/tests/compiler/limits.untouched.wat b/tests/compiler/limits.untouched.wat index 933501fc..6e4c9710 100644 --- a/tests/compiler/limits.untouched.wat +++ b/tests/compiler/limits.untouched.wat @@ -1,6 +1,6 @@ (module (type $v (func)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/literals.untouched.wat b/tests/compiler/literals.untouched.wat index 56a535d0..ad6d42dd 100644 --- a/tests/compiler/literals.untouched.wat +++ b/tests/compiler/literals.untouched.wat @@ -1,6 +1,6 @@ (module (type $v (func)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index 121790ee..a65a862f 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -7,7 +7,7 @@ (global $logical/f (mut f32) (f32.const 0)) (global $logical/F (mut f64) (f64.const 0)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00l\00o\00g\00i\00c\00a\00l\00.\00t\00s") + (data (i32.const 8) "\n\00\00\00l\00o\00g\00i\00c\00a\00l\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -41,7 +41,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) @@ -59,7 +59,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -77,7 +77,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 0) ) @@ -95,7 +95,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -113,7 +113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 0) ) @@ -131,7 +131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) @@ -149,7 +149,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 36) (i32.const 0) ) @@ -167,7 +167,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 39) (i32.const 0) ) diff --git a/tests/compiler/logical.untouched.wat b/tests/compiler/logical.untouched.wat index 0c4722a5..1b973126 100644 --- a/tests/compiler/logical.untouched.wat +++ b/tests/compiler/logical.untouched.wat @@ -6,9 +6,9 @@ (global $logical/I (mut i64) (i64.const 0)) (global $logical/f (mut f32) (f32.const 0)) (global $logical/F (mut f64) (f64.const 0)) - (global $HEAP_BASE i32 (i32.const 28)) + (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00l\00o\00g\00i\00c\00a\00l\00.\00t\00s\00") + (data (i32.const 8) "\n\00\00\00l\00o\00g\00i\00c\00a\00l\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -97,7 +97,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) @@ -121,7 +121,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -148,7 +148,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 0) ) @@ -175,7 +175,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -202,7 +202,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 0) ) @@ -229,7 +229,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) @@ -256,7 +256,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 36) (i32.const 0) ) @@ -283,7 +283,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 39) (i32.const 0) ) diff --git a/tests/compiler/mandelbrot.untouched.wat b/tests/compiler/mandelbrot.untouched.wat index 179dfac5..c686ba58 100644 --- a/tests/compiler/mandelbrot.untouched.wat +++ b/tests/compiler/mandelbrot.untouched.wat @@ -4,7 +4,7 @@ (type $Fi (func (param f64) (result i32))) (type $FFFF (func (param f64 f64 f64) (result f64))) (global $../../examples/mandelbrot/assembly/index/NUM_COLORS i32 (i32.const 2048)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "computeLine" (func $../../examples/mandelbrot/assembly/index/computeLine)) (export "memory" (memory $0)) diff --git a/tests/compiler/many-locals.optimized.wat b/tests/compiler/many-locals.optimized.wat index 91117f67..0edc8ac2 100644 --- a/tests/compiler/many-locals.optimized.wat +++ b/tests/compiler/many-locals.optimized.wat @@ -4,7 +4,7 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 4) "\0e\00\00\00m\00a\00n\00y\00-\00l\00o\00c\00a\00l\00s\00.\00t\00s") + (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)) (export "testI8" (func $many-locals/testI8)) (export "memory" (memory $0)) @@ -32,7 +32,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 133) (i32.const 0) ) @@ -49,7 +49,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 267) (i32.const 0) ) diff --git a/tests/compiler/many-locals.untouched.wat b/tests/compiler/many-locals.untouched.wat index 945982df..1aa4e44a 100644 --- a/tests/compiler/many-locals.untouched.wat +++ b/tests/compiler/many-locals.untouched.wat @@ -3,9 +3,9 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) - (global $HEAP_BASE i32 (i32.const 36)) + (global $HEAP_BASE i32 (i32.const 40)) (memory $0 1) - (data (i32.const 4) "\0e\00\00\00m\00a\00n\00y\00-\00l\00o\00c\00a\00l\00s\00.\00t\00s\00") + (data (i32.const 8) "\0e\00\00\00m\00a\00n\00y\00-\00l\00o\00c\00a\00l\00s\00.\00t\00s\00") (export "testI32" (func $many-locals/testI32)) (export "testI8" (func $many-locals/testI8)) (export "memory" (memory $0)) @@ -1063,7 +1063,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 133) (i32.const 0) ) @@ -1082,7 +1082,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 267) (i32.const 0) ) diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index 7f8b52a0..33969e9d 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -5,7 +5,7 @@ (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $memcpy/dest (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s") + (data (i32.const 8) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s") (export "memcpy" (func $memcpy/memcpy)) (export "memory" (memory $0)) (start $start) @@ -1624,7 +1624,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 151) (i32.const 0) ) @@ -1641,7 +1641,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 152) (i32.const 0) ) @@ -1663,7 +1663,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 155) (i32.const 0) ) @@ -1680,7 +1680,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 156) (i32.const 0) ) @@ -1697,7 +1697,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 157) (i32.const 0) ) @@ -1714,7 +1714,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 158) (i32.const 0) ) @@ -1731,7 +1731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 159) (i32.const 0) ) @@ -1755,7 +1755,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 162) (i32.const 0) ) @@ -1779,7 +1779,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 165) (i32.const 0) ) @@ -1796,7 +1796,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 166) (i32.const 0) ) @@ -1813,7 +1813,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 167) (i32.const 0) ) @@ -1830,7 +1830,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 168) (i32.const 0) ) diff --git a/tests/compiler/memcpy.untouched.wat b/tests/compiler/memcpy.untouched.wat index a2138c34..4e316bc5 100644 --- a/tests/compiler/memcpy.untouched.wat +++ b/tests/compiler/memcpy.untouched.wat @@ -5,9 +5,9 @@ (import "env" "abort" (func $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 28)) + (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) - (data (i32.const 4) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s\00") + (data (i32.const 8) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s\00") (export "memcpy" (func $memcpy/memcpy)) (export "memory" (memory $0)) (start $start) @@ -1868,7 +1868,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 151) (i32.const 0) ) @@ -1887,7 +1887,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 152) (i32.const 0) ) @@ -1911,7 +1911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 155) (i32.const 0) ) @@ -1930,7 +1930,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 156) (i32.const 0) ) @@ -1952,7 +1952,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 157) (i32.const 0) ) @@ -1974,7 +1974,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 158) (i32.const 0) ) @@ -1996,7 +1996,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 159) (i32.const 0) ) @@ -2028,7 +2028,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 162) (i32.const 0) ) @@ -2060,7 +2060,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 165) (i32.const 0) ) @@ -2082,7 +2082,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 166) (i32.const 0) ) @@ -2104,7 +2104,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 167) (i32.const 0) ) @@ -2126,7 +2126,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 168) (i32.const 0) ) diff --git a/tests/compiler/memmove.optimized.wat b/tests/compiler/memmove.optimized.wat index 0121ba67..8354b8f9 100644 --- a/tests/compiler/memmove.optimized.wat +++ b/tests/compiler/memmove.optimized.wat @@ -5,7 +5,7 @@ (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $memmove/dest (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00m\00e\00m\00m\00o\00v\00e\00.\00t\00s") + (data (i32.const 8) "\n\00\00\00m\00e\00m\00m\00o\00v\00e\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $memmove/memmove (; 1 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -309,7 +309,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 55) (i32.const 0) ) @@ -326,7 +326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 56) (i32.const 0) ) @@ -348,7 +348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 59) (i32.const 0) ) @@ -365,7 +365,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 0) ) @@ -382,7 +382,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 61) (i32.const 0) ) @@ -399,7 +399,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 62) (i32.const 0) ) @@ -416,7 +416,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 0) ) @@ -440,7 +440,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 66) (i32.const 0) ) @@ -464,7 +464,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 69) (i32.const 0) ) @@ -481,7 +481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 70) (i32.const 0) ) @@ -498,7 +498,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 71) (i32.const 0) ) @@ -515,7 +515,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 72) (i32.const 0) ) diff --git a/tests/compiler/memmove.untouched.wat b/tests/compiler/memmove.untouched.wat index 7748e584..83af3179 100644 --- a/tests/compiler/memmove.untouched.wat +++ b/tests/compiler/memmove.untouched.wat @@ -5,9 +5,9 @@ (import "env" "abort" (func $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 28)) + (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00m\00e\00m\00m\00o\00v\00e\00.\00t\00s\00") + (data (i32.const 8) "\n\00\00\00m\00e\00m\00m\00o\00v\00e\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $memmove/memmove (; 1 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -364,7 +364,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 55) (i32.const 0) ) @@ -383,7 +383,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 56) (i32.const 0) ) @@ -407,7 +407,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 59) (i32.const 0) ) @@ -426,7 +426,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 0) ) @@ -448,7 +448,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 61) (i32.const 0) ) @@ -470,7 +470,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 62) (i32.const 0) ) @@ -492,7 +492,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 0) ) @@ -524,7 +524,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 66) (i32.const 0) ) @@ -556,7 +556,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 69) (i32.const 0) ) @@ -578,7 +578,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 70) (i32.const 0) ) @@ -600,7 +600,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 71) (i32.const 0) ) @@ -622,7 +622,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 72) (i32.const 0) ) diff --git a/tests/compiler/memset.optimized.wat b/tests/compiler/memset.optimized.wat index ae530fed..26dc1cc9 100644 --- a/tests/compiler/memset.optimized.wat +++ b/tests/compiler/memset.optimized.wat @@ -4,9 +4,9 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $memset/dest (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 28)) + (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) - (data (i32.const 4) "\t\00\00\00m\00e\00m\00s\00e\00t\00.\00t\00s") + (data (i32.const 8) "\t\00\00\00m\00e\00m\00s\00e\00t\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $memset/memset (; 1 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -370,7 +370,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 72) (i32.const 0) ) @@ -390,7 +390,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 73) (i32.const 0) ) @@ -417,7 +417,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 77) (i32.const 0) ) @@ -437,7 +437,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 78) (i32.const 0) ) @@ -457,7 +457,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 79) (i32.const 0) ) @@ -477,7 +477,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 0) ) diff --git a/tests/compiler/memset.untouched.wat b/tests/compiler/memset.untouched.wat index 7a537c70..32a75010 100644 --- a/tests/compiler/memset.untouched.wat +++ b/tests/compiler/memset.untouched.wat @@ -4,9 +4,9 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $memset/dest (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 28)) + (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) - (data (i32.const 4) "\t\00\00\00m\00e\00m\00s\00e\00t\00.\00t\00s\00") + (data (i32.const 8) "\t\00\00\00m\00e\00m\00s\00e\00t\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $memset/memset (; 1 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -403,7 +403,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 72) (i32.const 0) ) @@ -425,7 +425,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 73) (i32.const 0) ) @@ -454,7 +454,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 77) (i32.const 0) ) @@ -476,7 +476,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 78) (i32.const 0) ) @@ -498,7 +498,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 79) (i32.const 0) ) @@ -520,7 +520,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 0) ) diff --git a/tests/compiler/named-export-default.untouched.wat b/tests/compiler/named-export-default.untouched.wat index b10880c5..e46a4d03 100644 --- a/tests/compiler/named-export-default.untouched.wat +++ b/tests/compiler/named-export-default.untouched.wat @@ -1,6 +1,6 @@ (module (type $i (func (result i32))) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "default" (func $named-export-default/get3)) (export "memory" (memory $0)) diff --git a/tests/compiler/named-import-default.untouched.wat b/tests/compiler/named-import-default.untouched.wat index e112ba2a..2aeb655f 100644 --- a/tests/compiler/named-import-default.untouched.wat +++ b/tests/compiler/named-import-default.untouched.wat @@ -1,6 +1,6 @@ (module (type $i (func (result i32))) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "getValue" (func $named-import-default/getValue)) (export "memory" (memory $0)) diff --git a/tests/compiler/namespace.untouched.wat b/tests/compiler/namespace.untouched.wat index c9aaf860..86e195da 100644 --- a/tests/compiler/namespace.untouched.wat +++ b/tests/compiler/namespace.untouched.wat @@ -5,7 +5,7 @@ (global $namespace/Outer.Inner.anEnum.ONE i32 (i32.const 1)) (global $namespace/Outer.Inner.anEnum.TWO i32 (i32.const 2)) (global $namespace/Joined.THREE i32 (i32.const 3)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/overflow.optimized.wat b/tests/compiler/overflow.optimized.wat index 33403c54..43b5b383 100644 --- a/tests/compiler/overflow.optimized.wat +++ b/tests/compiler/overflow.optimized.wat @@ -3,7 +3,7 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 4) "\0b\00\00\00o\00v\00e\00r\00f\00l\00o\00w\00.\00t\00s") + (data (i32.const 8) "\0b\00\00\00o\00v\00e\00r\00f\00l\00o\00w\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -19,7 +19,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 2) ) @@ -42,7 +42,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 2) ) @@ -68,7 +68,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 2) ) @@ -94,7 +94,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 19) (i32.const 2) ) @@ -117,7 +117,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 2) ) @@ -140,7 +140,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 2) ) @@ -163,7 +163,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 2) ) @@ -186,7 +186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 2) ) @@ -207,7 +207,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 33) (i32.const 2) ) @@ -224,7 +224,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 42) (i32.const 2) ) @@ -247,7 +247,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 2) ) @@ -273,7 +273,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 48) (i32.const 2) ) @@ -299,7 +299,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 51) (i32.const 2) ) @@ -322,7 +322,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 54) (i32.const 2) ) @@ -345,7 +345,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 57) (i32.const 2) ) @@ -368,7 +368,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 2) ) @@ -391,7 +391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 2) ) @@ -412,7 +412,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 2) ) @@ -432,7 +432,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 74) (i32.const 2) ) @@ -452,7 +452,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 77) (i32.const 2) ) @@ -478,7 +478,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 2) ) @@ -501,7 +501,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 83) (i32.const 2) ) @@ -524,7 +524,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 2) ) @@ -544,7 +544,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 89) (i32.const 2) ) @@ -567,7 +567,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 92) (i32.const 2) ) @@ -587,7 +587,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 95) (i32.const 2) ) @@ -608,7 +608,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 97) (i32.const 2) ) @@ -628,7 +628,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 106) (i32.const 2) ) @@ -648,7 +648,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 109) (i32.const 2) ) @@ -674,7 +674,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 112) (i32.const 2) ) @@ -697,7 +697,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 115) (i32.const 2) ) @@ -720,7 +720,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 118) (i32.const 2) ) @@ -740,7 +740,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 121) (i32.const 2) ) @@ -763,7 +763,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 124) (i32.const 2) ) @@ -783,7 +783,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 127) (i32.const 2) ) @@ -804,7 +804,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 129) (i32.const 2) ) diff --git a/tests/compiler/overflow.untouched.wat b/tests/compiler/overflow.untouched.wat index 0b4f97eb..4f7a4c88 100644 --- a/tests/compiler/overflow.untouched.wat +++ b/tests/compiler/overflow.untouched.wat @@ -2,9 +2,9 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) - (global $HEAP_BASE i32 (i32.const 32)) + (global $HEAP_BASE i32 (i32.const 36)) (memory $0 1) - (data (i32.const 4) "\0b\00\00\00o\00v\00e\00r\00f\00l\00o\00w\00.\00t\00s\00") + (data (i32.const 8) "\0b\00\00\00o\00v\00e\00r\00f\00l\00o\00w\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -37,7 +37,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 2) ) @@ -66,7 +66,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 2) ) @@ -103,7 +103,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 2) ) @@ -140,7 +140,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 19) (i32.const 2) ) @@ -169,7 +169,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 2) ) @@ -198,7 +198,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 2) ) @@ -229,7 +229,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 2) ) @@ -260,7 +260,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 2) ) @@ -286,7 +286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 33) (i32.const 2) ) @@ -320,7 +320,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 42) (i32.const 2) ) @@ -349,7 +349,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 2) ) @@ -386,7 +386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 48) (i32.const 2) ) @@ -423,7 +423,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 51) (i32.const 2) ) @@ -452,7 +452,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 54) (i32.const 2) ) @@ -481,7 +481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 57) (i32.const 2) ) @@ -512,7 +512,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 2) ) @@ -543,7 +543,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 2) ) @@ -569,7 +569,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 2) ) @@ -600,7 +600,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 74) (i32.const 2) ) @@ -626,7 +626,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 77) (i32.const 2) ) @@ -660,7 +660,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 2) ) @@ -694,7 +694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 83) (i32.const 2) ) @@ -720,7 +720,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 2) ) @@ -746,7 +746,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 89) (i32.const 2) ) @@ -774,7 +774,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 92) (i32.const 2) ) @@ -802,7 +802,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 95) (i32.const 2) ) @@ -825,7 +825,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 97) (i32.const 2) ) @@ -856,7 +856,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 106) (i32.const 2) ) @@ -882,7 +882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 109) (i32.const 2) ) @@ -916,7 +916,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 112) (i32.const 2) ) @@ -950,7 +950,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 115) (i32.const 2) ) @@ -976,7 +976,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 118) (i32.const 2) ) @@ -1002,7 +1002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 121) (i32.const 2) ) @@ -1030,7 +1030,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 124) (i32.const 2) ) @@ -1058,7 +1058,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 127) (i32.const 2) ) @@ -1081,7 +1081,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 129) (i32.const 2) ) diff --git a/tests/compiler/portable-conversions.untouched.wat b/tests/compiler/portable-conversions.untouched.wat index 2a12cabc..e6ce2ecc 100644 --- a/tests/compiler/portable-conversions.untouched.wat +++ b/tests/compiler/portable-conversions.untouched.wat @@ -4,7 +4,7 @@ (global $portable-conversions/I (mut i64) (i64.const 0)) (global $portable-conversions/f (mut f32) (f32.const 0)) (global $portable-conversions/F (mut f64) (f64.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/recursive.untouched.wat b/tests/compiler/recursive.untouched.wat index 0e60f3b3..43cebbea 100644 --- a/tests/compiler/recursive.untouched.wat +++ b/tests/compiler/recursive.untouched.wat @@ -1,6 +1,6 @@ (module (type $ii (func (param i32) (result i32))) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "fib" (func $recursive/fib)) (export "memory" (memory $0)) diff --git a/tests/compiler/reexport.untouched.wat b/tests/compiler/reexport.untouched.wat index 686cc73e..ec13ca53 100644 --- a/tests/compiler/reexport.untouched.wat +++ b/tests/compiler/reexport.untouched.wat @@ -4,7 +4,7 @@ (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $export/c i32 (i32.const 3)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "add" (func $export/add)) (export "renamed_sub" (func $export/sub)) diff --git a/tests/compiler/retain-i32.optimized.wat b/tests/compiler/retain-i32.optimized.wat index 38b59e90..fc20796d 100644 --- a/tests/compiler/retain-i32.optimized.wat +++ b/tests/compiler/retain-i32.optimized.wat @@ -6,7 +6,7 @@ (global $retain-i32/si (mut i32) (i32.const 0)) (global $retain-i32/ui (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\0d\00\00\00r\00e\00t\00a\00i\00n\00-\00i\003\002\00.\00t\00s") + (data (i32.const 8) "\0d\00\00\00r\00e\00t\00a\00i\00n\00-\00i\003\002\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $retain-i32/test (; 1 ;) (type $iiv) (param $0 i32) (param $1 i32) @@ -185,7 +185,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 78) (i32.const 0) ) @@ -203,7 +203,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 81) (i32.const 0) ) @@ -221,7 +221,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 84) (i32.const 0) ) @@ -239,7 +239,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 87) (i32.const 0) ) @@ -257,7 +257,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 90) (i32.const 0) ) @@ -275,7 +275,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 93) (i32.const 0) ) @@ -293,7 +293,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 96) (i32.const 0) ) @@ -311,7 +311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 99) (i32.const 0) ) @@ -329,7 +329,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 102) (i32.const 0) ) @@ -344,7 +344,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 105) (i32.const 0) ) @@ -362,7 +362,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 108) (i32.const 0) ) @@ -380,7 +380,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 113) (i32.const 0) ) @@ -398,7 +398,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 116) (i32.const 0) ) @@ -416,7 +416,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 119) (i32.const 0) ) @@ -434,7 +434,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 122) (i32.const 0) ) @@ -452,7 +452,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 125) (i32.const 0) ) @@ -470,7 +470,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 128) (i32.const 0) ) @@ -485,7 +485,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 131) (i32.const 0) ) diff --git a/tests/compiler/retain-i32.untouched.wat b/tests/compiler/retain-i32.untouched.wat index d55eabc3..629facc6 100644 --- a/tests/compiler/retain-i32.untouched.wat +++ b/tests/compiler/retain-i32.untouched.wat @@ -5,9 +5,9 @@ (import "env" "abort" (func $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 36)) + (global $HEAP_BASE i32 (i32.const 40)) (memory $0 1) - (data (i32.const 4) "\0d\00\00\00r\00e\00t\00a\00i\00n\00-\00i\003\002\00.\00t\00s\00") + (data (i32.const 8) "\0d\00\00\00r\00e\00t\00a\00i\00n\00-\00i\003\002\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $retain-i32/test (; 1 ;) (type $iiv) (param $0 i32) (param $1 i32) @@ -39,7 +39,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 2) ) @@ -74,7 +74,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 2) ) @@ -109,7 +109,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 6) (i32.const 2) ) @@ -144,7 +144,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 2) ) @@ -179,7 +179,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 2) ) @@ -214,7 +214,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 2) ) @@ -249,7 +249,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 2) ) @@ -278,7 +278,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 2) ) @@ -307,7 +307,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 14) (i32.const 2) ) @@ -336,7 +336,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 2) ) @@ -365,7 +365,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 2) ) @@ -394,7 +394,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 17) (i32.const 2) ) @@ -423,7 +423,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 2) ) @@ -452,7 +452,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 19) (i32.const 2) ) @@ -651,7 +651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 78) (i32.const 0) ) @@ -683,7 +683,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 81) (i32.const 0) ) @@ -712,7 +712,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 84) (i32.const 0) ) @@ -741,7 +741,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 87) (i32.const 0) ) @@ -770,7 +770,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 90) (i32.const 0) ) @@ -799,7 +799,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 93) (i32.const 0) ) @@ -828,7 +828,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 96) (i32.const 0) ) @@ -851,7 +851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 99) (i32.const 0) ) @@ -874,7 +874,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 102) (i32.const 0) ) @@ -897,7 +897,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 105) (i32.const 0) ) @@ -920,7 +920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 108) (i32.const 0) ) @@ -949,7 +949,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 113) (i32.const 0) ) @@ -978,7 +978,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 116) (i32.const 0) ) @@ -1004,7 +1004,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 119) (i32.const 0) ) @@ -1030,7 +1030,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 122) (i32.const 0) ) @@ -1053,7 +1053,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 125) (i32.const 0) ) @@ -1076,7 +1076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 128) (i32.const 0) ) @@ -1099,7 +1099,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 131) (i32.const 0) ) diff --git a/tests/compiler/scoped.untouched.wat b/tests/compiler/scoped.untouched.wat index b14df8be..acc861b1 100644 --- a/tests/compiler/scoped.untouched.wat +++ b/tests/compiler/scoped.untouched.wat @@ -4,7 +4,7 @@ (global $scoped/aGlobal (mut i32) (i32.const 1)) (global $scoped/aConstant i32 (i32.const 3)) (global $scoped/aStartFunctionLocal (mut i32) (i32.const 2)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/showcase.optimized.wat b/tests/compiler/showcase.optimized.wat index f4f4e2dd..f732ecb5 100644 --- a/tests/compiler/showcase.optimized.wat +++ b/tests/compiler/showcase.optimized.wat @@ -48,11 +48,11 @@ (global $showcase/aClassInstance (mut i32) (i32.const 8)) (global $showcase/AClass.aStaticField (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00l\00o\00g\00i\00c\00a\00l\00.\00t\00s") - (data (i32.const 28) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s") - (data (i32.const 56) "\01\00\00\001") - (data (i32.const 64) "\0b\00\00\00s\00h\00o\00w\00c\00a\00s\00e\00.\00t\00s") - (data (i32.const 92) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s") + (data (i32.const 8) "\n\00\00\00l\00o\00g\00i\00c\00a\00l\00.\00t\00s") + (data (i32.const 32) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s") + (data (i32.const 60) "\01\00\00\001") + (data (i32.const 68) "\0b\00\00\00s\00h\00o\00w\00c\00a\00s\00e\00.\00t\00s") + (data (i32.const 96) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s") (export "anExportedConstantGlobal" (global $showcase/anExportedConstantGlobal)) (export "aConstantGlobal" (global $showcase/aConstantGlobal)) (export "anAliasedConstantGlobal" (global $showcase/anExportedConstantGlobal)) @@ -6132,7 +6132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) @@ -6150,7 +6150,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -6168,7 +6168,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 0) ) @@ -6186,7 +6186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -6204,7 +6204,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 0) ) @@ -6222,7 +6222,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) @@ -6240,7 +6240,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 36) (i32.const 0) ) @@ -6258,7 +6258,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 39) (i32.const 0) ) @@ -6317,7 +6317,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 43) (i32.const 19) ) @@ -6344,7 +6344,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 44) (i32.const 20) ) @@ -6369,7 +6369,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 45) (i32.const 20) ) @@ -6414,7 +6414,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 61) (i32.const 19) ) @@ -6443,7 +6443,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 62) (i32.const 20) ) @@ -6468,7 +6468,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 63) (i32.const 20) ) @@ -6482,7 +6482,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 80) (i32.const 0) ) @@ -6499,7 +6499,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 81) (i32.const 0) ) @@ -6516,7 +6516,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 82) (i32.const 0) ) @@ -6530,7 +6530,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 83) (i32.const 0) ) @@ -6544,7 +6544,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 84) (i32.const 0) ) @@ -6558,7 +6558,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 85) (i32.const 0) ) @@ -6615,7 +6615,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 116) (i32.const 0) ) @@ -6632,7 +6632,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 117) (i32.const 0) ) @@ -6649,7 +6649,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 118) (i32.const 0) ) @@ -6663,7 +6663,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 119) (i32.const 0) ) @@ -6677,7 +6677,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 120) (i32.const 0) ) @@ -6691,7 +6691,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 121) (i32.const 0) ) @@ -7048,7 +7048,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 261) (i32.const 0) ) @@ -7064,7 +7064,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 262) (i32.const 0) ) @@ -7078,7 +7078,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 263) (i32.const 0) ) @@ -7092,7 +7092,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 264) (i32.const 0) ) @@ -7106,7 +7106,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 265) (i32.const 0) ) @@ -7120,7 +7120,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 266) (i32.const 0) ) @@ -7136,7 +7136,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 267) (i32.const 0) ) @@ -7152,7 +7152,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 268) (i32.const 0) ) @@ -7280,7 +7280,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 42) (i32.const 0) ) @@ -7304,7 +7304,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 58) (i32.const 0) ) @@ -7319,7 +7319,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 59) (i32.const 0) ) @@ -7375,7 +7375,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 151) (i32.const 0) ) @@ -7392,7 +7392,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 152) (i32.const 0) ) @@ -7414,7 +7414,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 155) (i32.const 0) ) @@ -7431,7 +7431,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 156) (i32.const 0) ) @@ -7448,7 +7448,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 157) (i32.const 0) ) @@ -7465,7 +7465,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 158) (i32.const 0) ) @@ -7482,7 +7482,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 159) (i32.const 0) ) @@ -7506,7 +7506,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 162) (i32.const 0) ) @@ -7530,7 +7530,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 165) (i32.const 0) ) @@ -7547,7 +7547,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 166) (i32.const 0) ) @@ -7564,7 +7564,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 167) (i32.const 0) ) @@ -7581,7 +7581,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 168) (i32.const 0) ) @@ -7606,7 +7606,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 103) (i32.const 0) ) @@ -7623,7 +7623,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 104) (i32.const 0) ) @@ -7644,7 +7644,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 107) (i32.const 0) ) @@ -7662,7 +7662,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 110) (i32.const 0) ) diff --git a/tests/compiler/showcase.untouched.wat b/tests/compiler/showcase.untouched.wat index e17d0529..54efbea8 100644 --- a/tests/compiler/showcase.untouched.wat +++ b/tests/compiler/showcase.untouched.wat @@ -55,13 +55,13 @@ (global $memcpy/dest (mut i32) (i32.const 0)) (global $showcase/aClassInstance (mut i32) (i32.const 8)) (global $showcase/AClass.aStaticField (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 116)) + (global $HEAP_BASE i32 (i32.const 120)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00l\00o\00g\00i\00c\00a\00l\00.\00t\00s\00") - (data (i32.const 28) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s\00") - (data (i32.const 56) "\01\00\00\001\00") - (data (i32.const 64) "\0b\00\00\00s\00h\00o\00w\00c\00a\00s\00e\00.\00t\00s\00") - (data (i32.const 92) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s\00") + (data (i32.const 8) "\n\00\00\00l\00o\00g\00i\00c\00a\00l\00.\00t\00s\00") + (data (i32.const 32) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s\00") + (data (i32.const 60) "\01\00\00\001\00") + (data (i32.const 68) "\0b\00\00\00s\00h\00o\00w\00c\00a\00s\00e\00.\00t\00s\00") + (data (i32.const 96) "\t\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s\00") (export "anExportedConstantGlobal" (global $showcase/anExportedConstantGlobal)) (export "aConstantGlobal" (global $showcase/aConstantGlobal)) (export "anAliasedConstantGlobal" (global $showcase/anExportedConstantGlobal)) @@ -7473,7 +7473,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 12) (i32.const 0) ) @@ -7497,7 +7497,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -7524,7 +7524,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 0) ) @@ -7551,7 +7551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -7578,7 +7578,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 0) ) @@ -7605,7 +7605,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) @@ -7632,7 +7632,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 36) (i32.const 0) ) @@ -7659,7 +7659,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 39) (i32.const 0) ) @@ -7673,7 +7673,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 5) (i32.const 0) ) @@ -7689,7 +7689,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 6) (i32.const 0) ) @@ -7703,7 +7703,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 7) (i32.const 0) ) @@ -7719,7 +7719,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 8) (i32.const 0) ) @@ -7733,7 +7733,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 9) (i32.const 0) ) @@ -7749,7 +7749,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 10) (i32.const 0) ) @@ -7763,7 +7763,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 11) (i32.const 0) ) @@ -7779,7 +7779,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 12) (i32.const 0) ) @@ -7793,7 +7793,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 14) (i32.const 0) ) @@ -7809,7 +7809,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 15) (i32.const 0) ) @@ -7823,7 +7823,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 16) (i32.const 0) ) @@ -7839,7 +7839,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 17) (i32.const 0) ) @@ -7853,7 +7853,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 18) (i32.const 0) ) @@ -7869,7 +7869,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 19) (i32.const 0) ) @@ -7883,7 +7883,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 20) (i32.const 0) ) @@ -7899,7 +7899,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 21) (i32.const 0) ) @@ -7913,7 +7913,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 22) (i32.const 0) ) @@ -7929,7 +7929,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 23) (i32.const 0) ) @@ -8058,7 +8058,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 43) (i32.const 19) ) @@ -8089,7 +8089,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 44) (i32.const 20) ) @@ -8120,7 +8120,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 45) (i32.const 20) ) @@ -8221,7 +8221,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 61) (i32.const 19) ) @@ -8252,7 +8252,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 62) (i32.const 20) ) @@ -8283,7 +8283,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 63) (i32.const 20) ) @@ -8356,7 +8356,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 80) (i32.const 0) ) @@ -8375,7 +8375,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 81) (i32.const 0) ) @@ -8394,7 +8394,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 82) (i32.const 0) ) @@ -8413,7 +8413,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 83) (i32.const 0) ) @@ -8434,7 +8434,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 84) (i32.const 0) ) @@ -8453,7 +8453,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 85) (i32.const 0) ) @@ -8596,7 +8596,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 116) (i32.const 0) ) @@ -8615,7 +8615,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 117) (i32.const 0) ) @@ -8634,7 +8634,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 118) (i32.const 0) ) @@ -8653,7 +8653,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 119) (i32.const 0) ) @@ -8674,7 +8674,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 120) (i32.const 0) ) @@ -8693,7 +8693,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 121) (i32.const 0) ) @@ -9146,7 +9146,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 237) (i32.const 0) ) @@ -9163,7 +9163,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 238) (i32.const 0) ) @@ -9180,7 +9180,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 239) (i32.const 0) ) @@ -9197,7 +9197,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 240) (i32.const 0) ) @@ -9217,7 +9217,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 242) (i32.const 0) ) @@ -9234,7 +9234,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 243) (i32.const 0) ) @@ -9251,7 +9251,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 244) (i32.const 0) ) @@ -9268,7 +9268,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 245) (i32.const 0) ) @@ -9285,7 +9285,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 246) (i32.const 0) ) @@ -9305,7 +9305,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 248) (i32.const 0) ) @@ -9322,7 +9322,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 249) (i32.const 0) ) @@ -9339,7 +9339,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 252) (i32.const 0) ) @@ -9356,7 +9356,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 253) (i32.const 0) ) @@ -9373,7 +9373,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 254) (i32.const 0) ) @@ -9390,7 +9390,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 255) (i32.const 0) ) @@ -9407,7 +9407,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 257) (i32.const 0) ) @@ -9424,7 +9424,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 258) (i32.const 0) ) @@ -9441,7 +9441,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 260) (i32.const 0) ) @@ -9457,7 +9457,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 261) (i32.const 0) ) @@ -9473,7 +9473,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 262) (i32.const 0) ) @@ -9491,7 +9491,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 263) (i32.const 0) ) @@ -9509,7 +9509,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 264) (i32.const 0) ) @@ -9527,7 +9527,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 265) (i32.const 0) ) @@ -9545,7 +9545,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 266) (i32.const 0) ) @@ -9561,7 +9561,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 267) (i32.const 0) ) @@ -9577,7 +9577,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 268) (i32.const 0) ) @@ -9600,7 +9600,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 281) (i32.const 0) ) @@ -9617,7 +9617,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 282) (i32.const 0) ) @@ -9640,7 +9640,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 283) (i32.const 0) ) @@ -9657,7 +9657,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 284) (i32.const 0) ) @@ -9674,7 +9674,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 285) (i32.const 0) ) @@ -9691,7 +9691,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 286) (i32.const 0) ) @@ -9708,7 +9708,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 287) (i32.const 0) ) @@ -9725,7 +9725,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 288) (i32.const 0) ) @@ -9742,7 +9742,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 290) (i32.const 0) ) @@ -9759,7 +9759,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 291) (i32.const 0) ) @@ -9776,7 +9776,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 292) (i32.const 0) ) @@ -9793,7 +9793,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 293) (i32.const 0) ) @@ -9810,7 +9810,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 294) (i32.const 0) ) @@ -9827,7 +9827,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 295) (i32.const 0) ) @@ -9844,7 +9844,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 296) (i32.const 0) ) @@ -9861,7 +9861,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 297) (i32.const 0) ) @@ -9878,7 +9878,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 298) (i32.const 0) ) @@ -9895,7 +9895,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 298) (i32.const 29) ) @@ -9912,7 +9912,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 299) (i32.const 0) ) @@ -9929,7 +9929,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 299) (i32.const 29) ) @@ -9946,7 +9946,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 301) (i32.const 0) ) @@ -9963,7 +9963,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 302) (i32.const 0) ) @@ -9980,7 +9980,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 303) (i32.const 0) ) @@ -9997,7 +9997,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 304) (i32.const 0) ) @@ -10014,7 +10014,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 305) (i32.const 0) ) @@ -10031,7 +10031,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 306) (i32.const 0) ) @@ -10048,7 +10048,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 307) (i32.const 0) ) @@ -10065,7 +10065,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 308) (i32.const 0) ) @@ -10082,7 +10082,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 309) (i32.const 0) ) @@ -10099,7 +10099,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 310) (i32.const 0) ) @@ -10399,7 +10399,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 42) (i32.const 0) ) @@ -10425,7 +10425,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 54) (i32.const 0) ) @@ -10442,7 +10442,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 55) (i32.const 0) ) @@ -10459,7 +10459,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 56) (i32.const 0) ) @@ -10476,7 +10476,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 57) (i32.const 0) ) @@ -10493,7 +10493,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 58) (i32.const 0) ) @@ -10510,7 +10510,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 59) (i32.const 0) ) @@ -10603,7 +10603,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 151) (i32.const 0) ) @@ -10622,7 +10622,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 152) (i32.const 0) ) @@ -10646,7 +10646,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 155) (i32.const 0) ) @@ -10665,7 +10665,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 156) (i32.const 0) ) @@ -10687,7 +10687,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 157) (i32.const 0) ) @@ -10709,7 +10709,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 158) (i32.const 0) ) @@ -10731,7 +10731,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 159) (i32.const 0) ) @@ -10763,7 +10763,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 162) (i32.const 0) ) @@ -10795,7 +10795,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 165) (i32.const 0) ) @@ -10817,7 +10817,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 166) (i32.const 0) ) @@ -10839,7 +10839,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 167) (i32.const 0) ) @@ -10861,7 +10861,7 @@ (block (call $abort (i32.const 0) - (i32.const 92) + (i32.const 96) (i32.const 168) (i32.const 0) ) @@ -10888,7 +10888,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 103) (i32.const 0) ) @@ -10907,7 +10907,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 104) (i32.const 0) ) @@ -10930,7 +10930,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 107) (i32.const 0) ) @@ -10950,7 +10950,7 @@ (block (call $abort (i32.const 0) - (i32.const 64) + (i32.const 68) (i32.const 110) (i32.const 0) ) diff --git a/tests/compiler/static-this.optimized.wat b/tests/compiler/static-this.optimized.wat index 4b5da94a..bcc2f98f 100644 --- a/tests/compiler/static-this.optimized.wat +++ b/tests/compiler/static-this.optimized.wat @@ -5,7 +5,7 @@ (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $static-this/Foo.bar (mut i32) (i32.const 42)) (memory $0 1) - (data (i32.const 4) "\0e\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s") + (data (i32.const 8) "\0e\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $static-this/Foo.getBar (; 1 ;) (type $i) (result i32) @@ -20,7 +20,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) diff --git a/tests/compiler/static-this.untouched.wat b/tests/compiler/static-this.untouched.wat index 1c209c01..12478225 100644 --- a/tests/compiler/static-this.untouched.wat +++ b/tests/compiler/static-this.untouched.wat @@ -4,9 +4,9 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $static-this/Foo.bar (mut i32) (i32.const 42)) - (global $HEAP_BASE i32 (i32.const 36)) + (global $HEAP_BASE i32 (i32.const 40)) (memory $0 1) - (data (i32.const 4) "\0e\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s\00") + (data (i32.const 8) "\0e\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $static-this/Foo.getBar (; 1 ;) (type $i) (result i32) @@ -25,7 +25,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) diff --git a/tests/compiler/std/allocator_arena.optimized.wat b/tests/compiler/std/allocator_arena.optimized.wat index 8b34f319..3998a291 100644 --- a/tests/compiler/std/allocator_arena.optimized.wat +++ b/tests/compiler/std/allocator_arena.optimized.wat @@ -11,9 +11,9 @@ (global $std/allocator_arena/ptr1 (mut i32) (i32.const 0)) (global $std/allocator_arena/ptr2 (mut i32) (i32.const 0)) (global $std/allocator_arena/i (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 52)) + (global $HEAP_BASE i32 (i32.const 56)) (memory $0 1) - (data (i32.const 4) "\16\00\00\00s\00t\00d\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00_\00a\00r\00e\00n\00a\00.\00t\00s") + (data (i32.const 8) "\16\00\00\00s\00t\00d\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00_\00a\00r\00e\00n\00a\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -33,7 +33,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -48,7 +48,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -58,14 +58,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -77,7 +77,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -96,7 +96,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) @@ -2403,7 +2403,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -2438,7 +2438,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 2) ) @@ -2483,7 +2483,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 2) ) @@ -2509,7 +2509,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 0) ) @@ -2542,7 +2542,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 0) ) diff --git a/tests/compiler/std/allocator_arena.untouched.wat b/tests/compiler/std/allocator_arena.untouched.wat index 2e5245d7..2046ab18 100644 --- a/tests/compiler/std/allocator_arena.untouched.wat +++ b/tests/compiler/std/allocator_arena.untouched.wat @@ -16,9 +16,9 @@ (global $std/allocator_arena/ptr1 (mut i32) (i32.const 0)) (global $std/allocator_arena/ptr2 (mut i32) (i32.const 0)) (global $std/allocator_arena/i (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 52)) + (global $HEAP_BASE i32 (i32.const 56)) (memory $0 1) - (data (i32.const 4) "\16\00\00\00s\00t\00d\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00_\00a\00r\00e\00n\00a\00.\00t\00s\00") + (data (i32.const 8) "\16\00\00\00s\00t\00d\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00_\00a\00r\00e\00n\00a\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -2713,7 +2713,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -2751,7 +2751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 2) ) @@ -2800,7 +2800,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 2) ) @@ -2832,7 +2832,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 0) ) @@ -2870,7 +2870,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 0) ) diff --git a/tests/compiler/std/array-access.optimized.wat b/tests/compiler/std/array-access.optimized.wat index 7f943423..73451654 100644 --- a/tests/compiler/std/array-access.optimized.wat +++ b/tests/compiler/std/array-access.optimized.wat @@ -5,8 +5,8 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 40) "\04\00\00\00n\00u\00l\00l") + (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") (export "i32ArrayArrayElementAccess" (func $std/array-access/i32ArrayArrayElementAccess)) (export "stringArrayPropertyAccess" (func $std/array-access/stringArrayPropertyAccess)) (export "stringArrayMethodCall" (func $std/array-access/stringArrayMethodCall)) @@ -129,7 +129,7 @@ (block (call $abort (i32.const 0) - (i32.const 8) + (i32.const 12) (i32.const 231) (i32.const 4) ) @@ -141,7 +141,7 @@ (get_local $1) ) (set_local $1 - (i32.const 40) + (i32.const 44) ) ) (if @@ -213,7 +213,7 @@ (get_local $0) (i32.const 0) ) - (i32.const 4) + (i32.const 8) (i32.const 0) ) ) @@ -237,7 +237,7 @@ ) (i32.const 1) ) - (i32.const 4) + (i32.const 8) (i32.const 0) ) ) diff --git a/tests/compiler/std/array-access.untouched.wat b/tests/compiler/std/array-access.untouched.wat index 4885ca6e..8b3d71ae 100644 --- a/tests/compiler/std/array-access.untouched.wat +++ b/tests/compiler/std/array-access.untouched.wat @@ -9,11 +9,11 @@ (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) (global $~lib/internal/arraybuffer/HEADER_SIZE i32 (i32.const 8)) (global $~lib/internal/string/HEADER_SIZE i32 (i32.const 4)) - (global $HEAP_BASE i32 (i32.const 52)) + (global $HEAP_BASE i32 (i32.const 56)) (memory $0 1) - (data (i32.const 4) "\00\00\00\00") - (data (i32.const 8) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 40) "\04\00\00\00n\00u\00l\00l\00") + (data (i32.const 8) "\00\00\00\00") + (data (i32.const 12) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 44) "\04\00\00\00n\00u\00l\00l\00") (export "i32ArrayArrayElementAccess" (func $std/array-access/i32ArrayArrayElementAccess)) (export "stringArrayPropertyAccess" (func $std/array-access/stringArrayPropertyAccess)) (export "stringArrayMethodCall" (func $std/array-access/stringArrayMethodCall)) @@ -229,7 +229,7 @@ (block (call $abort (i32.const 0) - (i32.const 8) + (i32.const 12) (i32.const 231) (i32.const 4) ) @@ -242,7 +242,7 @@ (i32.const 0) ) (set_local $1 - (i32.const 40) + (i32.const 44) ) ) (set_local $3 @@ -327,7 +327,7 @@ (get_local $0) (i32.const 0) ) - (i32.const 4) + (i32.const 8) (i32.const 0) ) ) @@ -390,7 +390,7 @@ ) (i32.const 1) ) - (i32.const 4) + (i32.const 8) (i32.const 0) ) ) diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index e6354c99..6bacdca1 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -83,7 +83,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -98,7 +98,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -108,14 +108,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -127,7 +127,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -146,7 +146,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 8444fcf2..aa52ee97 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -30,10 +30,10 @@ (global $~lib/math/random_state0 (mut i64) (i64.const 0)) (global $~lib/math/random_state1 (mut i64) (i64.const 0)) (global $std/array/reversed0 (mut i32) (i32.const 0)) - (global $std/array/reversed1 (mut i32) (i32.const 328)) - (global $std/array/reversed2 (mut i32) (i32.const 352)) - (global $std/array/reversed4 (mut i32) (i32.const 376)) - (global $std/array/expected4 (mut i32) (i32.const 416)) + (global $std/array/reversed1 (mut i32) (i32.const 336)) + (global $std/array/reversed2 (mut i32) (i32.const 360)) + (global $std/array/reversed4 (mut i32) (i32.const 384)) + (global $std/array/expected4 (mut i32) (i32.const 424)) (global $std/array/reversed64 (mut i32) (i32.const 0)) (global $std/array/reversed128 (mut i32) (i32.const 0)) (global $std/array/reversed1024 (mut i32) (i32.const 0)) @@ -43,34 +43,35 @@ (global $std/array/randomized257 (mut i32) (i32.const 0)) (global $std/array/reversedNested512 (mut i32) (i32.const 0)) (global $std/array/reversedElements512 (mut i32) (i32.const 0)) - (global $std/array/randomStringsActual (mut i32) (i32.const 544)) - (global $std/array/randomStringsExpected (mut i32) (i32.const 616)) + (global $std/array/randomStringsActual (mut i32) (i32.const 552)) + (global $std/array/randomStringsExpected (mut i32) (i32.const 624)) (global $std/array/randomStrings400 (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 784)) + (global $HEAP_BASE i32 (i32.const 792)) (table 51 51 anyfunc) (elem (i32.const 0) $start~anonymous|0 $start~anonymous|1 $start~anonymous|2 $start~anonymous|3 $start~anonymous|2 $start~anonymous|5 $start~anonymous|6 $start~anonymous|7 $start~anonymous|8 $start~anonymous|9 $start~anonymous|10 $start~anonymous|11 $start~anonymous|12 $start~anonymous|13 $start~anonymous|14 $start~anonymous|15 $start~anonymous|16 $start~anonymous|17 $start~anonymous|16 $start~anonymous|19 $start~anonymous|20 $start~anonymous|21 $start~anonymous|22 $start~anonymous|23 $start~anonymous|24 $start~anonymous|25 $start~anonymous|26 $start~anonymous|27 $start~anonymous|28 $start~anonymous|28 $start~anonymous|30 $start~anonymous|31 $start~anonymous|32 $start~anonymous|28 $start~anonymous|34 $start~anonymous|28 $start~anonymous|28 $start~anonymous|30 $start~anonymous|31 $start~anonymous|32 $start~anonymous|28 $start~anonymous|34 $std/array/assertSortedDefault~anonymous|42 $start~anonymous|43 $start~anonymous|44 $start~anonymous|43 $start~anonymous|44 $start~anonymous|47 $start~anonymous|48 $start~anonymous|49 $start~anonymous|49) (memory $0 1) - (data (i32.const 4) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 36) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") - (data (i32.const 96) "\0c\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 124) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") - (data (i32.const 152) "V\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?") - (data (i32.const 328) "P\01\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01") - (data (i32.const 352) "h\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00\02\00\00\00\01") - (data (i32.const 376) "\80\01\00\00\04\00\00\00\10\00\00\00\00\00\00\00\03\00\00\00\02\00\00\00\01") - (data (i32.const 416) "\a8\01\00\00\04\00\00\00\10") - (data (i32.const 436) "\01\00\00\00\02\00\00\00\03") - (data (i32.const 456) "\d0\01\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01") - (data (i32.const 480) "\e8\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00\01\00\00\00\02") - (data (i32.const 504) "\01\00\00\00a") - (data (i32.const 512) "\01\00\00\00b") - (data (i32.const 520) "\02\00\00\00a\00b") - (data (i32.const 528) "\02\00\00\00b\00a") - (data (i32.const 544) "(\02\00\00\07\00\00\00\1c\00\00\00\00\00\00\00\f8\01\00\00\00\02\00\00\f8\01\00\00\08\02\00\00\10\02\00\00\18\02") - (data (i32.const 616) "p\02\00\00\07\00\00\00\1c\00\00\00\00\00\00\00\18\02\00\00\f8\01\00\00\f8\01\00\00\08\02\00\00\00\02\00\00\10\02") - (data (i32.const 688) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 720) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 772) "\04\00\00\00n\00u\00l\00l") + (data (i32.const 8) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 40) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 100) "\0c\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 128) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") + (data (i32.const 156) "V\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?") + (data (i32.const 336) "X\01\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01") + (data (i32.const 360) "p\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00\02\00\00\00\01") + (data (i32.const 384) "\88\01\00\00\04\00\00\00\10\00\00\00\00\00\00\00\03\00\00\00\02\00\00\00\01") + (data (i32.const 424) "\b0\01\00\00\04\00\00\00\10") + (data (i32.const 444) "\01\00\00\00\02\00\00\00\03") + (data (i32.const 464) "\d8\01\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01") + (data (i32.const 488) "\f0\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00\01\00\00\00\02") + (data (i32.const 512) "\01\00\00\00a") + (data (i32.const 520) "\01\00\00\00b") + (data (i32.const 528) "\02\00\00\00a\00b") + (data (i32.const 536) "\02\00\00\00b\00a") + (data (i32.const 552) "0\02\00\00\07\00\00\00\1c") + (data (i32.const 569) "\02\00\00\08\02\00\00\00\02\00\00\10\02\00\00\18\02\00\00 \02") + (data (i32.const 624) "x\02\00\00\07\00\00\00\1c\00\00\00\00\00\00\00 \02\00\00\00\02\00\00\00\02\00\00\10\02\00\00\08\02\00\00\18\02") + (data (i32.const 696) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") + (data (i32.const 728) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") + (data (i32.const 780) "\04\00\00\00n\00u\00l\00l") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) @@ -105,7 +106,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -120,7 +121,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -130,14 +131,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -149,7 +150,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -168,7 +169,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) @@ -187,7 +188,7 @@ (block (call $abort (i32.const 0) - (i32.const 36) + (i32.const 40) (i32.const 22) (i32.const 2) ) @@ -553,7 +554,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 39) ) @@ -2505,7 +2506,7 @@ (block (call $abort (i32.const 0) - (i32.const 36) + (i32.const 40) (i32.const 32) (i32.const 4) ) @@ -2592,7 +2593,7 @@ (block (call $abort (i32.const 0) - (i32.const 36) + (i32.const 40) (i32.const 56) (i32.const 4) ) @@ -2645,7 +2646,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 143) (i32.const 42) ) @@ -2725,7 +2726,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 154) (i32.const 20) ) @@ -2796,7 +2797,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 244) (i32.const 42) ) @@ -2868,7 +2869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 215) (i32.const 20) ) @@ -3199,18 +3200,16 @@ ) (set_local $1 (select - (tee_local $3 + (tee_local $1 (i32.add (get_local $4) (get_local $1) ) ) - (tee_local $1 - (i32.const 0) - ) + (i32.const 0) (i32.gt_s - (get_local $3) (get_local $1) + (get_local $3) ) ) ) @@ -3247,18 +3246,16 @@ (get_local $1) (tee_local $2 (select + (get_local $2) (tee_local $3 - (get_local $2) - ) - (tee_local $1 (i32.sub (get_local $4) (get_local $1) ) ) (i32.lt_s + (get_local $2) (get_local $3) - (get_local $1) ) ) ) @@ -3304,7 +3301,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 41) ) @@ -4369,7 +4366,7 @@ (block (call $abort (i32.const 0) - (i32.const 124) + (i32.const 128) (i32.const 1000) (i32.const 4) ) @@ -4445,7 +4442,7 @@ (block (call $abort (i32.const 0) - (i32.const 124) + (i32.const 128) (i32.const 1007) (i32.const 24) ) @@ -5268,7 +5265,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 605) (i32.const 2) ) @@ -5516,7 +5513,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 605) (i32.const 2) ) @@ -5977,7 +5974,7 @@ (block (call $abort (i32.const 0) - (i32.const 720) + (i32.const 728) (i32.const 20) (i32.const 2) ) @@ -6009,7 +6006,7 @@ (block (call $abort (i32.const 0) - (i32.const 688) + (i32.const 696) (i32.const 18) (i32.const 4) ) @@ -6024,7 +6021,7 @@ ) ) (return - (i32.const 536) + (i32.const 544) ) ) (i32.store16 offset=4 @@ -6056,7 +6053,7 @@ (block (call $abort (i32.const 0) - (i32.const 688) + (i32.const 696) (i32.const 74) (i32.const 4) ) @@ -6068,7 +6065,7 @@ (get_local $1) ) (set_local $1 - (i32.const 772) + (i32.const 780) ) ) (if @@ -6089,7 +6086,7 @@ ) ) (return - (i32.const 536) + (i32.const 544) ) ) (call $~lib/memory/move_memory @@ -6138,7 +6135,7 @@ (get_local $0) ) (set_local $0 - (i32.const 772) + (i32.const 780) ) ) (call $~lib/string/String#concat @@ -6150,7 +6147,7 @@ (local $1 i32) (local $2 i32) (set_local $1 - (i32.const 536) + (i32.const 544) ) (loop $continue|0 (if @@ -6163,14 +6160,14 @@ (call $~lib/string/String.__concat (get_local $1) (call $~lib/string/String#charAt - (i32.const 152) + (i32.const 156) (i32.trunc_s/f64 (f64.floor (f64.mul (call $~lib/math/NativeMath.random) (f64.convert_s/i32 (i32.load - (i32.const 152) + (i32.const 156) ) ) ) @@ -6261,7 +6258,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 17) (i32.const 0) ) @@ -6275,7 +6272,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 18) (i32.const 0) ) @@ -6299,7 +6296,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 22) (i32.const 0) ) @@ -6316,7 +6313,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 23) (i32.const 0) ) @@ -6333,7 +6330,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 24) (i32.const 0) ) @@ -6353,7 +6350,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 28) (i32.const 0) ) @@ -6367,7 +6364,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 29) (i32.const 0) ) @@ -6384,7 +6381,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 30) (i32.const 0) ) @@ -6407,7 +6404,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 34) (i32.const 0) ) @@ -6424,7 +6421,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 35) (i32.const 0) ) @@ -6442,7 +6439,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 36) (i32.const 0) ) @@ -6465,7 +6462,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 40) (i32.const 0) ) @@ -6482,7 +6479,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 41) (i32.const 0) ) @@ -6500,7 +6497,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 42) (i32.const 0) ) @@ -6518,7 +6515,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 43) (i32.const 0) ) @@ -6541,7 +6538,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 47) (i32.const 0) ) @@ -6558,7 +6555,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 48) (i32.const 0) ) @@ -6576,7 +6573,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 49) (i32.const 0) ) @@ -6594,7 +6591,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 50) (i32.const 0) ) @@ -6612,7 +6609,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 51) (i32.const 0) ) @@ -6635,7 +6632,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 57) (i32.const 0) ) @@ -6652,7 +6649,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 58) (i32.const 0) ) @@ -6670,7 +6667,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 59) (i32.const 0) ) @@ -6688,7 +6685,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 60) (i32.const 0) ) @@ -6706,7 +6703,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 61) (i32.const 0) ) @@ -6724,7 +6721,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 62) (i32.const 0) ) @@ -6747,7 +6744,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 66) (i32.const 0) ) @@ -6764,7 +6761,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 67) (i32.const 0) ) @@ -6782,7 +6779,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 68) (i32.const 0) ) @@ -6800,7 +6797,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 69) (i32.const 0) ) @@ -6818,7 +6815,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 70) (i32.const 0) ) @@ -6836,7 +6833,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 71) (i32.const 0) ) @@ -6854,7 +6851,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 72) (i32.const 0) ) @@ -6874,7 +6871,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 78) (i32.const 0) ) @@ -6891,7 +6888,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 79) (i32.const 0) ) @@ -6908,7 +6905,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 80) (i32.const 0) ) @@ -6926,7 +6923,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 81) (i32.const 0) ) @@ -6944,7 +6941,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 82) (i32.const 0) ) @@ -6962,7 +6959,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 83) (i32.const 0) ) @@ -6980,7 +6977,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 84) (i32.const 0) ) @@ -7000,7 +6997,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 88) (i32.const 0) ) @@ -7017,7 +7014,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 89) (i32.const 0) ) @@ -7034,7 +7031,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 90) (i32.const 0) ) @@ -7052,7 +7049,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 91) (i32.const 0) ) @@ -7070,7 +7067,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 92) (i32.const 0) ) @@ -7088,7 +7085,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 93) (i32.const 0) ) @@ -7110,7 +7107,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 99) (i32.const 0) ) @@ -7127,7 +7124,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 100) (i32.const 0) ) @@ -7145,7 +7142,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 101) (i32.const 0) ) @@ -7163,7 +7160,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 102) (i32.const 0) ) @@ -7181,7 +7178,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 103) (i32.const 0) ) @@ -7212,7 +7209,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 112) (i32.const 0) ) @@ -7234,7 +7231,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 116) (i32.const 0) ) @@ -7256,7 +7253,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 120) (i32.const 0) ) @@ -7278,7 +7275,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 124) (i32.const 0) ) @@ -7300,7 +7297,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 128) (i32.const 0) ) @@ -7322,7 +7319,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 132) (i32.const 0) ) @@ -7344,7 +7341,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 136) (i32.const 0) ) @@ -7366,7 +7363,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 140) (i32.const 0) ) @@ -7388,7 +7385,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 144) (i32.const 0) ) @@ -7410,7 +7407,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 148) (i32.const 0) ) @@ -7432,7 +7429,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 154) (i32.const 0) ) @@ -7454,7 +7451,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 158) (i32.const 0) ) @@ -7473,7 +7470,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 162) (i32.const 0) ) @@ -7492,7 +7489,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 166) (i32.const 0) ) @@ -7514,7 +7511,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 170) (i32.const 0) ) @@ -7536,7 +7533,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 174) (i32.const 0) ) @@ -7558,7 +7555,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 178) (i32.const 0) ) @@ -7580,7 +7577,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 182) (i32.const 0) ) @@ -7602,7 +7599,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 186) (i32.const 0) ) @@ -7624,7 +7621,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 190) (i32.const 0) ) @@ -7646,7 +7643,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 194) (i32.const 0) ) @@ -7663,7 +7660,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 195) (i32.const 0) ) @@ -7681,7 +7678,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 196) (i32.const 0) ) @@ -7699,7 +7696,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 197) (i32.const 0) ) @@ -7737,7 +7734,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 207) (i32.const 0) ) @@ -7758,7 +7755,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 210) (i32.const 0) ) @@ -7779,7 +7776,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 213) (i32.const 0) ) @@ -7800,7 +7797,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 221) (i32.const 0) ) @@ -7817,7 +7814,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 222) (i32.const 0) ) @@ -7838,7 +7835,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 224) (i32.const 0) ) @@ -7879,7 +7876,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 237) (i32.const 0) ) @@ -7896,7 +7893,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 238) (i32.const 0) ) @@ -7929,7 +7926,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 246) (i32.const 0) ) @@ -7947,7 +7944,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 249) (i32.const 0) ) @@ -7968,7 +7965,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 257) (i32.const 0) ) @@ -7985,7 +7982,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 258) (i32.const 0) ) @@ -8003,7 +8000,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 260) (i32.const 0) ) @@ -8044,7 +8041,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 273) (i32.const 0) ) @@ -8061,7 +8058,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 274) (i32.const 0) ) @@ -8094,7 +8091,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 282) (i32.const 0) ) @@ -8112,7 +8109,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 285) (i32.const 0) ) @@ -8130,7 +8127,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 293) (i32.const 0) ) @@ -8147,7 +8144,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 294) (i32.const 0) ) @@ -8168,7 +8165,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 296) (i32.const 0) ) @@ -8206,7 +8203,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 309) (i32.const 0) ) @@ -8223,7 +8220,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 310) (i32.const 0) ) @@ -8257,7 +8254,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 319) (i32.const 0) ) @@ -8279,7 +8276,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 328) (i32.const 0) ) @@ -8296,7 +8293,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 329) (i32.const 0) ) @@ -8318,7 +8315,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 332) (i32.const 0) ) @@ -8360,7 +8357,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 346) (i32.const 0) ) @@ -8377,7 +8374,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 347) (i32.const 0) ) @@ -8412,7 +8409,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 356) (i32.const 0) ) @@ -8435,7 +8432,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 357) (i32.const 0) ) @@ -8459,7 +8456,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 366) (i32.const 0) ) @@ -8476,7 +8473,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 367) (i32.const 0) ) @@ -8500,7 +8497,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 374) (i32.const 0) ) @@ -8544,7 +8541,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 389) (i32.const 0) ) @@ -8561,7 +8558,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 390) (i32.const 0) ) @@ -8596,7 +8593,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 398) (i32.const 0) ) @@ -8620,7 +8617,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 407) (i32.const 0) ) @@ -8637,7 +8634,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 408) (i32.const 0) ) @@ -8661,7 +8658,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 415) (i32.const 0) ) @@ -8705,7 +8702,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 430) (i32.const 0) ) @@ -8722,7 +8719,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 431) (i32.const 0) ) @@ -8756,7 +8753,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 439) (i32.const 0) ) @@ -8778,7 +8775,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 443) (i32.const 0) ) @@ -8803,7 +8800,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 446) (i32.const 0) ) @@ -8825,7 +8822,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 449) (i32.const 0) ) @@ -8847,7 +8844,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 457) (i32.const 0) ) @@ -8864,7 +8861,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 458) (i32.const 0) ) @@ -8886,7 +8883,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 460) (i32.const 0) ) @@ -8928,7 +8925,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 473) (i32.const 0) ) @@ -8945,7 +8942,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 474) (i32.const 0) ) @@ -8979,7 +8976,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 482) (i32.const 0) ) @@ -9001,7 +8998,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 486) (i32.const 0) ) @@ -9026,7 +9023,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 489) (i32.const 0) ) @@ -9048,7 +9045,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 492) (i32.const 0) ) @@ -9070,7 +9067,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 500) (i32.const 0) ) @@ -9087,7 +9084,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 501) (i32.const 0) ) @@ -9109,7 +9106,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 503) (i32.const 0) ) @@ -9151,7 +9148,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 516) (i32.const 0) ) @@ -9165,7 +9162,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 517) (i32.const 0) ) @@ -9242,14 +9239,14 @@ (i32.eqz (call $std/array/isArraysEqual (get_global $std/array/reversed1) - (i32.const 456) + (i32.const 464) (i32.const 0) ) ) (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 631) (i32.const 0) ) @@ -9263,14 +9260,14 @@ (i32.eqz (call $std/array/isArraysEqual (get_global $std/array/reversed2) - (i32.const 480) + (i32.const 488) (i32.const 0) ) ) (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 634) (i32.const 0) ) @@ -9291,7 +9288,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 637) (i32.const 0) ) @@ -9312,7 +9309,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 640) (i32.const 0) ) @@ -9333,7 +9330,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 643) (i32.const 0) ) @@ -9354,7 +9351,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 646) (i32.const 0) ) @@ -9375,7 +9372,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 649) (i32.const 0) ) @@ -9444,7 +9441,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 678) (i32.const 0) ) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 002811a9..7f30806a 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -35,12 +35,12 @@ (global $~lib/math/random_seeded (mut i32) (i32.const 0)) (global $~lib/math/random_state0 (mut i64) (i64.const 0)) (global $~lib/math/random_state1 (mut i64) (i64.const 0)) - (global $std/array/charset i32 (i32.const 152)) + (global $std/array/charset i32 (i32.const 156)) (global $std/array/reversed0 (mut i32) (i32.const 0)) - (global $std/array/reversed1 (mut i32) (i32.const 328)) - (global $std/array/reversed2 (mut i32) (i32.const 352)) - (global $std/array/reversed4 (mut i32) (i32.const 376)) - (global $std/array/expected4 (mut i32) (i32.const 416)) + (global $std/array/reversed1 (mut i32) (i32.const 336)) + (global $std/array/reversed2 (mut i32) (i32.const 360)) + (global $std/array/reversed4 (mut i32) (i32.const 384)) + (global $std/array/expected4 (mut i32) (i32.const 424)) (global $std/array/reversed64 (mut i32) (i32.const 0)) (global $std/array/reversed128 (mut i32) (i32.const 0)) (global $std/array/reversed1024 (mut i32) (i32.const 0)) @@ -50,37 +50,37 @@ (global $std/array/randomized257 (mut i32) (i32.const 0)) (global $std/array/reversedNested512 (mut i32) (i32.const 0)) (global $std/array/reversedElements512 (mut i32) (i32.const 0)) - (global $std/array/randomStringsActual (mut i32) (i32.const 544)) - (global $std/array/randomStringsExpected (mut i32) (i32.const 616)) + (global $std/array/randomStringsActual (mut i32) (i32.const 552)) + (global $std/array/randomStringsExpected (mut i32) (i32.const 624)) (global $~lib/internal/string/HEADER_SIZE i32 (i32.const 4)) - (global $~lib/internal/string/EMPTY i32 (i32.const 536)) + (global $~lib/internal/string/EMPTY i32 (i32.const 544)) (global $~lib/internal/string/MAX_LENGTH i32 (i32.const 536870910)) (global $std/array/randomStrings400 (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 784)) + (global $HEAP_BASE i32 (i32.const 792)) (table 51 51 anyfunc) (elem (i32.const 0) $start~anonymous|0 $start~anonymous|1 $start~anonymous|2 $start~anonymous|3 $start~anonymous|4 $start~anonymous|5 $start~anonymous|6 $start~anonymous|7 $start~anonymous|8 $start~anonymous|9 $start~anonymous|10 $start~anonymous|11 $start~anonymous|12 $start~anonymous|13 $start~anonymous|14 $start~anonymous|15 $start~anonymous|16 $start~anonymous|17 $start~anonymous|18 $start~anonymous|19 $start~anonymous|20 $start~anonymous|21 $start~anonymous|22 $start~anonymous|23 $start~anonymous|24 $start~anonymous|25 $start~anonymous|26 $start~anonymous|27 $start~anonymous|28 $start~anonymous|29 $start~anonymous|30 $start~anonymous|31 $start~anonymous|32 $start~anonymous|33 $start~anonymous|34 $start~anonymous|35 $start~anonymous|36 $start~anonymous|37 $start~anonymous|38 $start~anonymous|39 $start~anonymous|40 $start~anonymous|41 $std/array/assertSortedDefault~anonymous|42 $start~anonymous|43 $start~anonymous|44 $start~anonymous|45 $start~anonymous|46 $start~anonymous|47 $start~anonymous|48 $start~anonymous|49 $start~anonymous|50) (memory $0 1) - (data (i32.const 4) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 36) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") - (data (i32.const 96) "\0c\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 124) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") - (data (i32.const 152) "V\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?\00") - (data (i32.const 328) "P\01\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00") - (data (i32.const 352) "h\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00\02\00\00\00\01\00\00\00") - (data (i32.const 376) "\80\01\00\00\04\00\00\00\10\00\00\00\00\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 416) "\a8\01\00\00\04\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 456) "\d0\01\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00") - (data (i32.const 480) "\e8\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 504) "\01\00\00\00a\00") - (data (i32.const 512) "\01\00\00\00b\00") - (data (i32.const 520) "\02\00\00\00a\00b\00") - (data (i32.const 528) "\02\00\00\00b\00a\00") - (data (i32.const 536) "\00\00\00\00") - (data (i32.const 544) "(\02\00\00\07\00\00\00\1c\00\00\00\00\00\00\00\f8\01\00\00\00\02\00\00\f8\01\00\00\08\02\00\00\10\02\00\00\18\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 616) "p\02\00\00\07\00\00\00\1c\00\00\00\00\00\00\00\18\02\00\00\f8\01\00\00\f8\01\00\00\08\02\00\00\00\02\00\00\10\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 688) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 720) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 772) "\04\00\00\00n\00u\00l\00l\00") + (data (i32.const 8) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 40) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") + (data (i32.const 100) "\0c\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 128) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") + (data (i32.const 156) "V\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?\00") + (data (i32.const 336) "X\01\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 360) "p\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00\02\00\00\00\01\00\00\00") + (data (i32.const 384) "\88\01\00\00\04\00\00\00\10\00\00\00\00\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 424) "\b0\01\00\00\04\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 464) "\d8\01\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 488) "\f0\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00") + (data (i32.const 512) "\01\00\00\00a\00") + (data (i32.const 520) "\01\00\00\00b\00") + (data (i32.const 528) "\02\00\00\00a\00b\00") + (data (i32.const 536) "\02\00\00\00b\00a\00") + (data (i32.const 544) "\00\00\00\00") + (data (i32.const 552) "0\02\00\00\07\00\00\00\1c\00\00\00\00\00\00\00\00\02\00\00\08\02\00\00\00\02\00\00\10\02\00\00\18\02\00\00 \02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 624) "x\02\00\00\07\00\00\00\1c\00\00\00\00\00\00\00 \02\00\00\00\02\00\00\00\02\00\00\10\02\00\00\08\02\00\00\18\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 696) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 728) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 780) "\04\00\00\00n\00u\00l\00l\00") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) @@ -225,7 +225,7 @@ (block (call $abort (i32.const 0) - (i32.const 36) + (i32.const 40) (i32.const 22) (i32.const 2) ) @@ -612,7 +612,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 39) ) @@ -2839,7 +2839,7 @@ (block (call $abort (i32.const 0) - (i32.const 36) + (i32.const 40) (i32.const 32) (i32.const 4) ) @@ -2929,7 +2929,7 @@ (block (call $abort (i32.const 0) - (i32.const 36) + (i32.const 40) (i32.const 56) (i32.const 4) ) @@ -2990,7 +2990,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 143) (i32.const 42) ) @@ -3085,7 +3085,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 154) (i32.const 20) ) @@ -3172,7 +3172,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 244) (i32.const 42) ) @@ -3264,7 +3264,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 215) (i32.const 20) ) @@ -3791,7 +3791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 41) ) @@ -4369,7 +4369,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 39) ) @@ -5377,7 +5377,7 @@ (block (call $abort (i32.const 0) - (i32.const 124) + (i32.const 128) (i32.const 1000) (i32.const 4) ) @@ -5459,7 +5459,7 @@ (block (call $abort (i32.const 0) - (i32.const 124) + (i32.const 128) (i32.const 1007) (i32.const 24) ) @@ -6540,7 +6540,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 605) (i32.const 2) ) @@ -6663,7 +6663,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 39) ) @@ -6760,7 +6760,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 41) ) @@ -7280,7 +7280,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 605) (i32.const 2) ) @@ -7301,7 +7301,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 39) ) @@ -7422,7 +7422,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 41) ) @@ -7930,7 +7930,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 605) (i32.const 2) ) @@ -8609,7 +8609,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 605) (i32.const 2) ) @@ -8773,7 +8773,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 39) ) @@ -8855,7 +8855,7 @@ (block (call $abort (i32.const 0) - (i32.const 720) + (i32.const 728) (i32.const 20) (i32.const 2) ) @@ -8893,7 +8893,7 @@ (block (call $abort (i32.const 0) - (i32.const 688) + (i32.const 696) (i32.const 18) (i32.const 4) ) @@ -8908,7 +8908,7 @@ ) ) (return - (i32.const 536) + (i32.const 544) ) ) (set_local $2 @@ -8947,7 +8947,7 @@ (block (call $abort (i32.const 0) - (i32.const 688) + (i32.const 696) (i32.const 74) (i32.const 4) ) @@ -8960,7 +8960,7 @@ (i32.const 0) ) (set_local $1 - (i32.const 772) + (i32.const 780) ) ) (set_local $2 @@ -8985,7 +8985,7 @@ (i32.const 0) ) (return - (i32.const 536) + (i32.const 544) ) ) (set_local $5 @@ -9037,7 +9037,7 @@ (get_local $0) ) (set_local $0 - (i32.const 772) + (i32.const 780) ) ) (return @@ -9052,7 +9052,7 @@ (local $2 i32) (local $3 f64) (set_local $1 - (i32.const 536) + (i32.const 544) ) (block $break|0 (set_local $2 @@ -9069,7 +9069,7 @@ (call $~lib/string/String.__concat (get_local $1) (call $~lib/string/String#charAt - (i32.const 152) + (i32.const 156) (i32.trunc_s/f64 (block $~lib/math/NativeMath.floor|inlined.0 (result f64) (set_local $3 @@ -9077,7 +9077,7 @@ (call $~lib/math/NativeMath.random) (f64.convert_s/i32 (i32.load - (i32.const 152) + (i32.const 156) ) ) ) @@ -9137,7 +9137,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 41) ) @@ -9277,7 +9277,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 17) (i32.const 0) ) @@ -9296,7 +9296,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 18) (i32.const 0) ) @@ -9322,7 +9322,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 22) (i32.const 0) ) @@ -9341,7 +9341,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 23) (i32.const 0) ) @@ -9360,7 +9360,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 24) (i32.const 0) ) @@ -9382,7 +9382,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 28) (i32.const 0) ) @@ -9401,7 +9401,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 29) (i32.const 0) ) @@ -9420,7 +9420,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 30) (i32.const 0) ) @@ -9445,7 +9445,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 34) (i32.const 0) ) @@ -9464,7 +9464,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 35) (i32.const 0) ) @@ -9484,7 +9484,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 36) (i32.const 0) ) @@ -9509,7 +9509,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 40) (i32.const 0) ) @@ -9528,7 +9528,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 41) (i32.const 0) ) @@ -9548,7 +9548,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 42) (i32.const 0) ) @@ -9568,7 +9568,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 43) (i32.const 0) ) @@ -9593,7 +9593,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 47) (i32.const 0) ) @@ -9612,7 +9612,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 48) (i32.const 0) ) @@ -9632,7 +9632,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 49) (i32.const 0) ) @@ -9652,7 +9652,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 50) (i32.const 0) ) @@ -9672,7 +9672,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 51) (i32.const 0) ) @@ -9697,7 +9697,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 57) (i32.const 0) ) @@ -9716,7 +9716,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 58) (i32.const 0) ) @@ -9736,7 +9736,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 59) (i32.const 0) ) @@ -9756,7 +9756,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 60) (i32.const 0) ) @@ -9776,7 +9776,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 61) (i32.const 0) ) @@ -9796,7 +9796,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 62) (i32.const 0) ) @@ -9821,7 +9821,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 66) (i32.const 0) ) @@ -9840,7 +9840,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 67) (i32.const 0) ) @@ -9860,7 +9860,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 68) (i32.const 0) ) @@ -9880,7 +9880,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 69) (i32.const 0) ) @@ -9900,7 +9900,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 70) (i32.const 0) ) @@ -9920,7 +9920,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 71) (i32.const 0) ) @@ -9940,7 +9940,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 72) (i32.const 0) ) @@ -9962,7 +9962,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 78) (i32.const 0) ) @@ -9981,7 +9981,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 79) (i32.const 0) ) @@ -10000,7 +10000,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 80) (i32.const 0) ) @@ -10020,7 +10020,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 81) (i32.const 0) ) @@ -10040,7 +10040,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 82) (i32.const 0) ) @@ -10060,7 +10060,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 83) (i32.const 0) ) @@ -10080,7 +10080,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 84) (i32.const 0) ) @@ -10102,7 +10102,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 88) (i32.const 0) ) @@ -10121,7 +10121,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 89) (i32.const 0) ) @@ -10140,7 +10140,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 90) (i32.const 0) ) @@ -10160,7 +10160,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 91) (i32.const 0) ) @@ -10180,7 +10180,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 92) (i32.const 0) ) @@ -10200,7 +10200,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 93) (i32.const 0) ) @@ -10224,7 +10224,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 99) (i32.const 0) ) @@ -10243,7 +10243,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 100) (i32.const 0) ) @@ -10263,7 +10263,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 101) (i32.const 0) ) @@ -10283,7 +10283,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 102) (i32.const 0) ) @@ -10303,7 +10303,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 103) (i32.const 0) ) @@ -10339,7 +10339,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 112) (i32.const 0) ) @@ -10363,7 +10363,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 116) (i32.const 0) ) @@ -10387,7 +10387,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 120) (i32.const 0) ) @@ -10411,7 +10411,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 124) (i32.const 0) ) @@ -10435,7 +10435,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 128) (i32.const 0) ) @@ -10459,7 +10459,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 132) (i32.const 0) ) @@ -10483,7 +10483,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 136) (i32.const 0) ) @@ -10507,7 +10507,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 140) (i32.const 0) ) @@ -10531,7 +10531,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 144) (i32.const 0) ) @@ -10555,7 +10555,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 148) (i32.const 0) ) @@ -10579,7 +10579,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 154) (i32.const 0) ) @@ -10603,7 +10603,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 158) (i32.const 0) ) @@ -10627,7 +10627,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 162) (i32.const 0) ) @@ -10651,7 +10651,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 166) (i32.const 0) ) @@ -10675,7 +10675,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 170) (i32.const 0) ) @@ -10699,7 +10699,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 174) (i32.const 0) ) @@ -10723,7 +10723,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 178) (i32.const 0) ) @@ -10747,7 +10747,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 182) (i32.const 0) ) @@ -10771,7 +10771,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 186) (i32.const 0) ) @@ -10795,7 +10795,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 190) (i32.const 0) ) @@ -10819,7 +10819,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 194) (i32.const 0) ) @@ -10838,7 +10838,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 195) (i32.const 0) ) @@ -10858,7 +10858,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 196) (i32.const 0) ) @@ -10878,7 +10878,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 197) (i32.const 0) ) @@ -10921,7 +10921,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 207) (i32.const 0) ) @@ -10944,7 +10944,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 210) (i32.const 0) ) @@ -10967,7 +10967,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 213) (i32.const 0) ) @@ -10990,7 +10990,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 221) (i32.const 0) ) @@ -11009,7 +11009,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 222) (i32.const 0) ) @@ -11032,7 +11032,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 224) (i32.const 0) ) @@ -11075,7 +11075,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 237) (i32.const 0) ) @@ -11094,7 +11094,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 238) (i32.const 0) ) @@ -11129,7 +11129,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 246) (i32.const 0) ) @@ -11152,7 +11152,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 249) (i32.const 0) ) @@ -11175,7 +11175,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 257) (i32.const 0) ) @@ -11194,7 +11194,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 258) (i32.const 0) ) @@ -11217,7 +11217,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 260) (i32.const 0) ) @@ -11260,7 +11260,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 273) (i32.const 0) ) @@ -11279,7 +11279,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 274) (i32.const 0) ) @@ -11314,7 +11314,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 282) (i32.const 0) ) @@ -11337,7 +11337,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 285) (i32.const 0) ) @@ -11360,7 +11360,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 293) (i32.const 0) ) @@ -11379,7 +11379,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 294) (i32.const 0) ) @@ -11402,7 +11402,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 296) (i32.const 0) ) @@ -11445,7 +11445,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 309) (i32.const 0) ) @@ -11464,7 +11464,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 310) (i32.const 0) ) @@ -11500,7 +11500,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 319) (i32.const 0) ) @@ -11524,7 +11524,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 328) (i32.const 0) ) @@ -11543,7 +11543,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 329) (i32.const 0) ) @@ -11567,7 +11567,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 332) (i32.const 0) ) @@ -11611,7 +11611,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 346) (i32.const 0) ) @@ -11630,7 +11630,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 347) (i32.const 0) ) @@ -11667,7 +11667,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 356) (i32.const 0) ) @@ -11692,7 +11692,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 357) (i32.const 0) ) @@ -11718,7 +11718,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 366) (i32.const 0) ) @@ -11737,7 +11737,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 367) (i32.const 0) ) @@ -11763,7 +11763,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 374) (i32.const 0) ) @@ -11809,7 +11809,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 389) (i32.const 0) ) @@ -11828,7 +11828,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 390) (i32.const 0) ) @@ -11865,7 +11865,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 398) (i32.const 0) ) @@ -11891,7 +11891,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 407) (i32.const 0) ) @@ -11910,7 +11910,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 408) (i32.const 0) ) @@ -11936,7 +11936,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 415) (i32.const 0) ) @@ -11982,7 +11982,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 430) (i32.const 0) ) @@ -12001,7 +12001,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 431) (i32.const 0) ) @@ -12037,7 +12037,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 439) (i32.const 0) ) @@ -12061,7 +12061,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 443) (i32.const 0) ) @@ -12088,7 +12088,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 446) (i32.const 0) ) @@ -12115,7 +12115,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 449) (i32.const 0) ) @@ -12139,7 +12139,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 457) (i32.const 0) ) @@ -12158,7 +12158,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 458) (i32.const 0) ) @@ -12182,7 +12182,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 460) (i32.const 0) ) @@ -12226,7 +12226,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 473) (i32.const 0) ) @@ -12245,7 +12245,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 474) (i32.const 0) ) @@ -12281,7 +12281,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 482) (i32.const 0) ) @@ -12305,7 +12305,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 486) (i32.const 0) ) @@ -12332,7 +12332,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 489) (i32.const 0) ) @@ -12359,7 +12359,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 492) (i32.const 0) ) @@ -12383,7 +12383,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 500) (i32.const 0) ) @@ -12402,7 +12402,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 501) (i32.const 0) ) @@ -12426,7 +12426,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 503) (i32.const 0) ) @@ -12470,7 +12470,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 516) (i32.const 0) ) @@ -12489,7 +12489,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 517) (i32.const 0) ) @@ -12566,14 +12566,14 @@ (i32.eqz (call $std/array/isArraysEqual (get_global $std/array/reversed1) - (i32.const 456) + (i32.const 464) (i32.const 0) ) ) (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 631) (i32.const 0) ) @@ -12587,14 +12587,14 @@ (i32.eqz (call $std/array/isArraysEqual (get_global $std/array/reversed2) - (i32.const 480) + (i32.const 488) (i32.const 0) ) ) (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 634) (i32.const 0) ) @@ -12615,7 +12615,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 637) (i32.const 0) ) @@ -12636,7 +12636,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 640) (i32.const 0) ) @@ -12657,7 +12657,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 643) (i32.const 0) ) @@ -12678,7 +12678,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 646) (i32.const 0) ) @@ -12699,7 +12699,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 649) (i32.const 0) ) @@ -12768,7 +12768,7 @@ (block (call $abort (i32.const 0) - (i32.const 96) + (i32.const 100) (i32.const 678) (i32.const 0) ) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index cdb8d111..99128f0f 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -11,11 +11,11 @@ (global $std/arraybuffer/buffer (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) (global $std/arraybuffer/sliced (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 148)) + (global $HEAP_BASE i32 (i32.const 152)) (memory $0 1) - (data (i32.const 4) "\13\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") - (data (i32.const 48) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") - (data (i32.const 108) "\12\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 8) "\13\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 52) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 112) "\12\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $~lib/internal/arraybuffer/computeSize (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -49,7 +49,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -64,7 +64,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -74,14 +74,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -93,7 +93,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -112,7 +112,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) @@ -131,7 +131,7 @@ (block (call $abort (i32.const 0) - (i32.const 48) + (i32.const 52) (i32.const 22) (i32.const 2) ) @@ -496,7 +496,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 40) ) @@ -2384,7 +2384,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (set_local $5 + (set_local $3 (i32.load (get_local $0) ) @@ -2396,39 +2396,37 @@ (i32.const 0) ) (select - (tee_local $3 + (tee_local $5 (i32.add - (get_local $5) + (get_local $3) (get_local $1) ) ) (i32.const 0) (i32.gt_s - (get_local $3) + (get_local $5) (get_local $4) ) ) (select - (tee_local $3 - (get_local $1) - ) + (get_local $1) (tee_local $4 - (get_local $5) + (get_local $3) ) (i32.lt_s + (get_local $1) (get_local $3) - (get_local $4) ) ) ) ) (call $~lib/memory/move_memory (i32.add - (tee_local $3 + (tee_local $2 (call $~lib/internal/arraybuffer/allocUnsafe - (tee_local $2 + (tee_local $3 (select - (tee_local $3 + (tee_local $5 (i32.sub (tee_local $2 (if (result i32) @@ -2437,9 +2435,9 @@ (i32.const 0) ) (select - (tee_local $3 + (tee_local $5 (i32.add - (get_local $5) + (get_local $3) (get_local $2) ) ) @@ -2447,20 +2445,18 @@ (i32.const 0) ) (i32.gt_s - (get_local $3) + (get_local $5) (get_local $4) ) ) (select - (tee_local $3 - (get_local $2) - ) + (get_local $2) (tee_local $4 - (get_local $5) + (get_local $3) ) (i32.lt_s + (get_local $2) (get_local $3) - (get_local $4) ) ) ) @@ -2472,7 +2468,7 @@ (i32.const 0) ) (i32.gt_s - (get_local $3) + (get_local $5) (get_local $4) ) ) @@ -2488,9 +2484,9 @@ ) (get_local $1) ) - (get_local $2) + (get_local $3) ) - (get_local $3) + (get_local $2) ) (func $~lib/arraybuffer/ArrayBuffer#slice|trampoline (; 9 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $2of2 @@ -2546,7 +2542,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 5) (i32.const 0) ) @@ -2575,7 +2571,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 9) (i32.const 0) ) @@ -2590,7 +2586,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 10) (i32.const 0) ) @@ -2619,7 +2615,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 14) (i32.const 0) ) @@ -2648,7 +2644,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 18) (i32.const 0) ) @@ -2672,7 +2668,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 22) (i32.const 0) ) @@ -2696,7 +2692,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 26) (i32.const 0) ) @@ -2720,7 +2716,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 30) (i32.const 0) ) @@ -2744,7 +2740,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 34) (i32.const 0) ) @@ -2770,7 +2766,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 38) (i32.const 0) ) @@ -2784,7 +2780,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 39) (i32.const 0) ) diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index bd36776b..99c3005b 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -17,11 +17,11 @@ (global $std/arraybuffer/buffer (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) (global $std/arraybuffer/sliced (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 148)) + (global $HEAP_BASE i32 (i32.const 152)) (memory $0 1) - (data (i32.const 4) "\13\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") - (data (i32.const 48) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") - (data (i32.const 108) "\12\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") + (data (i32.const 8) "\13\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") + (data (i32.const 52) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") + (data (i32.const 112) "\12\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $~lib/internal/arraybuffer/computeSize (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -165,7 +165,7 @@ (block (call $abort (i32.const 0) - (i32.const 48) + (i32.const 52) (i32.const 22) (i32.const 2) ) @@ -549,7 +549,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 40) ) @@ -2877,7 +2877,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 5) (i32.const 0) ) @@ -2908,7 +2908,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 9) (i32.const 0) ) @@ -2925,7 +2925,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 10) (i32.const 0) ) @@ -2956,7 +2956,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 14) (i32.const 0) ) @@ -2987,7 +2987,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 18) (i32.const 0) ) @@ -3013,7 +3013,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 22) (i32.const 0) ) @@ -3039,7 +3039,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 26) (i32.const 0) ) @@ -3065,7 +3065,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 30) (i32.const 0) ) @@ -3091,7 +3091,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 34) (i32.const 0) ) @@ -3122,7 +3122,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 38) (i32.const 0) ) @@ -3139,7 +3139,7 @@ (block (call $abort (i32.const 0) - (i32.const 108) + (i32.const 112) (i32.const 39) (i32.const 0) ) diff --git a/tests/compiler/std/constructor.optimized.wat b/tests/compiler/std/constructor.optimized.wat index bfac1de0..b54522f5 100644 --- a/tests/compiler/std/constructor.optimized.wat +++ b/tests/compiler/std/constructor.optimized.wat @@ -14,7 +14,7 @@ (global $std/constructor/ctorConditionallyReturns (mut i32) (i32.const 0)) (global $std/constructor/ctorAllocates (mut i32) (i32.const 0)) (global $std/constructor/ctorConditionallyAllocates (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) @@ -35,7 +35,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -50,7 +50,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -60,14 +60,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -79,7 +79,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -98,7 +98,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) diff --git a/tests/compiler/std/constructor.untouched.wat b/tests/compiler/std/constructor.untouched.wat index eb80a586..dd0e4098 100644 --- a/tests/compiler/std/constructor.untouched.wat +++ b/tests/compiler/std/constructor.untouched.wat @@ -18,7 +18,7 @@ (global $std/constructor/ctorConditionallyReturns (mut i32) (i32.const 0)) (global $std/constructor/ctorAllocates (mut i32) (i32.const 0)) (global $std/constructor/ctorConditionallyAllocates (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/std/hash.optimized.wat b/tests/compiler/std/hash.optimized.wat index 484a3921..c2f7bedb 100644 --- a/tests/compiler/std/hash.optimized.wat +++ b/tests/compiler/std/hash.optimized.wat @@ -5,9 +5,9 @@ (type $v (func)) (import "env" "logi" (func $std/hash/logi (param i32))) (memory $0 1) - (data (i32.const 8) "\01\00\00\00a") - (data (i32.const 16) "\02\00\00\00a\00b") - (data (i32.const 24) "\03\00\00\00a\00b\00c") + (data (i32.const 12) "\01\00\00\00a") + (data (i32.const 20) "\02\00\00\00a\00b") + (data (i32.const 28) "\03\00\00\00a\00b\00c") (export "memory" (memory $0)) (start $start) (func $~lib/internal/hash/hashStr (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -208,11 +208,6 @@ (i32.const 0) ) ) - (call $std/hash/logi - (call $~lib/internal/hash/hashStr - (i32.const 4) - ) - ) (call $std/hash/logi (call $~lib/internal/hash/hashStr (i32.const 8) @@ -220,12 +215,17 @@ ) (call $std/hash/logi (call $~lib/internal/hash/hashStr - (i32.const 16) + (i32.const 12) ) ) (call $std/hash/logi (call $~lib/internal/hash/hashStr - (i32.const 24) + (i32.const 20) + ) + ) + (call $std/hash/logi + (call $~lib/internal/hash/hashStr + (i32.const 28) ) ) (call $std/hash/logi diff --git a/tests/compiler/std/hash.untouched.wat b/tests/compiler/std/hash.untouched.wat index 62d3c497..a37ff023 100644 --- a/tests/compiler/std/hash.untouched.wat +++ b/tests/compiler/std/hash.untouched.wat @@ -10,17 +10,17 @@ (global $~lib/internal/allocator/MAX_SIZE_32 i32 (i32.const 1073741824)) (global $~lib/internal/string/HEADER_SIZE i32 (i32.const 4)) (global $~lib/internal/string/MAX_LENGTH i32 (i32.const 536870910)) - (global $~lib/internal/string/EMPTY i32 (i32.const 4)) + (global $~lib/internal/string/EMPTY i32 (i32.const 8)) (global $~lib/internal/hash/FNV_OFFSET i32 (i32.const -2128831035)) (global $~lib/internal/hash/FNV_PRIME i32 (i32.const 16777619)) (global $Infinity f64 (f64.const inf)) (global $NaN f64 (f64.const nan:0x8000000000000)) - (global $HEAP_BASE i32 (i32.const 36)) + (global $HEAP_BASE i32 (i32.const 40)) (memory $0 1) - (data (i32.const 4) "\00\00\00\00") - (data (i32.const 8) "\01\00\00\00a\00") - (data (i32.const 16) "\02\00\00\00a\00b\00") - (data (i32.const 24) "\03\00\00\00a\00b\00c\00") + (data (i32.const 8) "\00\00\00\00") + (data (i32.const 12) "\01\00\00\00a\00") + (data (i32.const 20) "\02\00\00\00a\00b\00") + (data (i32.const 28) "\03\00\00\00a\00b\00c\00") (export "memory" (memory $0)) (start $start) (func $~lib/internal/hash/hashStr (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -294,7 +294,7 @@ (call $std/hash/logi (block $~lib/internal/hash/hash|inlined.1 (result i32) (set_local $0 - (i32.const 4) + (i32.const 8) ) (br $~lib/internal/hash/hash|inlined.1 (call $~lib/internal/hash/hashStr @@ -306,7 +306,7 @@ (call $std/hash/logi (block $~lib/internal/hash/hash|inlined.2 (result i32) (set_local $0 - (i32.const 8) + (i32.const 12) ) (br $~lib/internal/hash/hash|inlined.2 (call $~lib/internal/hash/hashStr @@ -318,7 +318,7 @@ (call $std/hash/logi (block $~lib/internal/hash/hash|inlined.3 (result i32) (set_local $0 - (i32.const 16) + (i32.const 20) ) (br $~lib/internal/hash/hash|inlined.3 (call $~lib/internal/hash/hashStr @@ -330,7 +330,7 @@ (call $std/hash/logi (block $~lib/internal/hash/hash|inlined.4 (result i32) (set_local $0 - (i32.const 24) + (i32.const 28) ) (br $~lib/internal/hash/hash|inlined.4 (call $~lib/internal/hash/hashStr diff --git a/tests/compiler/std/libm.optimized.wat b/tests/compiler/std/libm.optimized.wat index fe66014b..14cb9a67 100644 --- a/tests/compiler/std/libm.optimized.wat +++ b/tests/compiler/std/libm.optimized.wat @@ -1809,7 +1809,7 @@ (get_local $6) ) ) - (set_local $4 + (set_local $5 (i32.wrap/i64 (i64.shr_u (tee_local $6 @@ -1837,10 +1837,10 @@ ) ) ) - (set_local $5 + (set_local $4 (i32.or (i32.shr_u - (get_local $4) + (get_local $5) (i32.const 31) ) (i32.and @@ -1861,9 +1861,9 @@ (if (i32.eqz (i32.or - (tee_local $4 + (tee_local $5 (i32.and - (get_local $4) + (get_local $5) (i32.const 2147483647) ) ) @@ -1880,11 +1880,11 @@ (i32.or (i32.eqz (tee_local $2 - (get_local $5) + (get_local $4) ) ) (i32.eq - (get_local $2) + (get_local $4) (i32.const 1) ) ) @@ -1933,7 +1933,7 @@ ) (if (i32.eq - (get_local $4) + (get_local $5) (i32.const 2146435072) ) (block $break|1 @@ -1943,7 +1943,7 @@ (block $case0|1 (block $tablify|0 (br_table $case0|1 $case1|1 $case2|1 $case3|1 $tablify|0 - (get_local $5) + (get_local $4) ) ) (br $break|1) @@ -1971,7 +1971,7 @@ (block $case0|2 (block $tablify|00 (br_table $case0|2 $case1|2 $case2|2 $case3|2 $tablify|00 - (get_local $5) + (get_local $4) ) ) (br $break|2) @@ -2002,12 +2002,12 @@ (get_local $3) (i32.const 67108864) ) - (get_local $4) + (get_local $5) ) ) (get_local $2) (i32.eq - (get_local $4) + (get_local $5) (i32.const 2146435072) ) ) @@ -2017,13 +2017,13 @@ (if (result i32) (tee_local $2 (i32.and - (get_local $5) + (get_local $4) (i32.const 2) ) ) (i32.lt_u (i32.add - (get_local $4) + (get_local $5) (i32.const 67108864) ) (get_local $3) @@ -2048,7 +2048,7 @@ (block $case0|3 (block $tablify|01 (br_table $case0|3 $case1|3 $case2|3 $case3|3 $tablify|01 - (get_local $5) + (get_local $4) ) ) (br $break|3) @@ -2089,7 +2089,7 @@ (f64.const -1.5707963267948966) (f64.const 1.5707963267948966) (i32.and - (get_local $5) + (get_local $4) (i32.const 1) ) ) diff --git a/tests/compiler/std/libm.untouched.wat b/tests/compiler/std/libm.untouched.wat index 0d983e6e..967721b4 100644 --- a/tests/compiler/std/libm.untouched.wat +++ b/tests/compiler/std/libm.untouched.wat @@ -13,7 +13,7 @@ (global $std/libm/SQRT1_2 f64 (f64.const 0.7071067811865476)) (global $std/libm/SQRT2 f64 (f64.const 1.4142135623730951)) (global $NaN f64 (f64.const nan:0x8000000000000)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "E" (global $std/libm/E)) (export "LN10" (global $std/libm/LN10)) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 1b5ea20d..14dfa4ed 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -64,8 +64,8 @@ (global $~lib/math/random_state0 (mut i64) (i64.const 0)) (global $~lib/math/random_state1 (mut i64) (i64.const 0)) (memory $0 1) - (data (i32.const 4) "\0b\00\00\00s\00t\00d\00/\00m\00a\00t\00h\00.\00t\00s") - (data (i32.const 32) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") + (data (i32.const 8) "\0b\00\00\00s\00t\00d\00/\00m\00a\00t\00h\00.\00t\00s") + (data (i32.const 36) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $isNaN (; 31 ;) (type $Fi) (param $0 f64) (result i32) @@ -4047,7 +4047,7 @@ (get_local $6) ) ) - (set_local $4 + (set_local $5 (i32.wrap/i64 (i64.shr_u (tee_local $6 @@ -4075,10 +4075,10 @@ ) ) ) - (set_local $5 + (set_local $4 (i32.or (i32.shr_u - (get_local $4) + (get_local $5) (i32.const 31) ) (i32.and @@ -4099,9 +4099,9 @@ (if (i32.eqz (i32.or - (tee_local $4 + (tee_local $5 (i32.and - (get_local $4) + (get_local $5) (i32.const 2147483647) ) ) @@ -4118,11 +4118,11 @@ (i32.or (i32.eqz (tee_local $2 - (get_local $5) + (get_local $4) ) ) (i32.eq - (get_local $2) + (get_local $4) (i32.const 1) ) ) @@ -4171,7 +4171,7 @@ ) (if (i32.eq - (get_local $4) + (get_local $5) (i32.const 2146435072) ) (block $break|1 @@ -4181,7 +4181,7 @@ (block $case0|1 (block $tablify|0 (br_table $case0|1 $case1|1 $case2|1 $case3|1 $tablify|0 - (get_local $5) + (get_local $4) ) ) (br $break|1) @@ -4209,7 +4209,7 @@ (block $case0|2 (block $tablify|00 (br_table $case0|2 $case1|2 $case2|2 $case3|2 $tablify|00 - (get_local $5) + (get_local $4) ) ) (br $break|2) @@ -4240,12 +4240,12 @@ (get_local $3) (i32.const 67108864) ) - (get_local $4) + (get_local $5) ) ) (get_local $2) (i32.eq - (get_local $4) + (get_local $5) (i32.const 2146435072) ) ) @@ -4255,13 +4255,13 @@ (if (result i32) (tee_local $2 (i32.and - (get_local $5) + (get_local $4) (i32.const 2) ) ) (i32.lt_u (i32.add - (get_local $4) + (get_local $5) (i32.const 67108864) ) (get_local $3) @@ -4286,7 +4286,7 @@ (block $case0|3 (block $tablify|01 (br_table $case0|3 $case1|3 $case2|3 $case3|3 $tablify|01 - (get_local $5) + (get_local $4) ) ) (br $break|3) @@ -4327,7 +4327,7 @@ (f64.const -1.5707963267948966) (f64.const 1.5707963267948966) (i32.and - (get_local $5) + (get_local $4) (i32.const 1) ) ) @@ -4389,14 +4389,14 @@ ) ) ) - (set_local $3 + (set_local $4 (i32.reinterpret/f32 (get_local $0) ) ) (if (i32.eq - (tee_local $4 + (tee_local $5 (i32.reinterpret/f32 (get_local $1) ) @@ -4409,32 +4409,32 @@ ) ) ) - (set_local $5 + (set_local $3 (i32.or (i32.shr_u - (get_local $3) + (get_local $4) (i32.const 31) ) (i32.and (i32.shr_u - (get_local $4) + (get_local $5) (i32.const 30) ) (i32.const 2) ) ) ) - (set_local $4 + (set_local $5 (i32.and - (get_local $4) + (get_local $5) (i32.const 2147483647) ) ) (if (i32.eqz - (tee_local $3 + (tee_local $4 (i32.and - (get_local $3) + (get_local $4) (i32.const 2147483647) ) ) @@ -4447,11 +4447,11 @@ (i32.or (i32.eqz (tee_local $2 - (get_local $5) + (get_local $3) ) ) (i32.eq - (get_local $2) + (get_local $3) (i32.const 1) ) ) @@ -4487,17 +4487,17 @@ ) (br_if $folding-inner0 (i32.eqz - (get_local $4) + (get_local $5) ) ) (if (i32.eq - (get_local $4) + (get_local $5) (i32.const 2139095040) ) (if (i32.eq - (get_local $3) + (get_local $4) (i32.const 2139095040) ) (block $break|1 @@ -4507,7 +4507,7 @@ (block $case0|1 (block $tablify|0 (br_table $case0|1 $case1|1 $case2|1 $case3|1 $tablify|0 - (get_local $5) + (get_local $3) ) ) (br $break|1) @@ -4535,7 +4535,7 @@ (block $case0|2 (block $tablify|00 (br_table $case0|2 $case1|2 $case2|2 $case3|2 $tablify|00 - (get_local $5) + (get_local $3) ) ) (br $break|2) @@ -4563,15 +4563,15 @@ (tee_local $2 (i32.lt_u (i32.add - (get_local $4) + (get_local $5) (i32.const 218103808) ) - (get_local $3) + (get_local $4) ) ) (get_local $2) (i32.eq - (get_local $3) + (get_local $4) (i32.const 2139095040) ) ) @@ -4581,16 +4581,16 @@ (if (result i32) (tee_local $2 (i32.and - (get_local $5) + (get_local $3) (i32.const 2) ) ) (i32.lt_u (i32.add - (get_local $3) + (get_local $4) (i32.const 218103808) ) - (get_local $4) + (get_local $5) ) (get_local $2) ) @@ -4612,7 +4612,7 @@ (block $case0|3 (block $tablify|01 (br_table $case0|3 $case1|3 $case2|3 $case3|3 $tablify|01 - (get_local $5) + (get_local $3) ) ) (br $break|3) @@ -4653,7 +4653,7 @@ (f32.const -1.5707963705062866) (f32.const 1.5707963705062866) (i32.and - (get_local $5) + (get_local $3) (i32.const 1) ) ) @@ -11843,7 +11843,7 @@ (block (call $abort (i32.const 0) - (i32.const 32) + (i32.const 36) (i32.const 1000) (i32.const 4) ) @@ -11874,7 +11874,7 @@ (block (call $abort (i32.const 0) - (i32.const 32) + (i32.const 36) (i32.const 1007) (i32.const 24) ) @@ -13850,7 +13850,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 119) (i32.const 0) ) @@ -13869,7 +13869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 120) (i32.const 0) ) @@ -13888,7 +13888,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 121) (i32.const 0) ) @@ -13907,7 +13907,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 122) (i32.const 0) ) @@ -13926,7 +13926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 123) (i32.const 0) ) @@ -13945,7 +13945,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 124) (i32.const 0) ) @@ -13964,7 +13964,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 125) (i32.const 0) ) @@ -13985,7 +13985,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 127) (i32.const 0) ) @@ -14006,7 +14006,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 128) (i32.const 0) ) @@ -14027,7 +14027,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 129) (i32.const 0) ) @@ -14048,7 +14048,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 130) (i32.const 0) ) @@ -14069,7 +14069,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 131) (i32.const 0) ) @@ -14090,7 +14090,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 132) (i32.const 0) ) @@ -14111,7 +14111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 133) (i32.const 0) ) @@ -14131,7 +14131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 144) (i32.const 0) ) @@ -14151,7 +14151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 145) (i32.const 0) ) @@ -14171,7 +14171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 146) (i32.const 0) ) @@ -14191,7 +14191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 147) (i32.const 0) ) @@ -14211,7 +14211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 148) (i32.const 0) ) @@ -14231,7 +14231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 149) (i32.const 0) ) @@ -14251,7 +14251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 150) (i32.const 0) ) @@ -14271,7 +14271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 151) (i32.const 0) ) @@ -14291,7 +14291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 152) (i32.const 0) ) @@ -14311,7 +14311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 153) (i32.const 0) ) @@ -14331,7 +14331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 156) (i32.const 0) ) @@ -14351,7 +14351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 157) (i32.const 0) ) @@ -14371,7 +14371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 158) (i32.const 0) ) @@ -14391,7 +14391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 159) (i32.const 0) ) @@ -14411,7 +14411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 160) (i32.const 0) ) @@ -14431,7 +14431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 161) (i32.const 0) ) @@ -14451,7 +14451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 162) (i32.const 0) ) @@ -14471,7 +14471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 163) (i32.const 0) ) @@ -14491,7 +14491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 164) (i32.const 0) ) @@ -14511,7 +14511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 165) (i32.const 0) ) @@ -14531,7 +14531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 166) (i32.const 0) ) @@ -14551,7 +14551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 167) (i32.const 0) ) @@ -14571,7 +14571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 168) (i32.const 0) ) @@ -14591,7 +14591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 169) (i32.const 0) ) @@ -14611,7 +14611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 170) (i32.const 0) ) @@ -14631,7 +14631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 171) (i32.const 0) ) @@ -14651,7 +14651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 172) (i32.const 0) ) @@ -14671,7 +14671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 173) (i32.const 0) ) @@ -14691,7 +14691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 174) (i32.const 0) ) @@ -14711,7 +14711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 183) (i32.const 0) ) @@ -14731,7 +14731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 184) (i32.const 0) ) @@ -14751,7 +14751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 185) (i32.const 0) ) @@ -14771,7 +14771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 186) (i32.const 0) ) @@ -14791,7 +14791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 187) (i32.const 0) ) @@ -14811,7 +14811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 188) (i32.const 0) ) @@ -14831,7 +14831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 189) (i32.const 0) ) @@ -14851,7 +14851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 190) (i32.const 0) ) @@ -14871,7 +14871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 191) (i32.const 0) ) @@ -14891,7 +14891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 192) (i32.const 0) ) @@ -14911,7 +14911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 195) (i32.const 0) ) @@ -14931,7 +14931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 196) (i32.const 0) ) @@ -14951,7 +14951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 197) (i32.const 0) ) @@ -14971,7 +14971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 198) (i32.const 0) ) @@ -14991,7 +14991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 199) (i32.const 0) ) @@ -15011,7 +15011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 200) (i32.const 0) ) @@ -15031,7 +15031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 201) (i32.const 0) ) @@ -15051,7 +15051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 202) (i32.const 0) ) @@ -15071,7 +15071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 203) (i32.const 0) ) @@ -15091,7 +15091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 204) (i32.const 0) ) @@ -15111,7 +15111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 205) (i32.const 0) ) @@ -15131,7 +15131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 206) (i32.const 0) ) @@ -15151,7 +15151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 207) (i32.const 0) ) @@ -15171,7 +15171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 208) (i32.const 0) ) @@ -15191,7 +15191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 209) (i32.const 0) ) @@ -15211,7 +15211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 210) (i32.const 0) ) @@ -15231,7 +15231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 211) (i32.const 0) ) @@ -15251,7 +15251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 212) (i32.const 0) ) @@ -15271,7 +15271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 213) (i32.const 0) ) @@ -15290,7 +15290,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 225) (i32.const 0) ) @@ -15309,7 +15309,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 226) (i32.const 0) ) @@ -15328,7 +15328,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 227) (i32.const 0) ) @@ -15347,7 +15347,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 228) (i32.const 0) ) @@ -15366,7 +15366,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 229) (i32.const 0) ) @@ -15385,7 +15385,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 230) (i32.const 0) ) @@ -15404,7 +15404,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 231) (i32.const 0) ) @@ -15423,7 +15423,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 232) (i32.const 0) ) @@ -15442,7 +15442,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 233) (i32.const 0) ) @@ -15461,7 +15461,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 234) (i32.const 0) ) @@ -15480,7 +15480,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 237) (i32.const 0) ) @@ -15499,7 +15499,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 238) (i32.const 0) ) @@ -15518,7 +15518,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 239) (i32.const 0) ) @@ -15537,7 +15537,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 240) (i32.const 0) ) @@ -15556,7 +15556,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 241) (i32.const 0) ) @@ -15575,7 +15575,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 242) (i32.const 0) ) @@ -15594,7 +15594,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 243) (i32.const 0) ) @@ -15613,7 +15613,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 252) (i32.const 0) ) @@ -15632,7 +15632,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 253) (i32.const 0) ) @@ -15651,7 +15651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 254) (i32.const 0) ) @@ -15670,7 +15670,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 255) (i32.const 0) ) @@ -15689,7 +15689,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 256) (i32.const 0) ) @@ -15708,7 +15708,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 257) (i32.const 0) ) @@ -15727,7 +15727,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 258) (i32.const 0) ) @@ -15746,7 +15746,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 259) (i32.const 0) ) @@ -15765,7 +15765,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 260) (i32.const 0) ) @@ -15784,7 +15784,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 261) (i32.const 0) ) @@ -15803,7 +15803,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 264) (i32.const 0) ) @@ -15822,7 +15822,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 265) (i32.const 0) ) @@ -15841,7 +15841,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 266) (i32.const 0) ) @@ -15860,7 +15860,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 267) (i32.const 0) ) @@ -15879,7 +15879,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 268) (i32.const 0) ) @@ -15898,7 +15898,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 269) (i32.const 0) ) @@ -15917,7 +15917,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 270) (i32.const 0) ) @@ -15936,7 +15936,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 282) (i32.const 0) ) @@ -15955,7 +15955,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 283) (i32.const 0) ) @@ -15974,7 +15974,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 284) (i32.const 0) ) @@ -15993,7 +15993,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 285) (i32.const 0) ) @@ -16012,7 +16012,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 286) (i32.const 0) ) @@ -16031,7 +16031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 287) (i32.const 0) ) @@ -16050,7 +16050,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 288) (i32.const 0) ) @@ -16069,7 +16069,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 289) (i32.const 0) ) @@ -16088,7 +16088,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 290) (i32.const 0) ) @@ -16107,7 +16107,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 291) (i32.const 0) ) @@ -16126,7 +16126,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 294) (i32.const 0) ) @@ -16145,7 +16145,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 295) (i32.const 0) ) @@ -16164,7 +16164,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 296) (i32.const 0) ) @@ -16183,7 +16183,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 297) (i32.const 0) ) @@ -16202,7 +16202,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 298) (i32.const 0) ) @@ -16221,7 +16221,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 299) (i32.const 0) ) @@ -16240,7 +16240,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 300) (i32.const 0) ) @@ -16259,7 +16259,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 301) (i32.const 0) ) @@ -16278,7 +16278,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 302) (i32.const 0) ) @@ -16297,7 +16297,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 303) (i32.const 0) ) @@ -16316,7 +16316,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 312) (i32.const 0) ) @@ -16335,7 +16335,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 313) (i32.const 0) ) @@ -16354,7 +16354,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 314) (i32.const 0) ) @@ -16373,7 +16373,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 315) (i32.const 0) ) @@ -16392,7 +16392,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 316) (i32.const 0) ) @@ -16411,7 +16411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 317) (i32.const 0) ) @@ -16430,7 +16430,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 318) (i32.const 0) ) @@ -16449,7 +16449,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 319) (i32.const 0) ) @@ -16468,7 +16468,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 320) (i32.const 0) ) @@ -16487,7 +16487,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 321) (i32.const 0) ) @@ -16506,7 +16506,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 324) (i32.const 0) ) @@ -16525,7 +16525,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 325) (i32.const 0) ) @@ -16544,7 +16544,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 326) (i32.const 0) ) @@ -16563,7 +16563,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 327) (i32.const 0) ) @@ -16582,7 +16582,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 328) (i32.const 0) ) @@ -16601,7 +16601,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 329) (i32.const 0) ) @@ -16620,7 +16620,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 330) (i32.const 0) ) @@ -16639,7 +16639,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 331) (i32.const 0) ) @@ -16658,7 +16658,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 332) (i32.const 0) ) @@ -16677,7 +16677,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 333) (i32.const 0) ) @@ -16696,7 +16696,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 334) (i32.const 0) ) @@ -16715,7 +16715,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 346) (i32.const 0) ) @@ -16734,7 +16734,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 347) (i32.const 0) ) @@ -16753,7 +16753,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 348) (i32.const 0) ) @@ -16772,7 +16772,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 349) (i32.const 0) ) @@ -16791,7 +16791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 350) (i32.const 0) ) @@ -16810,7 +16810,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 351) (i32.const 0) ) @@ -16829,7 +16829,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 352) (i32.const 0) ) @@ -16848,7 +16848,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 353) (i32.const 0) ) @@ -16867,7 +16867,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 354) (i32.const 0) ) @@ -16886,7 +16886,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 355) (i32.const 0) ) @@ -16905,7 +16905,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 358) (i32.const 0) ) @@ -16924,7 +16924,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 359) (i32.const 0) ) @@ -16943,7 +16943,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 360) (i32.const 0) ) @@ -16962,7 +16962,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 361) (i32.const 0) ) @@ -16981,7 +16981,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 362) (i32.const 0) ) @@ -17000,7 +17000,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 363) (i32.const 0) ) @@ -17019,7 +17019,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 364) (i32.const 0) ) @@ -17038,7 +17038,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 380) (i32.const 0) ) @@ -17057,7 +17057,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 382) (i32.const 0) ) @@ -17076,7 +17076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 383) (i32.const 0) ) @@ -17095,7 +17095,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 392) (i32.const 0) ) @@ -17114,7 +17114,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 393) (i32.const 0) ) @@ -17133,7 +17133,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 394) (i32.const 0) ) @@ -17152,7 +17152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 395) (i32.const 0) ) @@ -17171,7 +17171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 396) (i32.const 0) ) @@ -17190,7 +17190,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 397) (i32.const 0) ) @@ -17209,7 +17209,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 398) (i32.const 0) ) @@ -17228,7 +17228,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 399) (i32.const 0) ) @@ -17247,7 +17247,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 400) (i32.const 0) ) @@ -17266,7 +17266,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 401) (i32.const 0) ) @@ -17285,7 +17285,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 404) (i32.const 0) ) @@ -17304,7 +17304,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 405) (i32.const 0) ) @@ -17323,7 +17323,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 406) (i32.const 0) ) @@ -17342,7 +17342,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 407) (i32.const 0) ) @@ -17361,7 +17361,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 408) (i32.const 0) ) @@ -17380,7 +17380,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 409) (i32.const 0) ) @@ -17399,7 +17399,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 410) (i32.const 0) ) @@ -17418,7 +17418,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 411) (i32.const 0) ) @@ -17437,7 +17437,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 423) (i32.const 0) ) @@ -17456,7 +17456,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 424) (i32.const 0) ) @@ -17475,7 +17475,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 425) (i32.const 0) ) @@ -17494,7 +17494,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 426) (i32.const 0) ) @@ -17513,7 +17513,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 427) (i32.const 0) ) @@ -17532,7 +17532,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 428) (i32.const 0) ) @@ -17551,7 +17551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 429) (i32.const 0) ) @@ -17570,7 +17570,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 430) (i32.const 0) ) @@ -17589,7 +17589,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 431) (i32.const 0) ) @@ -17608,7 +17608,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 432) (i32.const 0) ) @@ -17627,7 +17627,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 435) (i32.const 0) ) @@ -17646,7 +17646,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 436) (i32.const 0) ) @@ -17665,7 +17665,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 437) (i32.const 0) ) @@ -17684,7 +17684,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 438) (i32.const 0) ) @@ -17703,7 +17703,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 439) (i32.const 0) ) @@ -17722,7 +17722,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 440) (i32.const 0) ) @@ -17741,7 +17741,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 441) (i32.const 0) ) @@ -17760,7 +17760,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 442) (i32.const 0) ) @@ -17779,7 +17779,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 443) (i32.const 0) ) @@ -17798,7 +17798,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 444) (i32.const 0) ) @@ -17817,7 +17817,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 453) (i32.const 0) ) @@ -17836,7 +17836,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 454) (i32.const 0) ) @@ -17855,7 +17855,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 455) (i32.const 0) ) @@ -17874,7 +17874,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 456) (i32.const 0) ) @@ -17893,7 +17893,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 457) (i32.const 0) ) @@ -17912,7 +17912,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 458) (i32.const 0) ) @@ -17931,7 +17931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 459) (i32.const 0) ) @@ -17950,7 +17950,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 460) (i32.const 0) ) @@ -17969,7 +17969,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 461) (i32.const 0) ) @@ -17988,7 +17988,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 462) (i32.const 0) ) @@ -18007,7 +18007,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 465) (i32.const 0) ) @@ -18026,7 +18026,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 466) (i32.const 0) ) @@ -18045,7 +18045,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 467) (i32.const 0) ) @@ -18064,7 +18064,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 468) (i32.const 0) ) @@ -18083,7 +18083,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 469) (i32.const 0) ) @@ -18102,7 +18102,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 470) (i32.const 0) ) @@ -18121,7 +18121,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 471) (i32.const 0) ) @@ -18140,7 +18140,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 472) (i32.const 0) ) @@ -18159,7 +18159,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 473) (i32.const 0) ) @@ -18178,7 +18178,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 474) (i32.const 0) ) @@ -18197,7 +18197,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 486) (i32.const 0) ) @@ -18216,7 +18216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 487) (i32.const 0) ) @@ -18235,7 +18235,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 488) (i32.const 0) ) @@ -18254,7 +18254,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 489) (i32.const 0) ) @@ -18273,7 +18273,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 490) (i32.const 0) ) @@ -18292,7 +18292,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 491) (i32.const 0) ) @@ -18311,7 +18311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 492) (i32.const 0) ) @@ -18330,7 +18330,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 493) (i32.const 0) ) @@ -18349,7 +18349,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 494) (i32.const 0) ) @@ -18368,7 +18368,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 495) (i32.const 0) ) @@ -18387,7 +18387,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 498) (i32.const 0) ) @@ -18406,7 +18406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 499) (i32.const 0) ) @@ -18425,7 +18425,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 500) (i32.const 0) ) @@ -18444,7 +18444,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 501) (i32.const 0) ) @@ -18463,7 +18463,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 502) (i32.const 0) ) @@ -18482,7 +18482,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 531) (i32.const 0) ) @@ -18501,7 +18501,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 532) (i32.const 0) ) @@ -18520,7 +18520,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 533) (i32.const 0) ) @@ -18539,7 +18539,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 534) (i32.const 0) ) @@ -18558,7 +18558,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 535) (i32.const 0) ) @@ -18577,7 +18577,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 536) (i32.const 0) ) @@ -18596,7 +18596,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 537) (i32.const 0) ) @@ -18615,7 +18615,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 538) (i32.const 0) ) @@ -18634,7 +18634,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 539) (i32.const 0) ) @@ -18653,7 +18653,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 540) (i32.const 0) ) @@ -18672,7 +18672,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 543) (i32.const 0) ) @@ -18691,7 +18691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 544) (i32.const 0) ) @@ -18710,7 +18710,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 545) (i32.const 0) ) @@ -18729,7 +18729,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 546) (i32.const 0) ) @@ -18748,7 +18748,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 547) (i32.const 0) ) @@ -18767,7 +18767,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 559) (i32.const 0) ) @@ -18786,7 +18786,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 560) (i32.const 0) ) @@ -18805,7 +18805,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 561) (i32.const 0) ) @@ -18824,7 +18824,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 562) (i32.const 0) ) @@ -18843,7 +18843,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 563) (i32.const 0) ) @@ -18862,7 +18862,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 564) (i32.const 0) ) @@ -18881,7 +18881,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 565) (i32.const 0) ) @@ -18900,7 +18900,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 566) (i32.const 0) ) @@ -18919,7 +18919,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 567) (i32.const 0) ) @@ -18938,7 +18938,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 568) (i32.const 0) ) @@ -18957,7 +18957,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 571) (i32.const 0) ) @@ -18976,7 +18976,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 572) (i32.const 0) ) @@ -18995,7 +18995,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 573) (i32.const 0) ) @@ -19014,7 +19014,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 574) (i32.const 0) ) @@ -19033,7 +19033,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 575) (i32.const 0) ) @@ -19052,7 +19052,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 576) (i32.const 0) ) @@ -19071,7 +19071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 577) (i32.const 0) ) @@ -19090,7 +19090,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 578) (i32.const 0) ) @@ -19109,7 +19109,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 587) (i32.const 0) ) @@ -19128,7 +19128,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 588) (i32.const 0) ) @@ -19147,7 +19147,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 589) (i32.const 0) ) @@ -19166,7 +19166,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 590) (i32.const 0) ) @@ -19185,7 +19185,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 591) (i32.const 0) ) @@ -19204,7 +19204,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 592) (i32.const 0) ) @@ -19223,7 +19223,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 593) (i32.const 0) ) @@ -19242,7 +19242,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 594) (i32.const 0) ) @@ -19261,7 +19261,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 595) (i32.const 0) ) @@ -19280,7 +19280,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 596) (i32.const 0) ) @@ -19299,7 +19299,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 599) (i32.const 0) ) @@ -19318,7 +19318,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 600) (i32.const 0) ) @@ -19337,7 +19337,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 601) (i32.const 0) ) @@ -19356,7 +19356,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 602) (i32.const 0) ) @@ -19375,7 +19375,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 603) (i32.const 0) ) @@ -19394,7 +19394,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 604) (i32.const 0) ) @@ -19413,7 +19413,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 605) (i32.const 0) ) @@ -19432,7 +19432,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 617) (i32.const 0) ) @@ -19451,7 +19451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 618) (i32.const 0) ) @@ -19470,7 +19470,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 619) (i32.const 0) ) @@ -19489,7 +19489,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 620) (i32.const 0) ) @@ -19508,7 +19508,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 621) (i32.const 0) ) @@ -19527,7 +19527,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 622) (i32.const 0) ) @@ -19546,7 +19546,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 623) (i32.const 0) ) @@ -19565,7 +19565,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 624) (i32.const 0) ) @@ -19584,7 +19584,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 625) (i32.const 0) ) @@ -19603,7 +19603,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 626) (i32.const 0) ) @@ -19622,7 +19622,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 629) (i32.const 0) ) @@ -19641,7 +19641,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 630) (i32.const 0) ) @@ -19660,7 +19660,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 631) (i32.const 0) ) @@ -19679,7 +19679,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 632) (i32.const 0) ) @@ -19698,7 +19698,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 633) (i32.const 0) ) @@ -19717,7 +19717,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 634) (i32.const 0) ) @@ -19736,7 +19736,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 635) (i32.const 0) ) @@ -19755,7 +19755,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 636) (i32.const 0) ) @@ -19774,7 +19774,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 637) (i32.const 0) ) @@ -19793,7 +19793,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 638) (i32.const 0) ) @@ -19812,7 +19812,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 639) (i32.const 0) ) @@ -19831,7 +19831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 640) (i32.const 0) ) @@ -19850,7 +19850,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 641) (i32.const 0) ) @@ -19869,7 +19869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 642) (i32.const 0) ) @@ -19888,7 +19888,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 651) (i32.const 0) ) @@ -19907,7 +19907,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 652) (i32.const 0) ) @@ -19926,7 +19926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 653) (i32.const 0) ) @@ -19945,7 +19945,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 654) (i32.const 0) ) @@ -19964,7 +19964,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 655) (i32.const 0) ) @@ -19983,7 +19983,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 656) (i32.const 0) ) @@ -20002,7 +20002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 657) (i32.const 0) ) @@ -20021,7 +20021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 658) (i32.const 0) ) @@ -20040,7 +20040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 659) (i32.const 0) ) @@ -20059,7 +20059,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 660) (i32.const 0) ) @@ -20078,7 +20078,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 663) (i32.const 0) ) @@ -20097,7 +20097,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 664) (i32.const 0) ) @@ -20116,7 +20116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 665) (i32.const 0) ) @@ -20135,7 +20135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 666) (i32.const 0) ) @@ -20154,7 +20154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 667) (i32.const 0) ) @@ -20173,7 +20173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 668) (i32.const 0) ) @@ -20192,7 +20192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 669) (i32.const 0) ) @@ -20211,7 +20211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 670) (i32.const 0) ) @@ -20230,7 +20230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 671) (i32.const 0) ) @@ -20249,7 +20249,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 672) (i32.const 0) ) @@ -20268,7 +20268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 673) (i32.const 0) ) @@ -20287,7 +20287,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 674) (i32.const 0) ) @@ -20306,7 +20306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 675) (i32.const 0) ) @@ -20325,7 +20325,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 676) (i32.const 0) ) @@ -20345,7 +20345,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 688) (i32.const 0) ) @@ -20365,7 +20365,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 689) (i32.const 0) ) @@ -20385,7 +20385,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 690) (i32.const 0) ) @@ -20405,7 +20405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 691) (i32.const 0) ) @@ -20425,7 +20425,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 692) (i32.const 0) ) @@ -20445,7 +20445,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 693) (i32.const 0) ) @@ -20465,7 +20465,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 694) (i32.const 0) ) @@ -20485,7 +20485,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 695) (i32.const 0) ) @@ -20505,7 +20505,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 696) (i32.const 0) ) @@ -20525,7 +20525,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 697) (i32.const 0) ) @@ -20545,7 +20545,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 700) (i32.const 0) ) @@ -20565,7 +20565,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 701) (i32.const 0) ) @@ -20585,7 +20585,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 702) (i32.const 0) ) @@ -20605,7 +20605,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 703) (i32.const 0) ) @@ -20625,7 +20625,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 704) (i32.const 0) ) @@ -20645,7 +20645,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 705) (i32.const 0) ) @@ -20665,7 +20665,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 706) (i32.const 0) ) @@ -20685,7 +20685,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 707) (i32.const 0) ) @@ -20705,7 +20705,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 708) (i32.const 0) ) @@ -20725,7 +20725,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 709) (i32.const 0) ) @@ -20745,7 +20745,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 710) (i32.const 0) ) @@ -20765,7 +20765,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 711) (i32.const 0) ) @@ -20785,7 +20785,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 712) (i32.const 0) ) @@ -20805,7 +20805,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 713) (i32.const 0) ) @@ -20825,7 +20825,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 714) (i32.const 0) ) @@ -20845,7 +20845,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 715) (i32.const 0) ) @@ -20865,7 +20865,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 716) (i32.const 0) ) @@ -20885,7 +20885,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 717) (i32.const 0) ) @@ -20905,7 +20905,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 718) (i32.const 0) ) @@ -20925,7 +20925,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 719) (i32.const 0) ) @@ -20945,7 +20945,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 720) (i32.const 0) ) @@ -20965,7 +20965,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 721) (i32.const 0) ) @@ -20985,7 +20985,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 722) (i32.const 0) ) @@ -21005,7 +21005,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 723) (i32.const 0) ) @@ -21025,7 +21025,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 724) (i32.const 0) ) @@ -21045,7 +21045,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 725) (i32.const 0) ) @@ -21065,7 +21065,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 726) (i32.const 0) ) @@ -21085,7 +21085,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 727) (i32.const 0) ) @@ -21105,7 +21105,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 728) (i32.const 0) ) @@ -21125,7 +21125,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 729) (i32.const 0) ) @@ -21145,7 +21145,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 738) (i32.const 0) ) @@ -21165,7 +21165,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 739) (i32.const 0) ) @@ -21185,7 +21185,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 740) (i32.const 0) ) @@ -21205,7 +21205,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 741) (i32.const 0) ) @@ -21225,7 +21225,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 742) (i32.const 0) ) @@ -21245,7 +21245,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 743) (i32.const 0) ) @@ -21265,7 +21265,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 744) (i32.const 0) ) @@ -21285,7 +21285,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 745) (i32.const 0) ) @@ -21305,7 +21305,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 746) (i32.const 0) ) @@ -21325,7 +21325,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 747) (i32.const 0) ) @@ -21345,7 +21345,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 750) (i32.const 0) ) @@ -21365,7 +21365,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 751) (i32.const 0) ) @@ -21385,7 +21385,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 752) (i32.const 0) ) @@ -21405,7 +21405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 753) (i32.const 0) ) @@ -21425,7 +21425,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 754) (i32.const 0) ) @@ -21445,7 +21445,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 755) (i32.const 0) ) @@ -21465,7 +21465,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 756) (i32.const 0) ) @@ -21485,7 +21485,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 757) (i32.const 0) ) @@ -21505,7 +21505,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 758) (i32.const 0) ) @@ -21525,7 +21525,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 759) (i32.const 0) ) @@ -21545,7 +21545,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 760) (i32.const 0) ) @@ -21565,7 +21565,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 761) (i32.const 0) ) @@ -21585,7 +21585,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 762) (i32.const 0) ) @@ -21605,7 +21605,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 763) (i32.const 0) ) @@ -21625,7 +21625,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 764) (i32.const 0) ) @@ -21645,7 +21645,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 765) (i32.const 0) ) @@ -21665,7 +21665,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 766) (i32.const 0) ) @@ -21685,7 +21685,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 767) (i32.const 0) ) @@ -21705,7 +21705,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 768) (i32.const 0) ) @@ -21725,7 +21725,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 769) (i32.const 0) ) @@ -21745,7 +21745,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 770) (i32.const 0) ) @@ -21765,7 +21765,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 771) (i32.const 0) ) @@ -21785,7 +21785,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 772) (i32.const 0) ) @@ -21805,7 +21805,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 773) (i32.const 0) ) @@ -21825,7 +21825,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 774) (i32.const 0) ) @@ -21845,7 +21845,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 775) (i32.const 0) ) @@ -21865,7 +21865,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 776) (i32.const 0) ) @@ -21885,7 +21885,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 777) (i32.const 0) ) @@ -21904,7 +21904,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 789) (i32.const 0) ) @@ -21923,7 +21923,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 790) (i32.const 0) ) @@ -21942,7 +21942,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 791) (i32.const 0) ) @@ -21961,7 +21961,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 792) (i32.const 0) ) @@ -21980,7 +21980,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 793) (i32.const 0) ) @@ -21999,7 +21999,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 794) (i32.const 0) ) @@ -22018,7 +22018,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 795) (i32.const 0) ) @@ -22037,7 +22037,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 796) (i32.const 0) ) @@ -22056,7 +22056,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 797) (i32.const 0) ) @@ -22075,7 +22075,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 798) (i32.const 0) ) @@ -22094,7 +22094,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 801) (i32.const 0) ) @@ -22113,7 +22113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 802) (i32.const 0) ) @@ -22132,7 +22132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 803) (i32.const 0) ) @@ -22151,7 +22151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 804) (i32.const 0) ) @@ -22170,7 +22170,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 805) (i32.const 0) ) @@ -22189,7 +22189,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 806) (i32.const 0) ) @@ -22208,7 +22208,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 807) (i32.const 0) ) @@ -22227,7 +22227,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 808) (i32.const 0) ) @@ -22246,7 +22246,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 809) (i32.const 0) ) @@ -22265,7 +22265,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 810) (i32.const 0) ) @@ -22284,7 +22284,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 819) (i32.const 0) ) @@ -22303,7 +22303,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 820) (i32.const 0) ) @@ -22322,7 +22322,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 821) (i32.const 0) ) @@ -22341,7 +22341,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 822) (i32.const 0) ) @@ -22360,7 +22360,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 823) (i32.const 0) ) @@ -22379,7 +22379,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 824) (i32.const 0) ) @@ -22398,7 +22398,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 825) (i32.const 0) ) @@ -22417,7 +22417,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 826) (i32.const 0) ) @@ -22436,7 +22436,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 827) (i32.const 0) ) @@ -22455,7 +22455,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 828) (i32.const 0) ) @@ -22474,7 +22474,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 831) (i32.const 0) ) @@ -22493,7 +22493,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 832) (i32.const 0) ) @@ -22512,7 +22512,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 833) (i32.const 0) ) @@ -22531,7 +22531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 834) (i32.const 0) ) @@ -22550,7 +22550,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 835) (i32.const 0) ) @@ -22569,7 +22569,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 836) (i32.const 0) ) @@ -22588,7 +22588,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 837) (i32.const 0) ) @@ -22607,7 +22607,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 838) (i32.const 0) ) @@ -22626,7 +22626,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 839) (i32.const 0) ) @@ -22645,7 +22645,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 840) (i32.const 0) ) @@ -22664,7 +22664,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 852) (i32.const 0) ) @@ -22683,7 +22683,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 853) (i32.const 0) ) @@ -22702,7 +22702,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 854) (i32.const 0) ) @@ -22721,7 +22721,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 855) (i32.const 0) ) @@ -22740,7 +22740,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 856) (i32.const 0) ) @@ -22759,7 +22759,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 857) (i32.const 0) ) @@ -22778,7 +22778,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 858) (i32.const 0) ) @@ -22797,7 +22797,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 859) (i32.const 0) ) @@ -22816,7 +22816,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 860) (i32.const 0) ) @@ -22835,7 +22835,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 861) (i32.const 0) ) @@ -22854,7 +22854,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 864) (i32.const 0) ) @@ -22873,7 +22873,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 865) (i32.const 0) ) @@ -22892,7 +22892,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 866) (i32.const 0) ) @@ -22911,7 +22911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 867) (i32.const 0) ) @@ -22930,7 +22930,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 868) (i32.const 0) ) @@ -22949,7 +22949,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 869) (i32.const 0) ) @@ -22968,7 +22968,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 870) (i32.const 0) ) @@ -22987,7 +22987,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 871) (i32.const 0) ) @@ -23006,7 +23006,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 872) (i32.const 0) ) @@ -23025,7 +23025,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 873) (i32.const 0) ) @@ -23044,7 +23044,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 874) (i32.const 0) ) @@ -23063,7 +23063,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 875) (i32.const 0) ) @@ -23082,7 +23082,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 876) (i32.const 0) ) @@ -23101,7 +23101,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 877) (i32.const 0) ) @@ -23120,7 +23120,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 878) (i32.const 0) ) @@ -23139,7 +23139,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 879) (i32.const 0) ) @@ -23158,7 +23158,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 880) (i32.const 0) ) @@ -23177,7 +23177,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 881) (i32.const 0) ) @@ -23196,7 +23196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 882) (i32.const 0) ) @@ -23215,7 +23215,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 883) (i32.const 0) ) @@ -23234,7 +23234,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 884) (i32.const 0) ) @@ -23253,7 +23253,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 885) (i32.const 0) ) @@ -23272,7 +23272,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 886) (i32.const 0) ) @@ -23291,7 +23291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 887) (i32.const 0) ) @@ -23310,7 +23310,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 888) (i32.const 0) ) @@ -23329,7 +23329,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 889) (i32.const 0) ) @@ -23348,7 +23348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 890) (i32.const 0) ) @@ -23367,7 +23367,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 891) (i32.const 0) ) @@ -23386,7 +23386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 892) (i32.const 0) ) @@ -23405,7 +23405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 893) (i32.const 0) ) @@ -23424,7 +23424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 894) (i32.const 0) ) @@ -23443,7 +23443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 895) (i32.const 0) ) @@ -23462,7 +23462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 896) (i32.const 0) ) @@ -23481,7 +23481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 897) (i32.const 0) ) @@ -23500,7 +23500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 898) (i32.const 0) ) @@ -23519,7 +23519,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 899) (i32.const 0) ) @@ -23538,7 +23538,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 900) (i32.const 0) ) @@ -23557,7 +23557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 901) (i32.const 0) ) @@ -23576,7 +23576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 902) (i32.const 0) ) @@ -23595,7 +23595,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 903) (i32.const 0) ) @@ -23614,7 +23614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 904) (i32.const 0) ) @@ -23633,7 +23633,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 905) (i32.const 0) ) @@ -23652,7 +23652,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 906) (i32.const 0) ) @@ -23671,7 +23671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 907) (i32.const 0) ) @@ -23690,7 +23690,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 908) (i32.const 0) ) @@ -23709,7 +23709,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 917) (i32.const 0) ) @@ -23728,7 +23728,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 918) (i32.const 0) ) @@ -23747,7 +23747,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 919) (i32.const 0) ) @@ -23766,7 +23766,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 920) (i32.const 0) ) @@ -23785,7 +23785,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 921) (i32.const 0) ) @@ -23804,7 +23804,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 922) (i32.const 0) ) @@ -23823,7 +23823,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 923) (i32.const 0) ) @@ -23842,7 +23842,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 924) (i32.const 0) ) @@ -23861,7 +23861,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 925) (i32.const 0) ) @@ -23880,7 +23880,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 926) (i32.const 0) ) @@ -23899,7 +23899,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 929) (i32.const 0) ) @@ -23918,7 +23918,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 930) (i32.const 0) ) @@ -23937,7 +23937,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 931) (i32.const 0) ) @@ -23956,7 +23956,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 932) (i32.const 0) ) @@ -23975,7 +23975,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 933) (i32.const 0) ) @@ -23994,7 +23994,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 934) (i32.const 0) ) @@ -24013,7 +24013,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 935) (i32.const 0) ) @@ -24032,7 +24032,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 936) (i32.const 0) ) @@ -24051,7 +24051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 937) (i32.const 0) ) @@ -24070,7 +24070,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 938) (i32.const 0) ) @@ -24089,7 +24089,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 939) (i32.const 0) ) @@ -24108,7 +24108,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 940) (i32.const 0) ) @@ -24127,7 +24127,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 941) (i32.const 0) ) @@ -24146,7 +24146,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 942) (i32.const 0) ) @@ -24165,7 +24165,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 943) (i32.const 0) ) @@ -24184,7 +24184,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 944) (i32.const 0) ) @@ -24203,7 +24203,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 945) (i32.const 0) ) @@ -24222,7 +24222,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 946) (i32.const 0) ) @@ -24241,7 +24241,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 947) (i32.const 0) ) @@ -24260,7 +24260,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 948) (i32.const 0) ) @@ -24279,7 +24279,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 949) (i32.const 0) ) @@ -24298,7 +24298,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 950) (i32.const 0) ) @@ -24317,7 +24317,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 951) (i32.const 0) ) @@ -24336,7 +24336,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 952) (i32.const 0) ) @@ -24355,7 +24355,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 953) (i32.const 0) ) @@ -24374,7 +24374,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 954) (i32.const 0) ) @@ -24393,7 +24393,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 955) (i32.const 0) ) @@ -24412,7 +24412,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 956) (i32.const 0) ) @@ -24431,7 +24431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 957) (i32.const 0) ) @@ -24450,7 +24450,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 958) (i32.const 0) ) @@ -24469,7 +24469,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 959) (i32.const 0) ) @@ -24488,7 +24488,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 960) (i32.const 0) ) @@ -24507,7 +24507,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 961) (i32.const 0) ) @@ -24526,7 +24526,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 962) (i32.const 0) ) @@ -24545,7 +24545,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 963) (i32.const 0) ) @@ -24564,7 +24564,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 964) (i32.const 0) ) @@ -24583,7 +24583,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 965) (i32.const 0) ) @@ -24602,7 +24602,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 966) (i32.const 0) ) @@ -24621,7 +24621,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 967) (i32.const 0) ) @@ -24640,7 +24640,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 968) (i32.const 0) ) @@ -24659,7 +24659,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 969) (i32.const 0) ) @@ -24678,7 +24678,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 970) (i32.const 0) ) @@ -24697,7 +24697,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 971) (i32.const 0) ) @@ -24716,7 +24716,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 972) (i32.const 0) ) @@ -24735,7 +24735,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 973) (i32.const 0) ) @@ -24754,7 +24754,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1110) (i32.const 0) ) @@ -24773,7 +24773,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1111) (i32.const 0) ) @@ -24792,7 +24792,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1112) (i32.const 0) ) @@ -24811,7 +24811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1113) (i32.const 0) ) @@ -24830,7 +24830,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1114) (i32.const 0) ) @@ -24849,7 +24849,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1115) (i32.const 0) ) @@ -24868,7 +24868,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1116) (i32.const 0) ) @@ -24887,7 +24887,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1117) (i32.const 0) ) @@ -24906,7 +24906,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1118) (i32.const 0) ) @@ -24925,7 +24925,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1119) (i32.const 0) ) @@ -24944,7 +24944,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1122) (i32.const 0) ) @@ -24963,7 +24963,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1123) (i32.const 0) ) @@ -24982,7 +24982,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1124) (i32.const 0) ) @@ -25001,7 +25001,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1125) (i32.const 0) ) @@ -25020,7 +25020,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1126) (i32.const 0) ) @@ -25039,7 +25039,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1135) (i32.const 0) ) @@ -25058,7 +25058,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1136) (i32.const 0) ) @@ -25077,7 +25077,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1137) (i32.const 0) ) @@ -25096,7 +25096,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1138) (i32.const 0) ) @@ -25115,7 +25115,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1139) (i32.const 0) ) @@ -25134,7 +25134,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1140) (i32.const 0) ) @@ -25153,7 +25153,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1141) (i32.const 0) ) @@ -25172,7 +25172,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1142) (i32.const 0) ) @@ -25191,7 +25191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1143) (i32.const 0) ) @@ -25210,7 +25210,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1144) (i32.const 0) ) @@ -25229,7 +25229,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1147) (i32.const 0) ) @@ -25248,7 +25248,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1148) (i32.const 0) ) @@ -25267,7 +25267,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1149) (i32.const 0) ) @@ -25286,7 +25286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1150) (i32.const 0) ) @@ -25305,7 +25305,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1151) (i32.const 0) ) @@ -25324,7 +25324,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1163) (i32.const 0) ) @@ -25343,7 +25343,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1164) (i32.const 0) ) @@ -25362,7 +25362,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1165) (i32.const 0) ) @@ -25381,7 +25381,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1166) (i32.const 0) ) @@ -25400,7 +25400,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1167) (i32.const 0) ) @@ -25419,7 +25419,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1168) (i32.const 0) ) @@ -25438,7 +25438,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1169) (i32.const 0) ) @@ -25457,7 +25457,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1170) (i32.const 0) ) @@ -25476,7 +25476,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1171) (i32.const 0) ) @@ -25495,7 +25495,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1172) (i32.const 0) ) @@ -25514,7 +25514,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1175) (i32.const 0) ) @@ -25533,7 +25533,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1176) (i32.const 0) ) @@ -25552,7 +25552,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1177) (i32.const 0) ) @@ -25571,7 +25571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1178) (i32.const 0) ) @@ -25590,7 +25590,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1179) (i32.const 0) ) @@ -25609,7 +25609,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1180) (i32.const 0) ) @@ -25628,7 +25628,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1181) (i32.const 0) ) @@ -25647,7 +25647,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1182) (i32.const 0) ) @@ -25666,7 +25666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1183) (i32.const 0) ) @@ -25685,7 +25685,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1184) (i32.const 0) ) @@ -25704,7 +25704,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1185) (i32.const 0) ) @@ -25723,7 +25723,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1194) (i32.const 0) ) @@ -25742,7 +25742,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1195) (i32.const 0) ) @@ -25761,7 +25761,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1196) (i32.const 0) ) @@ -25780,7 +25780,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1197) (i32.const 0) ) @@ -25799,7 +25799,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1198) (i32.const 0) ) @@ -25818,7 +25818,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1199) (i32.const 0) ) @@ -25837,7 +25837,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1200) (i32.const 0) ) @@ -25856,7 +25856,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1201) (i32.const 0) ) @@ -25875,7 +25875,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1202) (i32.const 0) ) @@ -25894,7 +25894,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1203) (i32.const 0) ) @@ -25913,7 +25913,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1206) (i32.const 0) ) @@ -25932,7 +25932,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1207) (i32.const 0) ) @@ -25951,7 +25951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1208) (i32.const 0) ) @@ -25970,7 +25970,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1209) (i32.const 0) ) @@ -25989,7 +25989,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1210) (i32.const 0) ) @@ -26008,7 +26008,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1211) (i32.const 0) ) @@ -26027,7 +26027,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1212) (i32.const 0) ) @@ -26046,7 +26046,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1213) (i32.const 0) ) @@ -26065,7 +26065,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1214) (i32.const 0) ) @@ -26084,7 +26084,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1215) (i32.const 0) ) @@ -26103,7 +26103,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1216) (i32.const 0) ) @@ -26122,7 +26122,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1217) (i32.const 0) ) @@ -26141,7 +26141,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1218) (i32.const 0) ) @@ -26160,7 +26160,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1219) (i32.const 0) ) @@ -26179,7 +26179,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1231) (i32.const 0) ) @@ -26198,7 +26198,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1232) (i32.const 0) ) @@ -26217,7 +26217,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1233) (i32.const 0) ) @@ -26236,7 +26236,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1234) (i32.const 0) ) @@ -26255,7 +26255,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1235) (i32.const 0) ) @@ -26274,7 +26274,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1236) (i32.const 0) ) @@ -26293,7 +26293,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1237) (i32.const 0) ) @@ -26312,7 +26312,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1238) (i32.const 0) ) @@ -26331,7 +26331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1239) (i32.const 0) ) @@ -26350,7 +26350,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1240) (i32.const 0) ) @@ -26369,7 +26369,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1243) (i32.const 0) ) @@ -26388,7 +26388,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1244) (i32.const 0) ) @@ -26407,7 +26407,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1245) (i32.const 0) ) @@ -26426,7 +26426,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1246) (i32.const 0) ) @@ -26445,7 +26445,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1247) (i32.const 0) ) @@ -26464,7 +26464,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1248) (i32.const 0) ) @@ -26483,7 +26483,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1249) (i32.const 0) ) @@ -26502,7 +26502,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1250) (i32.const 0) ) @@ -26521,7 +26521,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1251) (i32.const 0) ) @@ -26540,7 +26540,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1260) (i32.const 0) ) @@ -26559,7 +26559,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1261) (i32.const 0) ) @@ -26578,7 +26578,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1262) (i32.const 0) ) @@ -26597,7 +26597,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1263) (i32.const 0) ) @@ -26616,7 +26616,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1264) (i32.const 0) ) @@ -26635,7 +26635,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1265) (i32.const 0) ) @@ -26654,7 +26654,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1266) (i32.const 0) ) @@ -26673,7 +26673,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1267) (i32.const 0) ) @@ -26692,7 +26692,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1268) (i32.const 0) ) @@ -26711,7 +26711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1269) (i32.const 0) ) @@ -26730,7 +26730,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1272) (i32.const 0) ) @@ -26749,7 +26749,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1273) (i32.const 0) ) @@ -26768,7 +26768,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1274) (i32.const 0) ) @@ -26787,7 +26787,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1275) (i32.const 0) ) @@ -26806,7 +26806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1276) (i32.const 0) ) @@ -26825,7 +26825,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1277) (i32.const 0) ) @@ -26844,7 +26844,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1278) (i32.const 0) ) @@ -26863,7 +26863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1290) (i32.const 0) ) @@ -26882,7 +26882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1291) (i32.const 0) ) @@ -26901,7 +26901,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1292) (i32.const 0) ) @@ -26920,7 +26920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1293) (i32.const 0) ) @@ -26939,7 +26939,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1294) (i32.const 0) ) @@ -26958,7 +26958,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1295) (i32.const 0) ) @@ -26977,7 +26977,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1296) (i32.const 0) ) @@ -26996,7 +26996,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1297) (i32.const 0) ) @@ -27015,7 +27015,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1298) (i32.const 0) ) @@ -27034,7 +27034,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1299) (i32.const 0) ) @@ -27053,7 +27053,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1302) (i32.const 0) ) @@ -27072,7 +27072,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1303) (i32.const 0) ) @@ -27091,7 +27091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1304) (i32.const 0) ) @@ -27110,7 +27110,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1305) (i32.const 0) ) @@ -27129,7 +27129,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1306) (i32.const 0) ) @@ -27148,7 +27148,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1307) (i32.const 0) ) @@ -27167,7 +27167,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1308) (i32.const 0) ) @@ -27186,7 +27186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1309) (i32.const 0) ) @@ -27205,7 +27205,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1310) (i32.const 0) ) @@ -27224,7 +27224,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1311) (i32.const 0) ) @@ -27243,7 +27243,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1312) (i32.const 0) ) @@ -27262,7 +27262,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1313) (i32.const 0) ) @@ -27281,7 +27281,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1314) (i32.const 0) ) @@ -27300,7 +27300,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1315) (i32.const 0) ) @@ -27319,7 +27319,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1316) (i32.const 0) ) @@ -27338,7 +27338,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1325) (i32.const 0) ) @@ -27357,7 +27357,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1326) (i32.const 0) ) @@ -27376,7 +27376,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1327) (i32.const 0) ) @@ -27395,7 +27395,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1328) (i32.const 0) ) @@ -27414,7 +27414,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1329) (i32.const 0) ) @@ -27433,7 +27433,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1330) (i32.const 0) ) @@ -27452,7 +27452,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1331) (i32.const 0) ) @@ -27471,7 +27471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1332) (i32.const 0) ) @@ -27490,7 +27490,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1333) (i32.const 0) ) @@ -27509,7 +27509,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1334) (i32.const 0) ) @@ -27528,7 +27528,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1337) (i32.const 0) ) @@ -27547,7 +27547,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1338) (i32.const 0) ) @@ -27566,7 +27566,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1339) (i32.const 0) ) @@ -27585,7 +27585,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1340) (i32.const 0) ) @@ -27604,7 +27604,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1341) (i32.const 0) ) @@ -27623,7 +27623,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1342) (i32.const 0) ) @@ -27642,7 +27642,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1343) (i32.const 0) ) @@ -27661,7 +27661,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1344) (i32.const 0) ) @@ -27680,7 +27680,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1345) (i32.const 0) ) @@ -27699,7 +27699,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1346) (i32.const 0) ) @@ -27718,7 +27718,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1347) (i32.const 0) ) @@ -27737,7 +27737,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1348) (i32.const 0) ) @@ -27756,7 +27756,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1349) (i32.const 0) ) @@ -27775,7 +27775,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1350) (i32.const 0) ) @@ -27794,7 +27794,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1351) (i32.const 0) ) @@ -27814,7 +27814,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1363) (i32.const 0) ) @@ -27834,7 +27834,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1364) (i32.const 0) ) @@ -27854,7 +27854,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1365) (i32.const 0) ) @@ -27874,7 +27874,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1366) (i32.const 0) ) @@ -27894,7 +27894,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1367) (i32.const 0) ) @@ -27914,7 +27914,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1368) (i32.const 0) ) @@ -27934,7 +27934,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1369) (i32.const 0) ) @@ -27954,7 +27954,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1370) (i32.const 0) ) @@ -27974,7 +27974,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1371) (i32.const 0) ) @@ -27994,7 +27994,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1372) (i32.const 0) ) @@ -28014,7 +28014,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1375) (i32.const 0) ) @@ -28034,7 +28034,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1376) (i32.const 0) ) @@ -28054,7 +28054,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1377) (i32.const 0) ) @@ -28074,7 +28074,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1378) (i32.const 0) ) @@ -28094,7 +28094,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1379) (i32.const 0) ) @@ -28114,7 +28114,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1380) (i32.const 0) ) @@ -28134,7 +28134,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1381) (i32.const 0) ) @@ -28154,7 +28154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1382) (i32.const 0) ) @@ -28174,7 +28174,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1383) (i32.const 0) ) @@ -28194,7 +28194,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1384) (i32.const 0) ) @@ -28214,7 +28214,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1385) (i32.const 0) ) @@ -28234,7 +28234,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1386) (i32.const 0) ) @@ -28254,7 +28254,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1387) (i32.const 0) ) @@ -28274,7 +28274,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1388) (i32.const 0) ) @@ -28294,7 +28294,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1389) (i32.const 0) ) @@ -28314,7 +28314,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1390) (i32.const 0) ) @@ -28334,7 +28334,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1391) (i32.const 0) ) @@ -28354,7 +28354,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1392) (i32.const 0) ) @@ -28374,7 +28374,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1393) (i32.const 0) ) @@ -28394,7 +28394,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1402) (i32.const 0) ) @@ -28414,7 +28414,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1403) (i32.const 0) ) @@ -28434,7 +28434,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1404) (i32.const 0) ) @@ -28454,7 +28454,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1405) (i32.const 0) ) @@ -28474,7 +28474,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1406) (i32.const 0) ) @@ -28494,7 +28494,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1407) (i32.const 0) ) @@ -28514,7 +28514,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1408) (i32.const 0) ) @@ -28534,7 +28534,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1409) (i32.const 0) ) @@ -28554,7 +28554,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1410) (i32.const 0) ) @@ -28574,7 +28574,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1411) (i32.const 0) ) @@ -28594,7 +28594,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1414) (i32.const 0) ) @@ -28614,7 +28614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1415) (i32.const 0) ) @@ -28634,7 +28634,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1416) (i32.const 0) ) @@ -28654,7 +28654,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1417) (i32.const 0) ) @@ -28674,7 +28674,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1418) (i32.const 0) ) @@ -28694,7 +28694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1419) (i32.const 0) ) @@ -28714,7 +28714,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1420) (i32.const 0) ) @@ -28734,7 +28734,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1421) (i32.const 0) ) @@ -28754,7 +28754,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1422) (i32.const 0) ) @@ -28774,7 +28774,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1423) (i32.const 0) ) @@ -28794,7 +28794,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1424) (i32.const 0) ) @@ -28814,7 +28814,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1425) (i32.const 0) ) @@ -28834,7 +28834,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1426) (i32.const 0) ) @@ -28854,7 +28854,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1427) (i32.const 0) ) @@ -28874,7 +28874,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1428) (i32.const 0) ) @@ -28894,7 +28894,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1429) (i32.const 0) ) @@ -28914,7 +28914,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1430) (i32.const 0) ) @@ -28934,7 +28934,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1431) (i32.const 0) ) @@ -28954,7 +28954,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1432) (i32.const 0) ) @@ -28973,7 +28973,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1444) (i32.const 0) ) @@ -28992,7 +28992,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1445) (i32.const 0) ) @@ -29011,7 +29011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1446) (i32.const 0) ) @@ -29030,7 +29030,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1447) (i32.const 0) ) @@ -29049,7 +29049,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1448) (i32.const 0) ) @@ -29068,7 +29068,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1449) (i32.const 0) ) @@ -29087,7 +29087,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1450) (i32.const 0) ) @@ -29106,7 +29106,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1451) (i32.const 0) ) @@ -29125,7 +29125,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1452) (i32.const 0) ) @@ -29144,7 +29144,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1453) (i32.const 0) ) @@ -29163,7 +29163,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1456) (i32.const 0) ) @@ -29182,7 +29182,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1457) (i32.const 0) ) @@ -29201,7 +29201,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1458) (i32.const 0) ) @@ -29220,7 +29220,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1459) (i32.const 0) ) @@ -29239,7 +29239,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1460) (i32.const 0) ) @@ -29258,7 +29258,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1461) (i32.const 0) ) @@ -29277,7 +29277,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1462) (i32.const 0) ) @@ -29296,7 +29296,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1463) (i32.const 0) ) @@ -29315,7 +29315,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1472) (i32.const 0) ) @@ -29334,7 +29334,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1473) (i32.const 0) ) @@ -29353,7 +29353,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1474) (i32.const 0) ) @@ -29372,7 +29372,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1475) (i32.const 0) ) @@ -29391,7 +29391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1476) (i32.const 0) ) @@ -29410,7 +29410,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1477) (i32.const 0) ) @@ -29429,7 +29429,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1478) (i32.const 0) ) @@ -29448,7 +29448,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1479) (i32.const 0) ) @@ -29467,7 +29467,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1482) (i32.const 0) ) @@ -29486,7 +29486,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1483) (i32.const 0) ) @@ -29505,7 +29505,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1484) (i32.const 0) ) @@ -29524,7 +29524,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1485) (i32.const 0) ) @@ -29543,7 +29543,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1486) (i32.const 0) ) @@ -29562,7 +29562,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1487) (i32.const 0) ) @@ -29581,7 +29581,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1488) (i32.const 0) ) @@ -29600,7 +29600,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1489) (i32.const 0) ) @@ -29619,7 +29619,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1501) (i32.const 0) ) @@ -29638,7 +29638,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1502) (i32.const 0) ) @@ -29657,7 +29657,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1503) (i32.const 0) ) @@ -29676,7 +29676,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1504) (i32.const 0) ) @@ -29695,7 +29695,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1505) (i32.const 0) ) @@ -29714,7 +29714,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1506) (i32.const 0) ) @@ -29733,7 +29733,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1507) (i32.const 0) ) @@ -29752,7 +29752,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1508) (i32.const 0) ) @@ -29771,7 +29771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1509) (i32.const 0) ) @@ -29790,7 +29790,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1510) (i32.const 0) ) @@ -29809,7 +29809,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1513) (i32.const 0) ) @@ -29828,7 +29828,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1514) (i32.const 0) ) @@ -29847,7 +29847,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1515) (i32.const 0) ) @@ -29866,7 +29866,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1516) (i32.const 0) ) @@ -29885,7 +29885,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1517) (i32.const 0) ) @@ -29904,7 +29904,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1518) (i32.const 0) ) @@ -29923,7 +29923,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1519) (i32.const 0) ) @@ -29942,7 +29942,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1520) (i32.const 0) ) @@ -29961,7 +29961,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1529) (i32.const 0) ) @@ -29980,7 +29980,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1530) (i32.const 0) ) @@ -29999,7 +29999,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1531) (i32.const 0) ) @@ -30018,7 +30018,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1532) (i32.const 0) ) @@ -30037,7 +30037,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1533) (i32.const 0) ) @@ -30056,7 +30056,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1534) (i32.const 0) ) @@ -30075,7 +30075,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1535) (i32.const 0) ) @@ -30094,7 +30094,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1536) (i32.const 0) ) @@ -30113,7 +30113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1537) (i32.const 0) ) @@ -30132,7 +30132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1538) (i32.const 0) ) @@ -30151,7 +30151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1541) (i32.const 0) ) @@ -30170,7 +30170,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1542) (i32.const 0) ) @@ -30189,7 +30189,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1543) (i32.const 0) ) @@ -30208,7 +30208,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1544) (i32.const 0) ) @@ -30227,7 +30227,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1545) (i32.const 0) ) @@ -30246,7 +30246,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1546) (i32.const 0) ) @@ -30265,7 +30265,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1547) (i32.const 0) ) @@ -30284,7 +30284,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1548) (i32.const 0) ) @@ -30303,7 +30303,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1560) (i32.const 0) ) @@ -30322,7 +30322,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1561) (i32.const 0) ) @@ -30341,7 +30341,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1562) (i32.const 0) ) @@ -30360,7 +30360,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1563) (i32.const 0) ) @@ -30379,7 +30379,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1564) (i32.const 0) ) @@ -30398,7 +30398,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1565) (i32.const 0) ) @@ -30417,7 +30417,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1566) (i32.const 0) ) @@ -30436,7 +30436,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1567) (i32.const 0) ) @@ -30455,7 +30455,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1568) (i32.const 0) ) @@ -30474,7 +30474,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1569) (i32.const 0) ) @@ -30493,7 +30493,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1572) (i32.const 0) ) @@ -30512,7 +30512,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1573) (i32.const 0) ) @@ -30531,7 +30531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1574) (i32.const 0) ) @@ -30550,7 +30550,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1575) (i32.const 0) ) @@ -30569,7 +30569,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1576) (i32.const 0) ) @@ -30588,7 +30588,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1577) (i32.const 0) ) @@ -30607,7 +30607,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1578) (i32.const 0) ) @@ -30626,7 +30626,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1579) (i32.const 0) ) @@ -30645,7 +30645,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1588) (i32.const 0) ) @@ -30664,7 +30664,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1589) (i32.const 0) ) @@ -30683,7 +30683,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1590) (i32.const 0) ) @@ -30702,7 +30702,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1591) (i32.const 0) ) @@ -30721,7 +30721,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1592) (i32.const 0) ) @@ -30740,7 +30740,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1593) (i32.const 0) ) @@ -30759,7 +30759,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1594) (i32.const 0) ) @@ -30778,7 +30778,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1595) (i32.const 0) ) @@ -30797,7 +30797,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1596) (i32.const 0) ) @@ -30816,7 +30816,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1597) (i32.const 0) ) @@ -30835,7 +30835,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1600) (i32.const 0) ) @@ -30854,7 +30854,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1601) (i32.const 0) ) @@ -30873,7 +30873,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1602) (i32.const 0) ) @@ -30892,7 +30892,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1603) (i32.const 0) ) @@ -30911,7 +30911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1604) (i32.const 0) ) @@ -30930,7 +30930,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1605) (i32.const 0) ) @@ -30949,7 +30949,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1606) (i32.const 0) ) @@ -30968,7 +30968,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1607) (i32.const 0) ) @@ -30987,7 +30987,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1608) (i32.const 0) ) @@ -31006,7 +31006,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1620) (i32.const 0) ) @@ -31025,7 +31025,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1621) (i32.const 0) ) @@ -31044,7 +31044,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1622) (i32.const 0) ) @@ -31063,7 +31063,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1623) (i32.const 0) ) @@ -31082,7 +31082,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1624) (i32.const 0) ) @@ -31101,7 +31101,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1625) (i32.const 0) ) @@ -31120,7 +31120,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1626) (i32.const 0) ) @@ -31139,7 +31139,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1627) (i32.const 0) ) @@ -31158,7 +31158,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1628) (i32.const 0) ) @@ -31177,7 +31177,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1629) (i32.const 0) ) @@ -31196,7 +31196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1632) (i32.const 0) ) @@ -31215,7 +31215,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1633) (i32.const 0) ) @@ -31234,7 +31234,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1634) (i32.const 0) ) @@ -31253,7 +31253,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1635) (i32.const 0) ) @@ -31272,7 +31272,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1636) (i32.const 0) ) @@ -31291,7 +31291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1637) (i32.const 0) ) @@ -31310,7 +31310,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1638) (i32.const 0) ) @@ -31329,7 +31329,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1639) (i32.const 0) ) @@ -31348,7 +31348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1648) (i32.const 0) ) @@ -31367,7 +31367,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1649) (i32.const 0) ) @@ -31386,7 +31386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1650) (i32.const 0) ) @@ -31405,7 +31405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1651) (i32.const 0) ) @@ -31424,7 +31424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1652) (i32.const 0) ) @@ -31443,7 +31443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1653) (i32.const 0) ) @@ -31462,7 +31462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1654) (i32.const 0) ) @@ -31481,7 +31481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1655) (i32.const 0) ) @@ -31500,7 +31500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1656) (i32.const 0) ) @@ -31519,7 +31519,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1657) (i32.const 0) ) @@ -31538,7 +31538,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1660) (i32.const 0) ) @@ -31557,7 +31557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1661) (i32.const 0) ) @@ -31576,7 +31576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1662) (i32.const 0) ) @@ -31595,7 +31595,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1663) (i32.const 0) ) @@ -31614,7 +31614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1664) (i32.const 0) ) @@ -31633,7 +31633,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1665) (i32.const 0) ) @@ -31652,7 +31652,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1666) (i32.const 0) ) @@ -31671,7 +31671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1667) (i32.const 0) ) @@ -31691,7 +31691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1679) (i32.const 0) ) @@ -31711,7 +31711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1680) (i32.const 0) ) @@ -31731,7 +31731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1681) (i32.const 0) ) @@ -31751,7 +31751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1682) (i32.const 0) ) @@ -31771,7 +31771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1683) (i32.const 0) ) @@ -31791,7 +31791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1684) (i32.const 0) ) @@ -31811,7 +31811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1685) (i32.const 0) ) @@ -31831,7 +31831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1686) (i32.const 0) ) @@ -31851,7 +31851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1687) (i32.const 0) ) @@ -31871,7 +31871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1688) (i32.const 0) ) @@ -31891,7 +31891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1691) (i32.const 0) ) @@ -31911,7 +31911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1692) (i32.const 0) ) @@ -31931,7 +31931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1693) (i32.const 0) ) @@ -31951,7 +31951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1694) (i32.const 0) ) @@ -31971,7 +31971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1695) (i32.const 0) ) @@ -31991,7 +31991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1696) (i32.const 0) ) @@ -32011,7 +32011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1697) (i32.const 0) ) @@ -32031,7 +32031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1698) (i32.const 0) ) @@ -32051,7 +32051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1699) (i32.const 0) ) @@ -32071,7 +32071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1700) (i32.const 0) ) @@ -32091,7 +32091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1701) (i32.const 0) ) @@ -32111,7 +32111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1702) (i32.const 0) ) @@ -32131,7 +32131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1703) (i32.const 0) ) @@ -32151,7 +32151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1704) (i32.const 0) ) @@ -32171,7 +32171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1705) (i32.const 0) ) @@ -32191,7 +32191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1706) (i32.const 0) ) @@ -32211,7 +32211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1707) (i32.const 0) ) @@ -32231,7 +32231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1708) (i32.const 0) ) @@ -32251,7 +32251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1709) (i32.const 0) ) @@ -32271,7 +32271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1710) (i32.const 0) ) @@ -32291,7 +32291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1711) (i32.const 0) ) @@ -32311,7 +32311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1712) (i32.const 0) ) @@ -32331,7 +32331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1713) (i32.const 0) ) @@ -32351,7 +32351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1714) (i32.const 0) ) @@ -32371,7 +32371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1715) (i32.const 0) ) @@ -32391,7 +32391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1716) (i32.const 0) ) @@ -32411,7 +32411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1717) (i32.const 0) ) @@ -32431,7 +32431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1718) (i32.const 0) ) @@ -32451,7 +32451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1719) (i32.const 0) ) @@ -32471,7 +32471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1720) (i32.const 0) ) @@ -32491,7 +32491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1721) (i32.const 0) ) @@ -32511,7 +32511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1722) (i32.const 0) ) @@ -32531,7 +32531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1723) (i32.const 0) ) @@ -32551,7 +32551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1724) (i32.const 0) ) @@ -32571,7 +32571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1725) (i32.const 0) ) @@ -32591,7 +32591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1726) (i32.const 0) ) @@ -32611,7 +32611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1727) (i32.const 0) ) @@ -32631,7 +32631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1728) (i32.const 0) ) @@ -32651,7 +32651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1729) (i32.const 0) ) @@ -32671,7 +32671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1730) (i32.const 0) ) @@ -32691,7 +32691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1731) (i32.const 0) ) @@ -32711,7 +32711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1732) (i32.const 0) ) @@ -32731,7 +32731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1733) (i32.const 0) ) @@ -32751,7 +32751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1734) (i32.const 0) ) @@ -32771,7 +32771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1735) (i32.const 0) ) @@ -32791,7 +32791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1736) (i32.const 0) ) @@ -32811,7 +32811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1737) (i32.const 0) ) @@ -32831,7 +32831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1738) (i32.const 0) ) @@ -32851,7 +32851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1739) (i32.const 0) ) @@ -32871,7 +32871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1740) (i32.const 0) ) @@ -32891,7 +32891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1741) (i32.const 0) ) @@ -32911,7 +32911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1742) (i32.const 0) ) @@ -32931,7 +32931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1743) (i32.const 0) ) @@ -32951,7 +32951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1744) (i32.const 0) ) @@ -32971,7 +32971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1745) (i32.const 0) ) @@ -32991,7 +32991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1746) (i32.const 0) ) @@ -33011,7 +33011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1747) (i32.const 0) ) @@ -33031,7 +33031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1748) (i32.const 0) ) @@ -33051,7 +33051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1757) (i32.const 0) ) @@ -33071,7 +33071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1758) (i32.const 0) ) @@ -33091,7 +33091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1759) (i32.const 0) ) @@ -33111,7 +33111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1760) (i32.const 0) ) @@ -33131,7 +33131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1761) (i32.const 0) ) @@ -33151,7 +33151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1762) (i32.const 0) ) @@ -33171,7 +33171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1763) (i32.const 0) ) @@ -33191,7 +33191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1764) (i32.const 0) ) @@ -33211,7 +33211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1765) (i32.const 0) ) @@ -33231,7 +33231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1766) (i32.const 0) ) @@ -33251,7 +33251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1769) (i32.const 0) ) @@ -33271,7 +33271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1770) (i32.const 0) ) @@ -33291,7 +33291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1771) (i32.const 0) ) @@ -33311,7 +33311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1772) (i32.const 0) ) @@ -33331,7 +33331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1773) (i32.const 0) ) @@ -33351,7 +33351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1774) (i32.const 0) ) @@ -33371,7 +33371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1775) (i32.const 0) ) @@ -33391,7 +33391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1776) (i32.const 0) ) @@ -33411,7 +33411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1777) (i32.const 0) ) @@ -33431,7 +33431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1778) (i32.const 0) ) @@ -33451,7 +33451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1779) (i32.const 0) ) @@ -33471,7 +33471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1780) (i32.const 0) ) @@ -33491,7 +33491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1781) (i32.const 0) ) @@ -33511,7 +33511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1782) (i32.const 0) ) @@ -33531,7 +33531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1783) (i32.const 0) ) @@ -33551,7 +33551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1784) (i32.const 0) ) @@ -33571,7 +33571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1785) (i32.const 0) ) @@ -33591,7 +33591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1786) (i32.const 0) ) @@ -33611,7 +33611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1787) (i32.const 0) ) @@ -33631,7 +33631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1788) (i32.const 0) ) @@ -33651,7 +33651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1789) (i32.const 0) ) @@ -33671,7 +33671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1790) (i32.const 0) ) @@ -33691,7 +33691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1791) (i32.const 0) ) @@ -33711,7 +33711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1792) (i32.const 0) ) @@ -33731,7 +33731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1793) (i32.const 0) ) @@ -33751,7 +33751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1794) (i32.const 0) ) @@ -33771,7 +33771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1795) (i32.const 0) ) @@ -33791,7 +33791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1796) (i32.const 0) ) @@ -33811,7 +33811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1797) (i32.const 0) ) @@ -33831,7 +33831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1798) (i32.const 0) ) @@ -33851,7 +33851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1799) (i32.const 0) ) @@ -33871,7 +33871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1800) (i32.const 0) ) @@ -33891,7 +33891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1801) (i32.const 0) ) @@ -33911,7 +33911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1802) (i32.const 0) ) @@ -33931,7 +33931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1803) (i32.const 0) ) @@ -33951,7 +33951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1804) (i32.const 0) ) @@ -33971,7 +33971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1805) (i32.const 0) ) @@ -33991,7 +33991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1806) (i32.const 0) ) @@ -34011,7 +34011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1807) (i32.const 0) ) @@ -34031,7 +34031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1808) (i32.const 0) ) @@ -34051,7 +34051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1809) (i32.const 0) ) @@ -34071,7 +34071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1810) (i32.const 0) ) @@ -34091,7 +34091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1811) (i32.const 0) ) @@ -34111,7 +34111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1812) (i32.const 0) ) @@ -34131,7 +34131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1813) (i32.const 0) ) @@ -34151,7 +34151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1814) (i32.const 0) ) @@ -34171,7 +34171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1815) (i32.const 0) ) @@ -34191,7 +34191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1816) (i32.const 0) ) @@ -34211,7 +34211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1817) (i32.const 0) ) @@ -34231,7 +34231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1818) (i32.const 0) ) @@ -34251,7 +34251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1819) (i32.const 0) ) @@ -34271,7 +34271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1820) (i32.const 0) ) @@ -34291,7 +34291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1821) (i32.const 0) ) @@ -34311,7 +34311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1822) (i32.const 0) ) @@ -34331,7 +34331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1823) (i32.const 0) ) @@ -34351,7 +34351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1824) (i32.const 0) ) @@ -34371,7 +34371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1825) (i32.const 0) ) @@ -34391,7 +34391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1826) (i32.const 0) ) @@ -34411,7 +34411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1838) (i32.const 0) ) @@ -34431,7 +34431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1839) (i32.const 0) ) @@ -34451,7 +34451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1840) (i32.const 0) ) @@ -34471,7 +34471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1841) (i32.const 0) ) @@ -34491,7 +34491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1842) (i32.const 0) ) @@ -34511,7 +34511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1843) (i32.const 0) ) @@ -34531,7 +34531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1844) (i32.const 0) ) @@ -34551,7 +34551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1845) (i32.const 0) ) @@ -34571,7 +34571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1846) (i32.const 0) ) @@ -34591,7 +34591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1847) (i32.const 0) ) @@ -34611,7 +34611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1850) (i32.const 0) ) @@ -34631,7 +34631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1851) (i32.const 0) ) @@ -34651,7 +34651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1852) (i32.const 0) ) @@ -34671,7 +34671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1853) (i32.const 0) ) @@ -34691,7 +34691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1854) (i32.const 0) ) @@ -34711,7 +34711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1855) (i32.const 0) ) @@ -34731,7 +34731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1856) (i32.const 0) ) @@ -34751,7 +34751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1857) (i32.const 0) ) @@ -34771,7 +34771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1858) (i32.const 0) ) @@ -34791,7 +34791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1859) (i32.const 0) ) @@ -34811,7 +34811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1860) (i32.const 0) ) @@ -34831,7 +34831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1861) (i32.const 0) ) @@ -34851,7 +34851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1862) (i32.const 0) ) @@ -34871,7 +34871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1863) (i32.const 0) ) @@ -34891,7 +34891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1864) (i32.const 0) ) @@ -34911,7 +34911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1865) (i32.const 0) ) @@ -34931,7 +34931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1866) (i32.const 0) ) @@ -34951,7 +34951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1867) (i32.const 0) ) @@ -34971,7 +34971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1868) (i32.const 0) ) @@ -34991,7 +34991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1869) (i32.const 0) ) @@ -35011,7 +35011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1870) (i32.const 0) ) @@ -35031,7 +35031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1871) (i32.const 0) ) @@ -35051,7 +35051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1872) (i32.const 0) ) @@ -35071,7 +35071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1873) (i32.const 0) ) @@ -35091,7 +35091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1874) (i32.const 0) ) @@ -35111,7 +35111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1875) (i32.const 0) ) @@ -35131,7 +35131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1876) (i32.const 0) ) @@ -35151,7 +35151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1877) (i32.const 0) ) @@ -35171,7 +35171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1878) (i32.const 0) ) @@ -35191,7 +35191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1879) (i32.const 0) ) @@ -35211,7 +35211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1880) (i32.const 0) ) @@ -35231,7 +35231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1881) (i32.const 0) ) @@ -35251,7 +35251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1882) (i32.const 0) ) @@ -35271,7 +35271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1883) (i32.const 0) ) @@ -35291,7 +35291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1884) (i32.const 0) ) @@ -35311,7 +35311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1885) (i32.const 0) ) @@ -35331,7 +35331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1886) (i32.const 0) ) @@ -35351,7 +35351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1887) (i32.const 0) ) @@ -35371,7 +35371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1888) (i32.const 0) ) @@ -35391,7 +35391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1889) (i32.const 0) ) @@ -35411,7 +35411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1890) (i32.const 0) ) @@ -35431,7 +35431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1891) (i32.const 0) ) @@ -35451,7 +35451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1892) (i32.const 0) ) @@ -35471,7 +35471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1893) (i32.const 0) ) @@ -35491,7 +35491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1894) (i32.const 0) ) @@ -35511,7 +35511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1895) (i32.const 0) ) @@ -35531,7 +35531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1896) (i32.const 0) ) @@ -35551,7 +35551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1897) (i32.const 0) ) @@ -35571,7 +35571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1898) (i32.const 0) ) @@ -35591,7 +35591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1899) (i32.const 0) ) @@ -35611,7 +35611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1900) (i32.const 0) ) @@ -35631,7 +35631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1901) (i32.const 0) ) @@ -35651,7 +35651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1902) (i32.const 0) ) @@ -35671,7 +35671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1903) (i32.const 0) ) @@ -35691,7 +35691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1904) (i32.const 0) ) @@ -35711,7 +35711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1905) (i32.const 0) ) @@ -35731,7 +35731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1906) (i32.const 0) ) @@ -35751,7 +35751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1907) (i32.const 0) ) @@ -35771,7 +35771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1916) (i32.const 0) ) @@ -35791,7 +35791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1917) (i32.const 0) ) @@ -35811,7 +35811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1918) (i32.const 0) ) @@ -35831,7 +35831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1919) (i32.const 0) ) @@ -35851,7 +35851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1920) (i32.const 0) ) @@ -35871,7 +35871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1921) (i32.const 0) ) @@ -35891,7 +35891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1922) (i32.const 0) ) @@ -35911,7 +35911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1923) (i32.const 0) ) @@ -35931,7 +35931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1924) (i32.const 0) ) @@ -35951,7 +35951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1925) (i32.const 0) ) @@ -35971,7 +35971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1928) (i32.const 0) ) @@ -35991,7 +35991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1929) (i32.const 0) ) @@ -36011,7 +36011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1930) (i32.const 0) ) @@ -36031,7 +36031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1931) (i32.const 0) ) @@ -36051,7 +36051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1932) (i32.const 0) ) @@ -36071,7 +36071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1933) (i32.const 0) ) @@ -36091,7 +36091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1934) (i32.const 0) ) @@ -36111,7 +36111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1935) (i32.const 0) ) @@ -36131,7 +36131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1936) (i32.const 0) ) @@ -36151,7 +36151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1937) (i32.const 0) ) @@ -36171,7 +36171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1938) (i32.const 0) ) @@ -36191,7 +36191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1939) (i32.const 0) ) @@ -36211,7 +36211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1940) (i32.const 0) ) @@ -36231,7 +36231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1941) (i32.const 0) ) @@ -36251,7 +36251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1942) (i32.const 0) ) @@ -36271,7 +36271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1943) (i32.const 0) ) @@ -36291,7 +36291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1944) (i32.const 0) ) @@ -36311,7 +36311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1945) (i32.const 0) ) @@ -36331,7 +36331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1946) (i32.const 0) ) @@ -36351,7 +36351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1947) (i32.const 0) ) @@ -36371,7 +36371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1948) (i32.const 0) ) @@ -36391,7 +36391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1949) (i32.const 0) ) @@ -36411,7 +36411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1950) (i32.const 0) ) @@ -36431,7 +36431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1951) (i32.const 0) ) @@ -36451,7 +36451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1952) (i32.const 0) ) @@ -36471,7 +36471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1953) (i32.const 0) ) @@ -36491,7 +36491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1954) (i32.const 0) ) @@ -36511,7 +36511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1955) (i32.const 0) ) @@ -36531,7 +36531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1956) (i32.const 0) ) @@ -36551,7 +36551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1957) (i32.const 0) ) @@ -36571,7 +36571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1958) (i32.const 0) ) @@ -36591,7 +36591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1959) (i32.const 0) ) @@ -36611,7 +36611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1960) (i32.const 0) ) @@ -36631,7 +36631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1961) (i32.const 0) ) @@ -36651,7 +36651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1962) (i32.const 0) ) @@ -36671,7 +36671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1963) (i32.const 0) ) @@ -36691,7 +36691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1964) (i32.const 0) ) @@ -36711,7 +36711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1965) (i32.const 0) ) @@ -36731,7 +36731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1966) (i32.const 0) ) @@ -36751,7 +36751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1967) (i32.const 0) ) @@ -36771,7 +36771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1968) (i32.const 0) ) @@ -36791,7 +36791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1969) (i32.const 0) ) @@ -36811,7 +36811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1970) (i32.const 0) ) @@ -36831,7 +36831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1971) (i32.const 0) ) @@ -36851,7 +36851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1972) (i32.const 0) ) @@ -36871,7 +36871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1973) (i32.const 0) ) @@ -36891,7 +36891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1974) (i32.const 0) ) @@ -36911,7 +36911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1975) (i32.const 0) ) @@ -36931,7 +36931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1976) (i32.const 0) ) @@ -36951,7 +36951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1977) (i32.const 0) ) @@ -36971,7 +36971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1978) (i32.const 0) ) @@ -36991,7 +36991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1979) (i32.const 0) ) @@ -37011,7 +37011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1980) (i32.const 0) ) @@ -37031,7 +37031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1981) (i32.const 0) ) @@ -37051,7 +37051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1982) (i32.const 0) ) @@ -37071,7 +37071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1983) (i32.const 0) ) @@ -37091,7 +37091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1984) (i32.const 0) ) @@ -37111,7 +37111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1985) (i32.const 0) ) @@ -37131,7 +37131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2001) (i32.const 0) ) @@ -37151,7 +37151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2002) (i32.const 0) ) @@ -37171,7 +37171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2003) (i32.const 0) ) @@ -37191,7 +37191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2004) (i32.const 0) ) @@ -37211,7 +37211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2005) (i32.const 0) ) @@ -37231,7 +37231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2006) (i32.const 0) ) @@ -37251,7 +37251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2007) (i32.const 0) ) @@ -37271,7 +37271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2008) (i32.const 0) ) @@ -37291,7 +37291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2009) (i32.const 0) ) @@ -37311,7 +37311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2010) (i32.const 0) ) @@ -37331,7 +37331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2013) (i32.const 0) ) @@ -37351,7 +37351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2014) (i32.const 0) ) @@ -37371,7 +37371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2015) (i32.const 0) ) @@ -37391,7 +37391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2016) (i32.const 0) ) @@ -37411,7 +37411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2017) (i32.const 0) ) @@ -37431,7 +37431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2018) (i32.const 0) ) @@ -37451,7 +37451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2019) (i32.const 0) ) @@ -37471,7 +37471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2020) (i32.const 0) ) @@ -37491,7 +37491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2021) (i32.const 0) ) @@ -37511,7 +37511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2022) (i32.const 0) ) @@ -37531,7 +37531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2023) (i32.const 0) ) @@ -37551,7 +37551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2024) (i32.const 0) ) @@ -37571,7 +37571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2025) (i32.const 0) ) @@ -37591,7 +37591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2026) (i32.const 0) ) @@ -37611,7 +37611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2027) (i32.const 0) ) @@ -37631,7 +37631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2028) (i32.const 0) ) @@ -37651,7 +37651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2029) (i32.const 0) ) @@ -37671,7 +37671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2030) (i32.const 0) ) @@ -37691,7 +37691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2031) (i32.const 0) ) @@ -37711,7 +37711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2032) (i32.const 0) ) @@ -37731,7 +37731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2033) (i32.const 0) ) @@ -37751,7 +37751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2034) (i32.const 0) ) @@ -37771,7 +37771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2035) (i32.const 0) ) @@ -37791,7 +37791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2036) (i32.const 0) ) @@ -37811,7 +37811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2037) (i32.const 0) ) @@ -37831,7 +37831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2038) (i32.const 0) ) @@ -37851,7 +37851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2039) (i32.const 0) ) @@ -37871,7 +37871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2040) (i32.const 0) ) @@ -37891,7 +37891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2041) (i32.const 0) ) @@ -37911,7 +37911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2042) (i32.const 0) ) @@ -37931,7 +37931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2043) (i32.const 0) ) @@ -37951,7 +37951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2044) (i32.const 0) ) @@ -37971,7 +37971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2045) (i32.const 0) ) @@ -37991,7 +37991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2046) (i32.const 0) ) @@ -38011,7 +38011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2047) (i32.const 0) ) @@ -38031,7 +38031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2048) (i32.const 0) ) @@ -38051,7 +38051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2049) (i32.const 0) ) @@ -38071,7 +38071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2050) (i32.const 0) ) @@ -38091,7 +38091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2051) (i32.const 0) ) @@ -38111,7 +38111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2052) (i32.const 0) ) @@ -38131,7 +38131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2053) (i32.const 0) ) @@ -38151,7 +38151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2054) (i32.const 0) ) @@ -38171,7 +38171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2055) (i32.const 0) ) @@ -38191,7 +38191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2056) (i32.const 0) ) @@ -38211,7 +38211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2057) (i32.const 0) ) @@ -38231,7 +38231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2058) (i32.const 0) ) @@ -38251,7 +38251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2059) (i32.const 0) ) @@ -38271,7 +38271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2060) (i32.const 0) ) @@ -38291,7 +38291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2061) (i32.const 0) ) @@ -38311,7 +38311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2062) (i32.const 0) ) @@ -38331,7 +38331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2063) (i32.const 0) ) @@ -38351,7 +38351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2064) (i32.const 0) ) @@ -38371,7 +38371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2065) (i32.const 0) ) @@ -38391,7 +38391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2066) (i32.const 0) ) @@ -38411,7 +38411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2067) (i32.const 0) ) @@ -38431,7 +38431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2068) (i32.const 0) ) @@ -38451,7 +38451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2069) (i32.const 0) ) @@ -38471,7 +38471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2070) (i32.const 0) ) @@ -38491,7 +38491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2071) (i32.const 0) ) @@ -38511,7 +38511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2072) (i32.const 0) ) @@ -38531,7 +38531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2073) (i32.const 0) ) @@ -38551,7 +38551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2074) (i32.const 0) ) @@ -38571,7 +38571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2075) (i32.const 0) ) @@ -38591,7 +38591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2076) (i32.const 0) ) @@ -38611,7 +38611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2077) (i32.const 0) ) @@ -38631,7 +38631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2078) (i32.const 0) ) @@ -38651,7 +38651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2087) (i32.const 0) ) @@ -38671,7 +38671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2088) (i32.const 0) ) @@ -38691,7 +38691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2089) (i32.const 0) ) @@ -38711,7 +38711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2090) (i32.const 0) ) @@ -38731,7 +38731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2091) (i32.const 0) ) @@ -38751,7 +38751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2092) (i32.const 0) ) @@ -38771,7 +38771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2093) (i32.const 0) ) @@ -38791,7 +38791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2094) (i32.const 0) ) @@ -38811,7 +38811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2095) (i32.const 0) ) @@ -38831,7 +38831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2096) (i32.const 0) ) @@ -38851,7 +38851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2099) (i32.const 0) ) @@ -38871,7 +38871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2100) (i32.const 0) ) @@ -38891,7 +38891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2101) (i32.const 0) ) @@ -38911,7 +38911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2102) (i32.const 0) ) @@ -38931,7 +38931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2103) (i32.const 0) ) @@ -38951,7 +38951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2104) (i32.const 0) ) @@ -38971,7 +38971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2105) (i32.const 0) ) @@ -38991,7 +38991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2106) (i32.const 0) ) @@ -39011,7 +39011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2107) (i32.const 0) ) @@ -39031,7 +39031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2108) (i32.const 0) ) @@ -39051,7 +39051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2109) (i32.const 0) ) @@ -39071,7 +39071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2110) (i32.const 0) ) @@ -39091,7 +39091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2111) (i32.const 0) ) @@ -39111,7 +39111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2112) (i32.const 0) ) @@ -39131,7 +39131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2113) (i32.const 0) ) @@ -39151,7 +39151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2114) (i32.const 0) ) @@ -39171,7 +39171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2115) (i32.const 0) ) @@ -39191,7 +39191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2116) (i32.const 0) ) @@ -39211,7 +39211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2117) (i32.const 0) ) @@ -39231,7 +39231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2118) (i32.const 0) ) @@ -39251,7 +39251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2119) (i32.const 0) ) @@ -39271,7 +39271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2120) (i32.const 0) ) @@ -39291,7 +39291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2121) (i32.const 0) ) @@ -39311,7 +39311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2122) (i32.const 0) ) @@ -39331,7 +39331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2123) (i32.const 0) ) @@ -39351,7 +39351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2124) (i32.const 0) ) @@ -39371,7 +39371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2125) (i32.const 0) ) @@ -39391,7 +39391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2126) (i32.const 0) ) @@ -39411,7 +39411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2127) (i32.const 0) ) @@ -39431,7 +39431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2128) (i32.const 0) ) @@ -39451,7 +39451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2129) (i32.const 0) ) @@ -39471,7 +39471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2130) (i32.const 0) ) @@ -39491,7 +39491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2131) (i32.const 0) ) @@ -39511,7 +39511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2132) (i32.const 0) ) @@ -39531,7 +39531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2133) (i32.const 0) ) @@ -39551,7 +39551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2134) (i32.const 0) ) @@ -39571,7 +39571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2135) (i32.const 0) ) @@ -39591,7 +39591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2136) (i32.const 0) ) @@ -39611,7 +39611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2137) (i32.const 0) ) @@ -39631,7 +39631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2138) (i32.const 0) ) @@ -39651,7 +39651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2139) (i32.const 0) ) @@ -39671,7 +39671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2140) (i32.const 0) ) @@ -39691,7 +39691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2141) (i32.const 0) ) @@ -39711,7 +39711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2142) (i32.const 0) ) @@ -39731,7 +39731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2143) (i32.const 0) ) @@ -39751,7 +39751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2144) (i32.const 0) ) @@ -39771,7 +39771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2145) (i32.const 0) ) @@ -39791,7 +39791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2146) (i32.const 0) ) @@ -39811,7 +39811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2147) (i32.const 0) ) @@ -39831,7 +39831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2148) (i32.const 0) ) @@ -39851,7 +39851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2149) (i32.const 0) ) @@ -39871,7 +39871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2150) (i32.const 0) ) @@ -39891,7 +39891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2151) (i32.const 0) ) @@ -39911,7 +39911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2152) (i32.const 0) ) @@ -39931,7 +39931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2153) (i32.const 0) ) @@ -39951,7 +39951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2154) (i32.const 0) ) @@ -39971,7 +39971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2155) (i32.const 0) ) @@ -39991,7 +39991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2156) (i32.const 0) ) @@ -40011,7 +40011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2157) (i32.const 0) ) @@ -40031,7 +40031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2158) (i32.const 0) ) @@ -40051,7 +40051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2159) (i32.const 0) ) @@ -40071,7 +40071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2160) (i32.const 0) ) @@ -40091,7 +40091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2161) (i32.const 0) ) @@ -40111,7 +40111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2162) (i32.const 0) ) @@ -40131,7 +40131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2163) (i32.const 0) ) @@ -40151,7 +40151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2164) (i32.const 0) ) @@ -40171,7 +40171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2176) (i32.const 0) ) @@ -40191,7 +40191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2177) (i32.const 0) ) @@ -40211,7 +40211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2178) (i32.const 0) ) @@ -40231,7 +40231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2179) (i32.const 0) ) @@ -40251,7 +40251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2180) (i32.const 0) ) @@ -40271,7 +40271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2181) (i32.const 0) ) @@ -40291,7 +40291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2182) (i32.const 0) ) @@ -40311,7 +40311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2183) (i32.const 0) ) @@ -40331,7 +40331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2184) (i32.const 0) ) @@ -40351,7 +40351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2185) (i32.const 0) ) @@ -40371,7 +40371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2188) (i32.const 0) ) @@ -40391,7 +40391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2189) (i32.const 0) ) @@ -40411,7 +40411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2190) (i32.const 0) ) @@ -40431,7 +40431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2191) (i32.const 0) ) @@ -40451,7 +40451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2192) (i32.const 0) ) @@ -40471,7 +40471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2193) (i32.const 0) ) @@ -40491,7 +40491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2194) (i32.const 0) ) @@ -40511,7 +40511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2195) (i32.const 0) ) @@ -40531,7 +40531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2196) (i32.const 0) ) @@ -40551,7 +40551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2197) (i32.const 0) ) @@ -40571,7 +40571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2198) (i32.const 0) ) @@ -40591,7 +40591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2199) (i32.const 0) ) @@ -40611,7 +40611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2200) (i32.const 0) ) @@ -40631,7 +40631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2201) (i32.const 0) ) @@ -40651,7 +40651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2202) (i32.const 0) ) @@ -40671,7 +40671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2203) (i32.const 0) ) @@ -40691,7 +40691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2204) (i32.const 0) ) @@ -40711,7 +40711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2205) (i32.const 0) ) @@ -40731,7 +40731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2206) (i32.const 0) ) @@ -40751,7 +40751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2207) (i32.const 0) ) @@ -40771,7 +40771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2208) (i32.const 0) ) @@ -40791,7 +40791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2209) (i32.const 0) ) @@ -40811,7 +40811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2210) (i32.const 0) ) @@ -40831,7 +40831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2211) (i32.const 0) ) @@ -40851,7 +40851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2212) (i32.const 0) ) @@ -40871,7 +40871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2213) (i32.const 0) ) @@ -40891,7 +40891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2214) (i32.const 0) ) @@ -40911,7 +40911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2215) (i32.const 0) ) @@ -40931,7 +40931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2216) (i32.const 0) ) @@ -40951,7 +40951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2217) (i32.const 0) ) @@ -40971,7 +40971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2218) (i32.const 0) ) @@ -40991,7 +40991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2219) (i32.const 0) ) @@ -41011,7 +41011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2220) (i32.const 0) ) @@ -41031,7 +41031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2221) (i32.const 0) ) @@ -41051,7 +41051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2222) (i32.const 0) ) @@ -41071,7 +41071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2223) (i32.const 0) ) @@ -41091,7 +41091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2224) (i32.const 0) ) @@ -41111,7 +41111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2225) (i32.const 0) ) @@ -41131,7 +41131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2226) (i32.const 0) ) @@ -41151,7 +41151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2227) (i32.const 0) ) @@ -41171,7 +41171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2228) (i32.const 0) ) @@ -41191,7 +41191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2229) (i32.const 0) ) @@ -41211,7 +41211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2230) (i32.const 0) ) @@ -41231,7 +41231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2231) (i32.const 0) ) @@ -41251,7 +41251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2232) (i32.const 0) ) @@ -41271,7 +41271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2233) (i32.const 0) ) @@ -41291,7 +41291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2234) (i32.const 0) ) @@ -41311,7 +41311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2235) (i32.const 0) ) @@ -41331,7 +41331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2236) (i32.const 0) ) @@ -41351,7 +41351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2237) (i32.const 0) ) @@ -41371,7 +41371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2238) (i32.const 0) ) @@ -41391,7 +41391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2239) (i32.const 0) ) @@ -41411,7 +41411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2240) (i32.const 0) ) @@ -41431,7 +41431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2241) (i32.const 0) ) @@ -41451,7 +41451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2242) (i32.const 0) ) @@ -41471,7 +41471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2243) (i32.const 0) ) @@ -41491,7 +41491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2244) (i32.const 0) ) @@ -41511,7 +41511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2245) (i32.const 0) ) @@ -41531,7 +41531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2246) (i32.const 0) ) @@ -41551,7 +41551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2247) (i32.const 0) ) @@ -41571,7 +41571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2248) (i32.const 0) ) @@ -41591,7 +41591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2249) (i32.const 0) ) @@ -41611,7 +41611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2250) (i32.const 0) ) @@ -41631,7 +41631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2251) (i32.const 0) ) @@ -41651,7 +41651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2252) (i32.const 0) ) @@ -41671,7 +41671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2253) (i32.const 0) ) @@ -41691,7 +41691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2254) (i32.const 0) ) @@ -41711,7 +41711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2255) (i32.const 0) ) @@ -41731,7 +41731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2256) (i32.const 0) ) @@ -41751,7 +41751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2257) (i32.const 0) ) @@ -41771,7 +41771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2258) (i32.const 0) ) @@ -41791,7 +41791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2259) (i32.const 0) ) @@ -41811,7 +41811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2260) (i32.const 0) ) @@ -41831,7 +41831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2261) (i32.const 0) ) @@ -41851,7 +41851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2262) (i32.const 0) ) @@ -41871,7 +41871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2263) (i32.const 0) ) @@ -41891,7 +41891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2264) (i32.const 0) ) @@ -41911,7 +41911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2265) (i32.const 0) ) @@ -41931,7 +41931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2266) (i32.const 0) ) @@ -41951,7 +41951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2267) (i32.const 0) ) @@ -41971,7 +41971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2268) (i32.const 0) ) @@ -41991,7 +41991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2269) (i32.const 0) ) @@ -42011,7 +42011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2270) (i32.const 0) ) @@ -42031,7 +42031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2271) (i32.const 0) ) @@ -42051,7 +42051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2272) (i32.const 0) ) @@ -42071,7 +42071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2273) (i32.const 0) ) @@ -42091,7 +42091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2274) (i32.const 0) ) @@ -42111,7 +42111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2275) (i32.const 0) ) @@ -42131,7 +42131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2276) (i32.const 0) ) @@ -42151,7 +42151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2277) (i32.const 0) ) @@ -42171,7 +42171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2278) (i32.const 0) ) @@ -42191,7 +42191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2279) (i32.const 0) ) @@ -42211,7 +42211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2288) (i32.const 0) ) @@ -42231,7 +42231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2289) (i32.const 0) ) @@ -42251,7 +42251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2290) (i32.const 0) ) @@ -42271,7 +42271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2291) (i32.const 0) ) @@ -42291,7 +42291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2292) (i32.const 0) ) @@ -42311,7 +42311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2293) (i32.const 0) ) @@ -42331,7 +42331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2294) (i32.const 0) ) @@ -42351,7 +42351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2295) (i32.const 0) ) @@ -42371,7 +42371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2296) (i32.const 0) ) @@ -42391,7 +42391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2297) (i32.const 0) ) @@ -42411,7 +42411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2300) (i32.const 0) ) @@ -42431,7 +42431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2301) (i32.const 0) ) @@ -42451,7 +42451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2302) (i32.const 0) ) @@ -42471,7 +42471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2303) (i32.const 0) ) @@ -42491,7 +42491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2304) (i32.const 0) ) @@ -42511,7 +42511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2305) (i32.const 0) ) @@ -42531,7 +42531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2306) (i32.const 0) ) @@ -42551,7 +42551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2307) (i32.const 0) ) @@ -42571,7 +42571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2308) (i32.const 0) ) @@ -42591,7 +42591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2309) (i32.const 0) ) @@ -42611,7 +42611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2310) (i32.const 0) ) @@ -42631,7 +42631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2311) (i32.const 0) ) @@ -42651,7 +42651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2312) (i32.const 0) ) @@ -42671,7 +42671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2313) (i32.const 0) ) @@ -42691,7 +42691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2314) (i32.const 0) ) @@ -42711,7 +42711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2315) (i32.const 0) ) @@ -42731,7 +42731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2316) (i32.const 0) ) @@ -42751,7 +42751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2317) (i32.const 0) ) @@ -42771,7 +42771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2318) (i32.const 0) ) @@ -42791,7 +42791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2319) (i32.const 0) ) @@ -42811,7 +42811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2320) (i32.const 0) ) @@ -42831,7 +42831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2321) (i32.const 0) ) @@ -42851,7 +42851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2322) (i32.const 0) ) @@ -42871,7 +42871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2323) (i32.const 0) ) @@ -42891,7 +42891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2324) (i32.const 0) ) @@ -42911,7 +42911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2325) (i32.const 0) ) @@ -42931,7 +42931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2326) (i32.const 0) ) @@ -42951,7 +42951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2327) (i32.const 0) ) @@ -42971,7 +42971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2328) (i32.const 0) ) @@ -42991,7 +42991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2329) (i32.const 0) ) @@ -43011,7 +43011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2330) (i32.const 0) ) @@ -43031,7 +43031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2331) (i32.const 0) ) @@ -43051,7 +43051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2332) (i32.const 0) ) @@ -43071,7 +43071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2333) (i32.const 0) ) @@ -43091,7 +43091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2334) (i32.const 0) ) @@ -43111,7 +43111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2335) (i32.const 0) ) @@ -43131,7 +43131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2336) (i32.const 0) ) @@ -43151,7 +43151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2337) (i32.const 0) ) @@ -43171,7 +43171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2338) (i32.const 0) ) @@ -43191,7 +43191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2339) (i32.const 0) ) @@ -43211,7 +43211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2340) (i32.const 0) ) @@ -43231,7 +43231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2341) (i32.const 0) ) @@ -43251,7 +43251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2342) (i32.const 0) ) @@ -43271,7 +43271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2343) (i32.const 0) ) @@ -43291,7 +43291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2344) (i32.const 0) ) @@ -43311,7 +43311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2345) (i32.const 0) ) @@ -43331,7 +43331,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2346) (i32.const 0) ) @@ -43351,7 +43351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2347) (i32.const 0) ) @@ -43371,7 +43371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2348) (i32.const 0) ) @@ -43391,7 +43391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2349) (i32.const 0) ) @@ -43411,7 +43411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2350) (i32.const 0) ) @@ -43431,7 +43431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2351) (i32.const 0) ) @@ -43451,7 +43451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2352) (i32.const 0) ) @@ -43471,7 +43471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2353) (i32.const 0) ) @@ -43491,7 +43491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2354) (i32.const 0) ) @@ -43511,7 +43511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2355) (i32.const 0) ) @@ -43531,7 +43531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2356) (i32.const 0) ) @@ -43551,7 +43551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2357) (i32.const 0) ) @@ -43571,7 +43571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2358) (i32.const 0) ) @@ -43591,7 +43591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2359) (i32.const 0) ) @@ -43611,7 +43611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2360) (i32.const 0) ) @@ -43631,7 +43631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2361) (i32.const 0) ) @@ -43651,7 +43651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2362) (i32.const 0) ) @@ -43671,7 +43671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2363) (i32.const 0) ) @@ -43691,7 +43691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2364) (i32.const 0) ) @@ -43711,7 +43711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2365) (i32.const 0) ) @@ -43731,7 +43731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2366) (i32.const 0) ) @@ -43751,7 +43751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2367) (i32.const 0) ) @@ -43771,7 +43771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2368) (i32.const 0) ) @@ -43791,7 +43791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2369) (i32.const 0) ) @@ -43811,7 +43811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2370) (i32.const 0) ) @@ -43831,7 +43831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2371) (i32.const 0) ) @@ -43851,7 +43851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2372) (i32.const 0) ) @@ -43871,7 +43871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2373) (i32.const 0) ) @@ -43891,7 +43891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2374) (i32.const 0) ) @@ -43911,7 +43911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2375) (i32.const 0) ) @@ -43931,7 +43931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2376) (i32.const 0) ) @@ -43951,7 +43951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2377) (i32.const 0) ) @@ -43971,7 +43971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2378) (i32.const 0) ) @@ -43991,7 +43991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2379) (i32.const 0) ) @@ -44011,7 +44011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2380) (i32.const 0) ) @@ -44031,7 +44031,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2381) (i32.const 0) ) @@ -44051,7 +44051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2382) (i32.const 0) ) @@ -44071,7 +44071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2383) (i32.const 0) ) @@ -44091,7 +44091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2384) (i32.const 0) ) @@ -44111,7 +44111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2385) (i32.const 0) ) @@ -44131,7 +44131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2386) (i32.const 0) ) @@ -44151,7 +44151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2387) (i32.const 0) ) @@ -44171,7 +44171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2388) (i32.const 0) ) @@ -44191,7 +44191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2389) (i32.const 0) ) @@ -44211,7 +44211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2390) (i32.const 0) ) @@ -44231,7 +44231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2391) (i32.const 0) ) @@ -44273,7 +44273,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2400) (i32.const 2) ) @@ -44328,7 +44328,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2408) (i32.const 2) ) @@ -44357,7 +44357,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2422) (i32.const 0) ) @@ -44376,7 +44376,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2423) (i32.const 0) ) @@ -44395,7 +44395,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2424) (i32.const 0) ) @@ -44414,7 +44414,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2425) (i32.const 0) ) @@ -44433,7 +44433,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2426) (i32.const 0) ) @@ -44452,7 +44452,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2427) (i32.const 0) ) @@ -44471,7 +44471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2428) (i32.const 0) ) @@ -44490,7 +44490,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2429) (i32.const 0) ) @@ -44509,7 +44509,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2430) (i32.const 0) ) @@ -44528,7 +44528,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2431) (i32.const 0) ) @@ -44547,7 +44547,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2434) (i32.const 0) ) @@ -44566,7 +44566,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2435) (i32.const 0) ) @@ -44585,7 +44585,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2436) (i32.const 0) ) @@ -44604,7 +44604,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2437) (i32.const 0) ) @@ -44623,7 +44623,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2438) (i32.const 0) ) @@ -44642,7 +44642,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2439) (i32.const 0) ) @@ -44661,7 +44661,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2440) (i32.const 0) ) @@ -44680,7 +44680,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2441) (i32.const 0) ) @@ -44699,7 +44699,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2442) (i32.const 0) ) @@ -44718,7 +44718,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2443) (i32.const 0) ) @@ -44737,7 +44737,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2444) (i32.const 0) ) @@ -44756,7 +44756,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2445) (i32.const 0) ) @@ -44775,7 +44775,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2446) (i32.const 0) ) @@ -44794,7 +44794,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2447) (i32.const 0) ) @@ -44813,7 +44813,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2448) (i32.const 0) ) @@ -44832,7 +44832,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2449) (i32.const 0) ) @@ -44851,7 +44851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2450) (i32.const 0) ) @@ -44870,7 +44870,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2459) (i32.const 0) ) @@ -44889,7 +44889,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2460) (i32.const 0) ) @@ -44908,7 +44908,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2461) (i32.const 0) ) @@ -44927,7 +44927,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2462) (i32.const 0) ) @@ -44946,7 +44946,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2463) (i32.const 0) ) @@ -44965,7 +44965,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2464) (i32.const 0) ) @@ -44984,7 +44984,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2465) (i32.const 0) ) @@ -45003,7 +45003,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2466) (i32.const 0) ) @@ -45022,7 +45022,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2467) (i32.const 0) ) @@ -45041,7 +45041,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2468) (i32.const 0) ) @@ -45060,7 +45060,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2471) (i32.const 0) ) @@ -45079,7 +45079,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2472) (i32.const 0) ) @@ -45098,7 +45098,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2473) (i32.const 0) ) @@ -45117,7 +45117,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2474) (i32.const 0) ) @@ -45136,7 +45136,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2475) (i32.const 0) ) @@ -45155,7 +45155,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2476) (i32.const 0) ) @@ -45174,7 +45174,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2477) (i32.const 0) ) @@ -45193,7 +45193,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2478) (i32.const 0) ) @@ -45212,7 +45212,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2479) (i32.const 0) ) @@ -45231,7 +45231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2480) (i32.const 0) ) @@ -45250,7 +45250,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2481) (i32.const 0) ) @@ -45269,7 +45269,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2482) (i32.const 0) ) @@ -45288,7 +45288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2483) (i32.const 0) ) @@ -45307,7 +45307,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2484) (i32.const 0) ) @@ -45326,7 +45326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2485) (i32.const 0) ) @@ -45345,7 +45345,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2486) (i32.const 0) ) @@ -45364,7 +45364,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2487) (i32.const 0) ) @@ -45383,7 +45383,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2498) (i32.const 0) ) @@ -45402,7 +45402,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2499) (i32.const 0) ) @@ -45421,7 +45421,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2500) (i32.const 0) ) @@ -45440,7 +45440,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2501) (i32.const 0) ) @@ -45459,7 +45459,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2502) (i32.const 0) ) @@ -45478,7 +45478,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2503) (i32.const 0) ) @@ -45497,7 +45497,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2504) (i32.const 0) ) @@ -45516,7 +45516,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2505) (i32.const 0) ) @@ -45535,7 +45535,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2506) (i32.const 0) ) @@ -45554,7 +45554,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2514) (i32.const 0) ) @@ -45573,7 +45573,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2515) (i32.const 0) ) @@ -45592,7 +45592,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2516) (i32.const 0) ) @@ -45611,7 +45611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2517) (i32.const 0) ) @@ -45630,7 +45630,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2518) (i32.const 0) ) @@ -45649,7 +45649,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2519) (i32.const 0) ) @@ -45668,7 +45668,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2520) (i32.const 0) ) @@ -45687,7 +45687,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2521) (i32.const 0) ) @@ -45706,7 +45706,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2522) (i32.const 0) ) @@ -45726,7 +45726,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2533) (i32.const 0) ) @@ -45746,7 +45746,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2534) (i32.const 0) ) @@ -45766,7 +45766,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2535) (i32.const 0) ) @@ -45786,7 +45786,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2536) (i32.const 0) ) @@ -45806,7 +45806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2537) (i32.const 0) ) @@ -45826,7 +45826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2538) (i32.const 0) ) @@ -45846,7 +45846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2539) (i32.const 0) ) @@ -45866,7 +45866,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2540) (i32.const 0) ) @@ -45886,7 +45886,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2541) (i32.const 0) ) @@ -45906,7 +45906,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2542) (i32.const 0) ) @@ -45926,7 +45926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2545) (i32.const 0) ) @@ -45946,7 +45946,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2546) (i32.const 0) ) @@ -45966,7 +45966,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2547) (i32.const 0) ) @@ -45986,7 +45986,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2548) (i32.const 0) ) @@ -46006,7 +46006,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2549) (i32.const 0) ) @@ -46026,7 +46026,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2550) (i32.const 0) ) @@ -46046,7 +46046,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2551) (i32.const 0) ) @@ -46066,7 +46066,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2552) (i32.const 0) ) @@ -46086,7 +46086,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2553) (i32.const 0) ) @@ -46106,7 +46106,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2554) (i32.const 0) ) @@ -46126,7 +46126,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2555) (i32.const 0) ) @@ -46146,7 +46146,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2556) (i32.const 0) ) @@ -46166,7 +46166,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2557) (i32.const 0) ) @@ -46186,7 +46186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2558) (i32.const 0) ) @@ -46206,7 +46206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2559) (i32.const 0) ) @@ -46226,7 +46226,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2560) (i32.const 0) ) @@ -46246,7 +46246,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2561) (i32.const 0) ) @@ -46266,7 +46266,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2562) (i32.const 0) ) @@ -46286,7 +46286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2563) (i32.const 0) ) @@ -46306,7 +46306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2564) (i32.const 0) ) @@ -46326,7 +46326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2565) (i32.const 0) ) @@ -46346,7 +46346,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2566) (i32.const 0) ) @@ -46366,7 +46366,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2567) (i32.const 0) ) @@ -46386,7 +46386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2568) (i32.const 0) ) @@ -46406,7 +46406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2569) (i32.const 0) ) @@ -46426,7 +46426,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2570) (i32.const 0) ) @@ -46446,7 +46446,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2571) (i32.const 0) ) @@ -46466,7 +46466,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2572) (i32.const 0) ) @@ -46486,7 +46486,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2573) (i32.const 0) ) @@ -46506,7 +46506,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2574) (i32.const 0) ) @@ -46526,7 +46526,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2575) (i32.const 0) ) @@ -46546,7 +46546,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2576) (i32.const 0) ) @@ -46566,7 +46566,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2577) (i32.const 0) ) @@ -46586,7 +46586,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2578) (i32.const 0) ) @@ -46606,7 +46606,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2579) (i32.const 0) ) @@ -46626,7 +46626,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2580) (i32.const 0) ) @@ -46646,7 +46646,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2581) (i32.const 0) ) @@ -46666,7 +46666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2582) (i32.const 0) ) @@ -46686,7 +46686,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2583) (i32.const 0) ) @@ -46706,7 +46706,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2584) (i32.const 0) ) @@ -46726,7 +46726,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2585) (i32.const 0) ) @@ -46746,7 +46746,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2586) (i32.const 0) ) @@ -46766,7 +46766,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2587) (i32.const 0) ) @@ -46786,7 +46786,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2588) (i32.const 0) ) @@ -46806,7 +46806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2589) (i32.const 0) ) @@ -46826,7 +46826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2590) (i32.const 0) ) @@ -46846,7 +46846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2591) (i32.const 0) ) @@ -46866,7 +46866,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2592) (i32.const 0) ) @@ -46886,7 +46886,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2593) (i32.const 0) ) @@ -46906,7 +46906,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2594) (i32.const 0) ) @@ -46926,7 +46926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2595) (i32.const 0) ) @@ -46946,7 +46946,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2596) (i32.const 0) ) @@ -46966,7 +46966,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2597) (i32.const 0) ) @@ -46986,7 +46986,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2598) (i32.const 0) ) @@ -47006,7 +47006,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2599) (i32.const 0) ) @@ -47026,7 +47026,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2600) (i32.const 0) ) @@ -47046,7 +47046,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2601) (i32.const 0) ) @@ -47066,7 +47066,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2602) (i32.const 0) ) @@ -47086,7 +47086,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2603) (i32.const 0) ) @@ -47106,7 +47106,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2604) (i32.const 0) ) @@ -47126,7 +47126,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2605) (i32.const 0) ) @@ -47146,7 +47146,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2606) (i32.const 0) ) @@ -47166,7 +47166,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2607) (i32.const 0) ) @@ -47186,7 +47186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2608) (i32.const 0) ) @@ -47206,7 +47206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2609) (i32.const 0) ) @@ -47226,7 +47226,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2610) (i32.const 0) ) @@ -47246,7 +47246,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2611) (i32.const 0) ) @@ -47266,7 +47266,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2620) (i32.const 0) ) @@ -47286,7 +47286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2621) (i32.const 0) ) @@ -47306,7 +47306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2622) (i32.const 0) ) @@ -47326,7 +47326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2623) (i32.const 0) ) @@ -47346,7 +47346,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2624) (i32.const 0) ) @@ -47366,7 +47366,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2625) (i32.const 0) ) @@ -47386,7 +47386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2626) (i32.const 0) ) @@ -47406,7 +47406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2627) (i32.const 0) ) @@ -47426,7 +47426,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2628) (i32.const 0) ) @@ -47446,7 +47446,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2629) (i32.const 0) ) @@ -47466,7 +47466,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2632) (i32.const 0) ) @@ -47486,7 +47486,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2633) (i32.const 0) ) @@ -47506,7 +47506,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2634) (i32.const 0) ) @@ -47526,7 +47526,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2635) (i32.const 0) ) @@ -47546,7 +47546,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2636) (i32.const 0) ) @@ -47566,7 +47566,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2637) (i32.const 0) ) @@ -47586,7 +47586,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2638) (i32.const 0) ) @@ -47606,7 +47606,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2639) (i32.const 0) ) @@ -47626,7 +47626,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2640) (i32.const 0) ) @@ -47646,7 +47646,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2641) (i32.const 0) ) @@ -47666,7 +47666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2642) (i32.const 0) ) @@ -47686,7 +47686,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2643) (i32.const 0) ) @@ -47706,7 +47706,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2644) (i32.const 0) ) @@ -47726,7 +47726,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2645) (i32.const 0) ) @@ -47746,7 +47746,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2646) (i32.const 0) ) @@ -47766,7 +47766,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2647) (i32.const 0) ) @@ -47786,7 +47786,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2648) (i32.const 0) ) @@ -47806,7 +47806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2649) (i32.const 0) ) @@ -47826,7 +47826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2650) (i32.const 0) ) @@ -47846,7 +47846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2651) (i32.const 0) ) @@ -47866,7 +47866,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2652) (i32.const 0) ) @@ -47886,7 +47886,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2653) (i32.const 0) ) @@ -47906,7 +47906,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2654) (i32.const 0) ) @@ -47926,7 +47926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2655) (i32.const 0) ) @@ -47946,7 +47946,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2656) (i32.const 0) ) @@ -47966,7 +47966,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2657) (i32.const 0) ) @@ -47986,7 +47986,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2658) (i32.const 0) ) @@ -48006,7 +48006,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2659) (i32.const 0) ) @@ -48026,7 +48026,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2660) (i32.const 0) ) @@ -48046,7 +48046,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2661) (i32.const 0) ) @@ -48066,7 +48066,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2662) (i32.const 0) ) @@ -48086,7 +48086,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2663) (i32.const 0) ) @@ -48106,7 +48106,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2664) (i32.const 0) ) @@ -48126,7 +48126,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2665) (i32.const 0) ) @@ -48146,7 +48146,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2666) (i32.const 0) ) @@ -48166,7 +48166,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2667) (i32.const 0) ) @@ -48186,7 +48186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2668) (i32.const 0) ) @@ -48206,7 +48206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2669) (i32.const 0) ) @@ -48226,7 +48226,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2670) (i32.const 0) ) @@ -48246,7 +48246,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2671) (i32.const 0) ) @@ -48266,7 +48266,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2672) (i32.const 0) ) @@ -48286,7 +48286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2673) (i32.const 0) ) @@ -48306,7 +48306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2674) (i32.const 0) ) @@ -48326,7 +48326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2675) (i32.const 0) ) @@ -48346,7 +48346,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2676) (i32.const 0) ) @@ -48366,7 +48366,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2677) (i32.const 0) ) @@ -48386,7 +48386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2678) (i32.const 0) ) @@ -48406,7 +48406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2679) (i32.const 0) ) @@ -48426,7 +48426,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2680) (i32.const 0) ) @@ -48446,7 +48446,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2681) (i32.const 0) ) @@ -48466,7 +48466,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2682) (i32.const 0) ) @@ -48486,7 +48486,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2683) (i32.const 0) ) @@ -48506,7 +48506,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2684) (i32.const 0) ) @@ -48526,7 +48526,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2685) (i32.const 0) ) @@ -48546,7 +48546,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2686) (i32.const 0) ) @@ -48566,7 +48566,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2687) (i32.const 0) ) @@ -48586,7 +48586,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2688) (i32.const 0) ) @@ -48606,7 +48606,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2689) (i32.const 0) ) @@ -48626,7 +48626,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2690) (i32.const 0) ) @@ -48646,7 +48646,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2691) (i32.const 0) ) @@ -48666,7 +48666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2692) (i32.const 0) ) @@ -48686,7 +48686,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2693) (i32.const 0) ) @@ -48706,7 +48706,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2694) (i32.const 0) ) @@ -48726,7 +48726,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2695) (i32.const 0) ) @@ -48746,7 +48746,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2696) (i32.const 0) ) @@ -48766,7 +48766,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2697) (i32.const 0) ) @@ -48786,7 +48786,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2698) (i32.const 0) ) @@ -48805,7 +48805,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2763) (i32.const 0) ) @@ -48824,7 +48824,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2764) (i32.const 0) ) @@ -48843,7 +48843,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2765) (i32.const 0) ) @@ -48862,7 +48862,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2766) (i32.const 0) ) @@ -48881,7 +48881,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2767) (i32.const 0) ) @@ -48900,7 +48900,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2768) (i32.const 0) ) @@ -48919,7 +48919,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2769) (i32.const 0) ) @@ -48938,7 +48938,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2770) (i32.const 0) ) @@ -48957,7 +48957,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2771) (i32.const 0) ) @@ -48976,7 +48976,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2772) (i32.const 0) ) @@ -48995,7 +48995,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2775) (i32.const 0) ) @@ -49014,7 +49014,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2776) (i32.const 0) ) @@ -49033,7 +49033,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2777) (i32.const 0) ) @@ -49052,7 +49052,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2778) (i32.const 0) ) @@ -49071,7 +49071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2779) (i32.const 0) ) @@ -49090,7 +49090,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2788) (i32.const 0) ) @@ -49109,7 +49109,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2789) (i32.const 0) ) @@ -49128,7 +49128,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2790) (i32.const 0) ) @@ -49147,7 +49147,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2791) (i32.const 0) ) @@ -49166,7 +49166,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2792) (i32.const 0) ) @@ -49185,7 +49185,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2793) (i32.const 0) ) @@ -49204,7 +49204,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2794) (i32.const 0) ) @@ -49223,7 +49223,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2795) (i32.const 0) ) @@ -49242,7 +49242,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2796) (i32.const 0) ) @@ -49261,7 +49261,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2797) (i32.const 0) ) @@ -49280,7 +49280,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2800) (i32.const 0) ) @@ -49299,7 +49299,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2801) (i32.const 0) ) @@ -49318,7 +49318,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2802) (i32.const 0) ) @@ -49337,7 +49337,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2803) (i32.const 0) ) @@ -49356,7 +49356,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2804) (i32.const 0) ) @@ -49375,7 +49375,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2816) (i32.const 0) ) @@ -49394,7 +49394,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2817) (i32.const 0) ) @@ -49413,7 +49413,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2818) (i32.const 0) ) @@ -49432,7 +49432,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2819) (i32.const 0) ) @@ -49451,7 +49451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2820) (i32.const 0) ) @@ -49470,7 +49470,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2821) (i32.const 0) ) @@ -49489,7 +49489,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2822) (i32.const 0) ) @@ -49508,7 +49508,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2823) (i32.const 0) ) @@ -49527,7 +49527,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2824) (i32.const 0) ) @@ -49546,7 +49546,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2825) (i32.const 0) ) @@ -49565,7 +49565,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2828) (i32.const 0) ) @@ -49584,7 +49584,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2829) (i32.const 0) ) @@ -49603,7 +49603,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2830) (i32.const 0) ) @@ -49622,7 +49622,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2831) (i32.const 0) ) @@ -49641,7 +49641,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2832) (i32.const 0) ) @@ -49660,7 +49660,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2833) (i32.const 0) ) @@ -49679,7 +49679,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2834) (i32.const 0) ) @@ -49698,7 +49698,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2835) (i32.const 0) ) @@ -49717,7 +49717,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2836) (i32.const 0) ) @@ -49736,7 +49736,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2837) (i32.const 0) ) @@ -49755,7 +49755,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2838) (i32.const 0) ) @@ -49774,7 +49774,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2839) (i32.const 0) ) @@ -49793,7 +49793,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2840) (i32.const 0) ) @@ -49812,7 +49812,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2841) (i32.const 0) ) @@ -49831,7 +49831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2842) (i32.const 0) ) @@ -49850,7 +49850,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2843) (i32.const 0) ) @@ -49869,7 +49869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2844) (i32.const 0) ) @@ -49888,7 +49888,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2845) (i32.const 0) ) @@ -49907,7 +49907,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2846) (i32.const 0) ) @@ -49926,7 +49926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2847) (i32.const 0) ) @@ -49945,7 +49945,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2848) (i32.const 0) ) @@ -49964,7 +49964,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2849) (i32.const 0) ) @@ -49983,7 +49983,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2850) (i32.const 0) ) @@ -50002,7 +50002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2851) (i32.const 0) ) @@ -50021,7 +50021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2852) (i32.const 0) ) @@ -50040,7 +50040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2853) (i32.const 0) ) @@ -50059,7 +50059,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2854) (i32.const 0) ) @@ -50078,7 +50078,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2855) (i32.const 0) ) @@ -50097,7 +50097,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2856) (i32.const 0) ) @@ -50116,7 +50116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2857) (i32.const 0) ) @@ -50135,7 +50135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2858) (i32.const 0) ) @@ -50154,7 +50154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2859) (i32.const 0) ) @@ -50173,7 +50173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2860) (i32.const 0) ) @@ -50192,7 +50192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2861) (i32.const 0) ) @@ -50211,7 +50211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2862) (i32.const 0) ) @@ -50230,7 +50230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2863) (i32.const 0) ) @@ -50249,7 +50249,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2864) (i32.const 0) ) @@ -50268,7 +50268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2865) (i32.const 0) ) @@ -50287,7 +50287,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2866) (i32.const 0) ) @@ -50306,7 +50306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2867) (i32.const 0) ) @@ -50325,7 +50325,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2868) (i32.const 0) ) @@ -50344,7 +50344,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2869) (i32.const 0) ) @@ -50363,7 +50363,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2870) (i32.const 0) ) @@ -50382,7 +50382,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2871) (i32.const 0) ) @@ -50401,7 +50401,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2872) (i32.const 0) ) @@ -50420,7 +50420,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2873) (i32.const 0) ) @@ -50439,7 +50439,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2874) (i32.const 0) ) @@ -50458,7 +50458,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2875) (i32.const 0) ) @@ -50477,7 +50477,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2876) (i32.const 0) ) @@ -50496,7 +50496,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2877) (i32.const 0) ) @@ -50515,7 +50515,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2878) (i32.const 0) ) @@ -50534,7 +50534,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2879) (i32.const 0) ) @@ -50553,7 +50553,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2880) (i32.const 0) ) @@ -50572,7 +50572,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2881) (i32.const 0) ) @@ -50591,7 +50591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2882) (i32.const 0) ) @@ -50610,7 +50610,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2883) (i32.const 0) ) @@ -50629,7 +50629,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2884) (i32.const 0) ) @@ -50648,7 +50648,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2885) (i32.const 0) ) @@ -50667,7 +50667,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2886) (i32.const 0) ) @@ -50686,7 +50686,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2887) (i32.const 0) ) @@ -50705,7 +50705,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2888) (i32.const 0) ) @@ -50724,7 +50724,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2889) (i32.const 0) ) @@ -50743,7 +50743,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2890) (i32.const 0) ) @@ -50762,7 +50762,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2891) (i32.const 0) ) @@ -50781,7 +50781,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2892) (i32.const 0) ) @@ -50800,7 +50800,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2893) (i32.const 0) ) @@ -50819,7 +50819,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2894) (i32.const 0) ) @@ -50838,7 +50838,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2895) (i32.const 0) ) @@ -50857,7 +50857,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2896) (i32.const 0) ) @@ -50876,7 +50876,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2897) (i32.const 0) ) @@ -50895,7 +50895,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2898) (i32.const 0) ) @@ -50914,7 +50914,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2899) (i32.const 0) ) @@ -50933,7 +50933,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2900) (i32.const 0) ) @@ -50952,7 +50952,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2901) (i32.const 0) ) @@ -50971,7 +50971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2910) (i32.const 0) ) @@ -50990,7 +50990,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2911) (i32.const 0) ) @@ -51009,7 +51009,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2912) (i32.const 0) ) @@ -51028,7 +51028,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2913) (i32.const 0) ) @@ -51047,7 +51047,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2914) (i32.const 0) ) @@ -51066,7 +51066,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2915) (i32.const 0) ) @@ -51085,7 +51085,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2916) (i32.const 0) ) @@ -51104,7 +51104,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2917) (i32.const 0) ) @@ -51123,7 +51123,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2918) (i32.const 0) ) @@ -51142,7 +51142,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2919) (i32.const 0) ) @@ -51161,7 +51161,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2922) (i32.const 0) ) @@ -51180,7 +51180,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2923) (i32.const 0) ) @@ -51199,7 +51199,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2924) (i32.const 0) ) @@ -51218,7 +51218,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2925) (i32.const 0) ) @@ -51237,7 +51237,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2926) (i32.const 0) ) @@ -51256,7 +51256,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2927) (i32.const 0) ) @@ -51275,7 +51275,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2928) (i32.const 0) ) @@ -51294,7 +51294,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2929) (i32.const 0) ) @@ -51313,7 +51313,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2930) (i32.const 0) ) @@ -51332,7 +51332,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2931) (i32.const 0) ) @@ -51351,7 +51351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2932) (i32.const 0) ) @@ -51370,7 +51370,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2933) (i32.const 0) ) @@ -51389,7 +51389,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2934) (i32.const 0) ) @@ -51408,7 +51408,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2935) (i32.const 0) ) @@ -51427,7 +51427,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2936) (i32.const 0) ) @@ -51446,7 +51446,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2937) (i32.const 0) ) @@ -51465,7 +51465,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2938) (i32.const 0) ) @@ -51484,7 +51484,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2939) (i32.const 0) ) @@ -51503,7 +51503,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2940) (i32.const 0) ) @@ -51522,7 +51522,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2941) (i32.const 0) ) @@ -51541,7 +51541,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2942) (i32.const 0) ) @@ -51560,7 +51560,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2943) (i32.const 0) ) @@ -51579,7 +51579,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3008) (i32.const 0) ) @@ -51598,7 +51598,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3009) (i32.const 0) ) @@ -51617,7 +51617,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3010) (i32.const 0) ) @@ -51636,7 +51636,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3011) (i32.const 0) ) @@ -51655,7 +51655,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3012) (i32.const 0) ) @@ -51674,7 +51674,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3013) (i32.const 0) ) @@ -51693,7 +51693,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3014) (i32.const 0) ) @@ -51712,7 +51712,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3015) (i32.const 0) ) @@ -51731,7 +51731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3016) (i32.const 0) ) @@ -51750,7 +51750,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3017) (i32.const 0) ) @@ -51769,7 +51769,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3020) (i32.const 0) ) @@ -51788,7 +51788,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3021) (i32.const 0) ) @@ -51807,7 +51807,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3022) (i32.const 0) ) @@ -51826,7 +51826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3023) (i32.const 0) ) @@ -51845,7 +51845,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3024) (i32.const 0) ) @@ -51864,7 +51864,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3033) (i32.const 0) ) @@ -51883,7 +51883,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3034) (i32.const 0) ) @@ -51902,7 +51902,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3035) (i32.const 0) ) @@ -51921,7 +51921,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3036) (i32.const 0) ) @@ -51940,7 +51940,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3037) (i32.const 0) ) @@ -51959,7 +51959,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3038) (i32.const 0) ) @@ -51978,7 +51978,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3039) (i32.const 0) ) @@ -51997,7 +51997,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3040) (i32.const 0) ) @@ -52016,7 +52016,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3041) (i32.const 0) ) @@ -52035,7 +52035,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3042) (i32.const 0) ) @@ -52054,7 +52054,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3045) (i32.const 0) ) @@ -52073,7 +52073,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3046) (i32.const 0) ) @@ -52092,7 +52092,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3047) (i32.const 0) ) @@ -52111,7 +52111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3048) (i32.const 0) ) @@ -52130,7 +52130,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3049) (i32.const 0) ) @@ -52149,7 +52149,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3061) (i32.const 0) ) @@ -52168,7 +52168,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3062) (i32.const 0) ) @@ -52187,7 +52187,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3063) (i32.const 0) ) @@ -52206,7 +52206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3064) (i32.const 0) ) @@ -52225,7 +52225,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3065) (i32.const 0) ) @@ -52244,7 +52244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3066) (i32.const 0) ) @@ -52263,7 +52263,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3067) (i32.const 0) ) @@ -52282,7 +52282,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3068) (i32.const 0) ) @@ -52301,7 +52301,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3069) (i32.const 0) ) @@ -52320,7 +52320,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3070) (i32.const 0) ) @@ -52339,7 +52339,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3073) (i32.const 0) ) @@ -52358,7 +52358,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3074) (i32.const 0) ) @@ -52377,7 +52377,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3075) (i32.const 0) ) @@ -52396,7 +52396,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3076) (i32.const 0) ) @@ -52415,7 +52415,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3077) (i32.const 0) ) @@ -52434,7 +52434,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3078) (i32.const 0) ) @@ -52453,7 +52453,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3079) (i32.const 0) ) @@ -52472,7 +52472,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3080) (i32.const 0) ) @@ -52491,7 +52491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3081) (i32.const 0) ) @@ -52510,7 +52510,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3082) (i32.const 0) ) @@ -52529,7 +52529,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3083) (i32.const 0) ) @@ -52548,7 +52548,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3084) (i32.const 0) ) @@ -52567,7 +52567,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3085) (i32.const 0) ) @@ -52586,7 +52586,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3086) (i32.const 0) ) @@ -52605,7 +52605,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3087) (i32.const 0) ) @@ -52624,7 +52624,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3096) (i32.const 0) ) @@ -52643,7 +52643,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3097) (i32.const 0) ) @@ -52662,7 +52662,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3098) (i32.const 0) ) @@ -52681,7 +52681,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3099) (i32.const 0) ) @@ -52700,7 +52700,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3100) (i32.const 0) ) @@ -52719,7 +52719,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3101) (i32.const 0) ) @@ -52738,7 +52738,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3102) (i32.const 0) ) @@ -52757,7 +52757,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3103) (i32.const 0) ) @@ -52776,7 +52776,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3104) (i32.const 0) ) @@ -52795,7 +52795,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3105) (i32.const 0) ) @@ -52814,7 +52814,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3108) (i32.const 0) ) @@ -52833,7 +52833,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3109) (i32.const 0) ) @@ -52852,7 +52852,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3110) (i32.const 0) ) @@ -52871,7 +52871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3111) (i32.const 0) ) @@ -52890,7 +52890,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3112) (i32.const 0) ) @@ -52909,7 +52909,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3113) (i32.const 0) ) @@ -52928,7 +52928,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3114) (i32.const 0) ) @@ -52947,7 +52947,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3115) (i32.const 0) ) @@ -52966,7 +52966,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3116) (i32.const 0) ) @@ -52985,7 +52985,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3117) (i32.const 0) ) @@ -53004,7 +53004,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3118) (i32.const 0) ) @@ -53023,7 +53023,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3119) (i32.const 0) ) @@ -53042,7 +53042,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3120) (i32.const 0) ) @@ -53061,7 +53061,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3121) (i32.const 0) ) @@ -53080,7 +53080,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3122) (i32.const 0) ) diff --git a/tests/compiler/std/math.untouched.wat b/tests/compiler/std/math.untouched.wat index 82a50d09..5956da6d 100644 --- a/tests/compiler/std/math.untouched.wat +++ b/tests/compiler/std/math.untouched.wat @@ -71,10 +71,10 @@ (global $~lib/math/random_seeded (mut i32) (i32.const 0)) (global $~lib/math/random_state0 (mut i64) (i64.const 0)) (global $~lib/math/random_state1 (mut i64) (i64.const 0)) - (global $HEAP_BASE i32 (i32.const 60)) + (global $HEAP_BASE i32 (i32.const 64)) (memory $0 1) - (data (i32.const 4) "\0b\00\00\00s\00t\00d\00/\00m\00a\00t\00h\00.\00t\00s\00") - (data (i32.const 32) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") + (data (i32.const 8) "\0b\00\00\00s\00t\00d\00/\00m\00a\00t\00h\00.\00t\00s\00") + (data (i32.const 36) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $isNaN (; 31 ;) (type $Fi) (param $0 f64) (result i32) @@ -14000,7 +14000,7 @@ (block (call $abort (i32.const 0) - (i32.const 32) + (i32.const 36) (i32.const 1000) (i32.const 4) ) @@ -14032,7 +14032,7 @@ (block (call $abort (i32.const 0) - (i32.const 32) + (i32.const 36) (i32.const 1007) (i32.const 24) ) @@ -16408,7 +16408,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 112) (i32.const 0) ) @@ -16425,7 +16425,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 113) (i32.const 0) ) @@ -16444,7 +16444,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 119) (i32.const 0) ) @@ -16463,7 +16463,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 120) (i32.const 0) ) @@ -16482,7 +16482,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 121) (i32.const 0) ) @@ -16501,7 +16501,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 122) (i32.const 0) ) @@ -16520,7 +16520,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 123) (i32.const 0) ) @@ -16539,7 +16539,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 124) (i32.const 0) ) @@ -16558,7 +16558,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 125) (i32.const 0) ) @@ -16579,7 +16579,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 127) (i32.const 0) ) @@ -16600,7 +16600,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 128) (i32.const 0) ) @@ -16621,7 +16621,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 129) (i32.const 0) ) @@ -16642,7 +16642,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 130) (i32.const 0) ) @@ -16663,7 +16663,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 131) (i32.const 0) ) @@ -16684,7 +16684,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 132) (i32.const 0) ) @@ -16705,7 +16705,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 133) (i32.const 0) ) @@ -16725,7 +16725,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 144) (i32.const 0) ) @@ -16745,7 +16745,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 145) (i32.const 0) ) @@ -16765,7 +16765,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 146) (i32.const 0) ) @@ -16785,7 +16785,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 147) (i32.const 0) ) @@ -16805,7 +16805,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 148) (i32.const 0) ) @@ -16825,7 +16825,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 149) (i32.const 0) ) @@ -16845,7 +16845,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 150) (i32.const 0) ) @@ -16865,7 +16865,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 151) (i32.const 0) ) @@ -16885,7 +16885,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 152) (i32.const 0) ) @@ -16905,7 +16905,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 153) (i32.const 0) ) @@ -16925,7 +16925,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 156) (i32.const 0) ) @@ -16945,7 +16945,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 157) (i32.const 0) ) @@ -16965,7 +16965,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 158) (i32.const 0) ) @@ -16985,7 +16985,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 159) (i32.const 0) ) @@ -17005,7 +17005,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 160) (i32.const 0) ) @@ -17029,7 +17029,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 161) (i32.const 0) ) @@ -17049,7 +17049,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 162) (i32.const 0) ) @@ -17069,7 +17069,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 163) (i32.const 0) ) @@ -17089,7 +17089,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 164) (i32.const 0) ) @@ -17112,7 +17112,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 165) (i32.const 0) ) @@ -17132,7 +17132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 166) (i32.const 0) ) @@ -17152,7 +17152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 167) (i32.const 0) ) @@ -17172,7 +17172,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 168) (i32.const 0) ) @@ -17196,7 +17196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 169) (i32.const 0) ) @@ -17216,7 +17216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 170) (i32.const 0) ) @@ -17236,7 +17236,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 171) (i32.const 0) ) @@ -17259,7 +17259,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 172) (i32.const 0) ) @@ -17282,7 +17282,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 173) (i32.const 0) ) @@ -17305,7 +17305,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 174) (i32.const 0) ) @@ -17325,7 +17325,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 183) (i32.const 0) ) @@ -17345,7 +17345,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 184) (i32.const 0) ) @@ -17365,7 +17365,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 185) (i32.const 0) ) @@ -17385,7 +17385,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 186) (i32.const 0) ) @@ -17405,7 +17405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 187) (i32.const 0) ) @@ -17425,7 +17425,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 188) (i32.const 0) ) @@ -17445,7 +17445,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 189) (i32.const 0) ) @@ -17465,7 +17465,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 190) (i32.const 0) ) @@ -17485,7 +17485,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 191) (i32.const 0) ) @@ -17505,7 +17505,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 192) (i32.const 0) ) @@ -17525,7 +17525,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 195) (i32.const 0) ) @@ -17545,7 +17545,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 196) (i32.const 0) ) @@ -17565,7 +17565,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 197) (i32.const 0) ) @@ -17585,7 +17585,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 198) (i32.const 0) ) @@ -17605,7 +17605,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 199) (i32.const 0) ) @@ -17629,7 +17629,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 200) (i32.const 0) ) @@ -17649,7 +17649,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 201) (i32.const 0) ) @@ -17669,7 +17669,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 202) (i32.const 0) ) @@ -17689,7 +17689,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 203) (i32.const 0) ) @@ -17712,7 +17712,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 204) (i32.const 0) ) @@ -17732,7 +17732,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 205) (i32.const 0) ) @@ -17752,7 +17752,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 206) (i32.const 0) ) @@ -17772,7 +17772,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 207) (i32.const 0) ) @@ -17796,7 +17796,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 208) (i32.const 0) ) @@ -17816,7 +17816,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 209) (i32.const 0) ) @@ -17836,7 +17836,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 210) (i32.const 0) ) @@ -17859,7 +17859,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 211) (i32.const 0) ) @@ -17882,7 +17882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 212) (i32.const 0) ) @@ -17905,7 +17905,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 213) (i32.const 0) ) @@ -17924,7 +17924,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 225) (i32.const 0) ) @@ -17943,7 +17943,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 226) (i32.const 0) ) @@ -17962,7 +17962,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 227) (i32.const 0) ) @@ -17981,7 +17981,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 228) (i32.const 0) ) @@ -18000,7 +18000,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 229) (i32.const 0) ) @@ -18019,7 +18019,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 230) (i32.const 0) ) @@ -18038,7 +18038,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 231) (i32.const 0) ) @@ -18057,7 +18057,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 232) (i32.const 0) ) @@ -18076,7 +18076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 233) (i32.const 0) ) @@ -18095,7 +18095,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 234) (i32.const 0) ) @@ -18114,7 +18114,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 237) (i32.const 0) ) @@ -18133,7 +18133,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 238) (i32.const 0) ) @@ -18152,7 +18152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 239) (i32.const 0) ) @@ -18171,7 +18171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 240) (i32.const 0) ) @@ -18190,7 +18190,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 241) (i32.const 0) ) @@ -18211,7 +18211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 242) (i32.const 0) ) @@ -18230,7 +18230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 243) (i32.const 0) ) @@ -18249,7 +18249,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 252) (i32.const 0) ) @@ -18268,7 +18268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 253) (i32.const 0) ) @@ -18287,7 +18287,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 254) (i32.const 0) ) @@ -18306,7 +18306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 255) (i32.const 0) ) @@ -18325,7 +18325,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 256) (i32.const 0) ) @@ -18344,7 +18344,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 257) (i32.const 0) ) @@ -18363,7 +18363,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 258) (i32.const 0) ) @@ -18382,7 +18382,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 259) (i32.const 0) ) @@ -18401,7 +18401,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 260) (i32.const 0) ) @@ -18420,7 +18420,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 261) (i32.const 0) ) @@ -18439,7 +18439,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 264) (i32.const 0) ) @@ -18458,7 +18458,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 265) (i32.const 0) ) @@ -18477,7 +18477,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 266) (i32.const 0) ) @@ -18496,7 +18496,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 267) (i32.const 0) ) @@ -18515,7 +18515,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 268) (i32.const 0) ) @@ -18536,7 +18536,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 269) (i32.const 0) ) @@ -18555,7 +18555,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 270) (i32.const 0) ) @@ -18574,7 +18574,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 282) (i32.const 0) ) @@ -18593,7 +18593,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 283) (i32.const 0) ) @@ -18612,7 +18612,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 284) (i32.const 0) ) @@ -18631,7 +18631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 285) (i32.const 0) ) @@ -18650,7 +18650,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 286) (i32.const 0) ) @@ -18669,7 +18669,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 287) (i32.const 0) ) @@ -18688,7 +18688,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 288) (i32.const 0) ) @@ -18707,7 +18707,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 289) (i32.const 0) ) @@ -18726,7 +18726,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 290) (i32.const 0) ) @@ -18745,7 +18745,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 291) (i32.const 0) ) @@ -18764,7 +18764,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 294) (i32.const 0) ) @@ -18783,7 +18783,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 295) (i32.const 0) ) @@ -18802,7 +18802,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 296) (i32.const 0) ) @@ -18821,7 +18821,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 297) (i32.const 0) ) @@ -18840,7 +18840,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 298) (i32.const 0) ) @@ -18859,7 +18859,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 299) (i32.const 0) ) @@ -18880,7 +18880,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 300) (i32.const 0) ) @@ -18899,7 +18899,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 301) (i32.const 0) ) @@ -18918,7 +18918,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 302) (i32.const 0) ) @@ -18937,7 +18937,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 303) (i32.const 0) ) @@ -18956,7 +18956,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 312) (i32.const 0) ) @@ -18975,7 +18975,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 313) (i32.const 0) ) @@ -18994,7 +18994,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 314) (i32.const 0) ) @@ -19013,7 +19013,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 315) (i32.const 0) ) @@ -19032,7 +19032,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 316) (i32.const 0) ) @@ -19051,7 +19051,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 317) (i32.const 0) ) @@ -19070,7 +19070,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 318) (i32.const 0) ) @@ -19089,7 +19089,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 319) (i32.const 0) ) @@ -19108,7 +19108,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 320) (i32.const 0) ) @@ -19127,7 +19127,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 321) (i32.const 0) ) @@ -19146,7 +19146,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 324) (i32.const 0) ) @@ -19165,7 +19165,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 325) (i32.const 0) ) @@ -19184,7 +19184,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 326) (i32.const 0) ) @@ -19203,7 +19203,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 327) (i32.const 0) ) @@ -19222,7 +19222,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 328) (i32.const 0) ) @@ -19241,7 +19241,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 329) (i32.const 0) ) @@ -19262,7 +19262,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 330) (i32.const 0) ) @@ -19281,7 +19281,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 331) (i32.const 0) ) @@ -19300,7 +19300,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 332) (i32.const 0) ) @@ -19319,7 +19319,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 333) (i32.const 0) ) @@ -19338,7 +19338,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 334) (i32.const 0) ) @@ -19357,7 +19357,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 346) (i32.const 0) ) @@ -19376,7 +19376,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 347) (i32.const 0) ) @@ -19395,7 +19395,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 348) (i32.const 0) ) @@ -19414,7 +19414,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 349) (i32.const 0) ) @@ -19433,7 +19433,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 350) (i32.const 0) ) @@ -19452,7 +19452,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 351) (i32.const 0) ) @@ -19471,7 +19471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 352) (i32.const 0) ) @@ -19490,7 +19490,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 353) (i32.const 0) ) @@ -19509,7 +19509,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 354) (i32.const 0) ) @@ -19528,7 +19528,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 355) (i32.const 0) ) @@ -19547,7 +19547,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 358) (i32.const 0) ) @@ -19566,7 +19566,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 359) (i32.const 0) ) @@ -19585,7 +19585,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 360) (i32.const 0) ) @@ -19604,7 +19604,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 361) (i32.const 0) ) @@ -19623,7 +19623,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 362) (i32.const 0) ) @@ -19642,7 +19642,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 363) (i32.const 0) ) @@ -19663,7 +19663,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 364) (i32.const 0) ) @@ -19682,7 +19682,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 380) (i32.const 0) ) @@ -19701,7 +19701,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 382) (i32.const 0) ) @@ -19720,7 +19720,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 383) (i32.const 0) ) @@ -19739,7 +19739,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 392) (i32.const 0) ) @@ -19758,7 +19758,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 393) (i32.const 0) ) @@ -19777,7 +19777,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 394) (i32.const 0) ) @@ -19796,7 +19796,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 395) (i32.const 0) ) @@ -19815,7 +19815,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 396) (i32.const 0) ) @@ -19834,7 +19834,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 397) (i32.const 0) ) @@ -19853,7 +19853,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 398) (i32.const 0) ) @@ -19872,7 +19872,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 399) (i32.const 0) ) @@ -19891,7 +19891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 400) (i32.const 0) ) @@ -19910,7 +19910,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 401) (i32.const 0) ) @@ -19929,7 +19929,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 404) (i32.const 0) ) @@ -19948,7 +19948,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 405) (i32.const 0) ) @@ -19967,7 +19967,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 406) (i32.const 0) ) @@ -19986,7 +19986,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 407) (i32.const 0) ) @@ -20005,7 +20005,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 408) (i32.const 0) ) @@ -20024,7 +20024,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 409) (i32.const 0) ) @@ -20045,7 +20045,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 410) (i32.const 0) ) @@ -20064,7 +20064,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 411) (i32.const 0) ) @@ -20083,7 +20083,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 423) (i32.const 0) ) @@ -20102,7 +20102,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 424) (i32.const 0) ) @@ -20121,7 +20121,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 425) (i32.const 0) ) @@ -20140,7 +20140,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 426) (i32.const 0) ) @@ -20159,7 +20159,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 427) (i32.const 0) ) @@ -20178,7 +20178,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 428) (i32.const 0) ) @@ -20197,7 +20197,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 429) (i32.const 0) ) @@ -20216,7 +20216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 430) (i32.const 0) ) @@ -20235,7 +20235,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 431) (i32.const 0) ) @@ -20254,7 +20254,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 432) (i32.const 0) ) @@ -20273,7 +20273,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 435) (i32.const 0) ) @@ -20292,7 +20292,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 436) (i32.const 0) ) @@ -20311,7 +20311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 437) (i32.const 0) ) @@ -20330,7 +20330,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 438) (i32.const 0) ) @@ -20349,7 +20349,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 439) (i32.const 0) ) @@ -20368,7 +20368,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 440) (i32.const 0) ) @@ -20387,7 +20387,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 441) (i32.const 0) ) @@ -20408,7 +20408,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 442) (i32.const 0) ) @@ -20427,7 +20427,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 443) (i32.const 0) ) @@ -20446,7 +20446,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 444) (i32.const 0) ) @@ -20465,7 +20465,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 453) (i32.const 0) ) @@ -20484,7 +20484,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 454) (i32.const 0) ) @@ -20503,7 +20503,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 455) (i32.const 0) ) @@ -20522,7 +20522,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 456) (i32.const 0) ) @@ -20541,7 +20541,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 457) (i32.const 0) ) @@ -20560,7 +20560,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 458) (i32.const 0) ) @@ -20579,7 +20579,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 459) (i32.const 0) ) @@ -20598,7 +20598,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 460) (i32.const 0) ) @@ -20617,7 +20617,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 461) (i32.const 0) ) @@ -20636,7 +20636,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 462) (i32.const 0) ) @@ -20655,7 +20655,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 465) (i32.const 0) ) @@ -20674,7 +20674,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 466) (i32.const 0) ) @@ -20693,7 +20693,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 467) (i32.const 0) ) @@ -20712,7 +20712,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 468) (i32.const 0) ) @@ -20731,7 +20731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 469) (i32.const 0) ) @@ -20750,7 +20750,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 470) (i32.const 0) ) @@ -20769,7 +20769,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 471) (i32.const 0) ) @@ -20790,7 +20790,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 472) (i32.const 0) ) @@ -20809,7 +20809,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 473) (i32.const 0) ) @@ -20828,7 +20828,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 474) (i32.const 0) ) @@ -20847,7 +20847,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 486) (i32.const 0) ) @@ -20866,7 +20866,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 487) (i32.const 0) ) @@ -20885,7 +20885,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 488) (i32.const 0) ) @@ -20904,7 +20904,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 489) (i32.const 0) ) @@ -20923,7 +20923,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 490) (i32.const 0) ) @@ -20942,7 +20942,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 491) (i32.const 0) ) @@ -20961,7 +20961,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 492) (i32.const 0) ) @@ -20980,7 +20980,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 493) (i32.const 0) ) @@ -20999,7 +20999,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 494) (i32.const 0) ) @@ -21018,7 +21018,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 495) (i32.const 0) ) @@ -21037,7 +21037,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 498) (i32.const 0) ) @@ -21056,7 +21056,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 499) (i32.const 0) ) @@ -21079,7 +21079,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 500) (i32.const 0) ) @@ -21098,7 +21098,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 501) (i32.const 0) ) @@ -21117,7 +21117,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 502) (i32.const 0) ) @@ -21136,7 +21136,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 531) (i32.const 0) ) @@ -21155,7 +21155,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 532) (i32.const 0) ) @@ -21174,7 +21174,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 533) (i32.const 0) ) @@ -21193,7 +21193,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 534) (i32.const 0) ) @@ -21212,7 +21212,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 535) (i32.const 0) ) @@ -21231,7 +21231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 536) (i32.const 0) ) @@ -21250,7 +21250,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 537) (i32.const 0) ) @@ -21269,7 +21269,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 538) (i32.const 0) ) @@ -21288,7 +21288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 539) (i32.const 0) ) @@ -21307,7 +21307,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 540) (i32.const 0) ) @@ -21326,7 +21326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 543) (i32.const 0) ) @@ -21345,7 +21345,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 544) (i32.const 0) ) @@ -21368,7 +21368,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 545) (i32.const 0) ) @@ -21387,7 +21387,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 546) (i32.const 0) ) @@ -21406,7 +21406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 547) (i32.const 0) ) @@ -21425,7 +21425,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 559) (i32.const 0) ) @@ -21444,7 +21444,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 560) (i32.const 0) ) @@ -21463,7 +21463,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 561) (i32.const 0) ) @@ -21482,7 +21482,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 562) (i32.const 0) ) @@ -21501,7 +21501,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 563) (i32.const 0) ) @@ -21520,7 +21520,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 564) (i32.const 0) ) @@ -21539,7 +21539,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 565) (i32.const 0) ) @@ -21558,7 +21558,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 566) (i32.const 0) ) @@ -21577,7 +21577,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 567) (i32.const 0) ) @@ -21596,7 +21596,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 568) (i32.const 0) ) @@ -21615,7 +21615,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 571) (i32.const 0) ) @@ -21634,7 +21634,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 572) (i32.const 0) ) @@ -21653,7 +21653,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 573) (i32.const 0) ) @@ -21672,7 +21672,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 574) (i32.const 0) ) @@ -21691,7 +21691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 575) (i32.const 0) ) @@ -21712,7 +21712,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 576) (i32.const 0) ) @@ -21731,7 +21731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 577) (i32.const 0) ) @@ -21750,7 +21750,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 578) (i32.const 0) ) @@ -21769,7 +21769,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 587) (i32.const 0) ) @@ -21788,7 +21788,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 588) (i32.const 0) ) @@ -21807,7 +21807,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 589) (i32.const 0) ) @@ -21826,7 +21826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 590) (i32.const 0) ) @@ -21845,7 +21845,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 591) (i32.const 0) ) @@ -21864,7 +21864,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 592) (i32.const 0) ) @@ -21883,7 +21883,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 593) (i32.const 0) ) @@ -21902,7 +21902,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 594) (i32.const 0) ) @@ -21921,7 +21921,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 595) (i32.const 0) ) @@ -21940,7 +21940,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 596) (i32.const 0) ) @@ -21959,7 +21959,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 599) (i32.const 0) ) @@ -21978,7 +21978,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 600) (i32.const 0) ) @@ -21997,7 +21997,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 601) (i32.const 0) ) @@ -22016,7 +22016,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 602) (i32.const 0) ) @@ -22035,7 +22035,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 603) (i32.const 0) ) @@ -22056,7 +22056,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 604) (i32.const 0) ) @@ -22075,7 +22075,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 605) (i32.const 0) ) @@ -22094,7 +22094,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 617) (i32.const 0) ) @@ -22113,7 +22113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 618) (i32.const 0) ) @@ -22132,7 +22132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 619) (i32.const 0) ) @@ -22151,7 +22151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 620) (i32.const 0) ) @@ -22170,7 +22170,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 621) (i32.const 0) ) @@ -22189,7 +22189,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 622) (i32.const 0) ) @@ -22208,7 +22208,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 623) (i32.const 0) ) @@ -22227,7 +22227,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 624) (i32.const 0) ) @@ -22246,7 +22246,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 625) (i32.const 0) ) @@ -22265,7 +22265,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 626) (i32.const 0) ) @@ -22284,7 +22284,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 629) (i32.const 0) ) @@ -22303,7 +22303,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 630) (i32.const 0) ) @@ -22324,7 +22324,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 631) (i32.const 0) ) @@ -22343,7 +22343,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 632) (i32.const 0) ) @@ -22362,7 +22362,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 633) (i32.const 0) ) @@ -22381,7 +22381,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 634) (i32.const 0) ) @@ -22402,7 +22402,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 635) (i32.const 0) ) @@ -22421,7 +22421,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 636) (i32.const 0) ) @@ -22440,7 +22440,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 637) (i32.const 0) ) @@ -22459,7 +22459,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 638) (i32.const 0) ) @@ -22478,7 +22478,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 639) (i32.const 0) ) @@ -22500,7 +22500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 640) (i32.const 0) ) @@ -22522,7 +22522,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 641) (i32.const 0) ) @@ -22541,7 +22541,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 642) (i32.const 0) ) @@ -22560,7 +22560,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 651) (i32.const 0) ) @@ -22579,7 +22579,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 652) (i32.const 0) ) @@ -22598,7 +22598,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 653) (i32.const 0) ) @@ -22617,7 +22617,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 654) (i32.const 0) ) @@ -22636,7 +22636,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 655) (i32.const 0) ) @@ -22655,7 +22655,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 656) (i32.const 0) ) @@ -22674,7 +22674,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 657) (i32.const 0) ) @@ -22693,7 +22693,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 658) (i32.const 0) ) @@ -22712,7 +22712,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 659) (i32.const 0) ) @@ -22731,7 +22731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 660) (i32.const 0) ) @@ -22750,7 +22750,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 663) (i32.const 0) ) @@ -22769,7 +22769,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 664) (i32.const 0) ) @@ -22790,7 +22790,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 665) (i32.const 0) ) @@ -22809,7 +22809,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 666) (i32.const 0) ) @@ -22828,7 +22828,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 667) (i32.const 0) ) @@ -22847,7 +22847,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 668) (i32.const 0) ) @@ -22868,7 +22868,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 669) (i32.const 0) ) @@ -22887,7 +22887,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 670) (i32.const 0) ) @@ -22906,7 +22906,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 671) (i32.const 0) ) @@ -22925,7 +22925,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 672) (i32.const 0) ) @@ -22944,7 +22944,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 673) (i32.const 0) ) @@ -22966,7 +22966,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 674) (i32.const 0) ) @@ -22988,7 +22988,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 675) (i32.const 0) ) @@ -23007,7 +23007,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 676) (i32.const 0) ) @@ -23027,7 +23027,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 688) (i32.const 0) ) @@ -23047,7 +23047,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 689) (i32.const 0) ) @@ -23067,7 +23067,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 690) (i32.const 0) ) @@ -23087,7 +23087,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 691) (i32.const 0) ) @@ -23107,7 +23107,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 692) (i32.const 0) ) @@ -23127,7 +23127,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 693) (i32.const 0) ) @@ -23147,7 +23147,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 694) (i32.const 0) ) @@ -23167,7 +23167,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 695) (i32.const 0) ) @@ -23187,7 +23187,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 696) (i32.const 0) ) @@ -23207,7 +23207,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 697) (i32.const 0) ) @@ -23227,7 +23227,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 700) (i32.const 0) ) @@ -23247,7 +23247,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 701) (i32.const 0) ) @@ -23267,7 +23267,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 702) (i32.const 0) ) @@ -23289,7 +23289,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 703) (i32.const 0) ) @@ -23309,7 +23309,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 704) (i32.const 0) ) @@ -23329,7 +23329,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 705) (i32.const 0) ) @@ -23349,7 +23349,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 706) (i32.const 0) ) @@ -23369,7 +23369,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 707) (i32.const 0) ) @@ -23389,7 +23389,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 708) (i32.const 0) ) @@ -23411,7 +23411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 709) (i32.const 0) ) @@ -23431,7 +23431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 710) (i32.const 0) ) @@ -23451,7 +23451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 711) (i32.const 0) ) @@ -23471,7 +23471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 712) (i32.const 0) ) @@ -23491,7 +23491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 713) (i32.const 0) ) @@ -23511,7 +23511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 714) (i32.const 0) ) @@ -23531,7 +23531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 715) (i32.const 0) ) @@ -23551,7 +23551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 716) (i32.const 0) ) @@ -23571,7 +23571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 717) (i32.const 0) ) @@ -23593,7 +23593,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 718) (i32.const 0) ) @@ -23615,7 +23615,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 719) (i32.const 0) ) @@ -23635,7 +23635,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 720) (i32.const 0) ) @@ -23657,7 +23657,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 721) (i32.const 0) ) @@ -23677,7 +23677,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 722) (i32.const 0) ) @@ -23699,7 +23699,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 723) (i32.const 0) ) @@ -23721,7 +23721,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 724) (i32.const 0) ) @@ -23745,7 +23745,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 725) (i32.const 0) ) @@ -23768,7 +23768,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 726) (i32.const 0) ) @@ -23791,7 +23791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 727) (i32.const 0) ) @@ -23814,7 +23814,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 728) (i32.const 0) ) @@ -23834,7 +23834,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 729) (i32.const 0) ) @@ -23854,7 +23854,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 738) (i32.const 0) ) @@ -23874,7 +23874,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 739) (i32.const 0) ) @@ -23894,7 +23894,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 740) (i32.const 0) ) @@ -23914,7 +23914,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 741) (i32.const 0) ) @@ -23934,7 +23934,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 742) (i32.const 0) ) @@ -23954,7 +23954,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 743) (i32.const 0) ) @@ -23974,7 +23974,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 744) (i32.const 0) ) @@ -23994,7 +23994,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 745) (i32.const 0) ) @@ -24014,7 +24014,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 746) (i32.const 0) ) @@ -24034,7 +24034,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 747) (i32.const 0) ) @@ -24054,7 +24054,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 750) (i32.const 0) ) @@ -24074,7 +24074,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 751) (i32.const 0) ) @@ -24094,7 +24094,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 752) (i32.const 0) ) @@ -24116,7 +24116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 753) (i32.const 0) ) @@ -24136,7 +24136,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 754) (i32.const 0) ) @@ -24156,7 +24156,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 755) (i32.const 0) ) @@ -24176,7 +24176,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 756) (i32.const 0) ) @@ -24196,7 +24196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 757) (i32.const 0) ) @@ -24216,7 +24216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 758) (i32.const 0) ) @@ -24238,7 +24238,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 759) (i32.const 0) ) @@ -24258,7 +24258,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 760) (i32.const 0) ) @@ -24278,7 +24278,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 761) (i32.const 0) ) @@ -24298,7 +24298,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 762) (i32.const 0) ) @@ -24318,7 +24318,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 763) (i32.const 0) ) @@ -24338,7 +24338,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 764) (i32.const 0) ) @@ -24358,7 +24358,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 765) (i32.const 0) ) @@ -24378,7 +24378,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 766) (i32.const 0) ) @@ -24398,7 +24398,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 767) (i32.const 0) ) @@ -24420,7 +24420,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 768) (i32.const 0) ) @@ -24442,7 +24442,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 769) (i32.const 0) ) @@ -24462,7 +24462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 770) (i32.const 0) ) @@ -24484,7 +24484,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 771) (i32.const 0) ) @@ -24504,7 +24504,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 772) (i32.const 0) ) @@ -24526,7 +24526,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 773) (i32.const 0) ) @@ -24548,7 +24548,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 774) (i32.const 0) ) @@ -24572,7 +24572,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 775) (i32.const 0) ) @@ -24595,7 +24595,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 776) (i32.const 0) ) @@ -24618,7 +24618,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 777) (i32.const 0) ) @@ -24637,7 +24637,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 789) (i32.const 0) ) @@ -24656,7 +24656,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 790) (i32.const 0) ) @@ -24675,7 +24675,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 791) (i32.const 0) ) @@ -24694,7 +24694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 792) (i32.const 0) ) @@ -24713,7 +24713,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 793) (i32.const 0) ) @@ -24732,7 +24732,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 794) (i32.const 0) ) @@ -24751,7 +24751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 795) (i32.const 0) ) @@ -24770,7 +24770,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 796) (i32.const 0) ) @@ -24789,7 +24789,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 797) (i32.const 0) ) @@ -24808,7 +24808,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 798) (i32.const 0) ) @@ -24827,7 +24827,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 801) (i32.const 0) ) @@ -24846,7 +24846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 802) (i32.const 0) ) @@ -24869,7 +24869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 803) (i32.const 0) ) @@ -24888,7 +24888,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 804) (i32.const 0) ) @@ -24907,7 +24907,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 805) (i32.const 0) ) @@ -24926,7 +24926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 806) (i32.const 0) ) @@ -24945,7 +24945,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 807) (i32.const 0) ) @@ -24964,7 +24964,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 808) (i32.const 0) ) @@ -24983,7 +24983,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 809) (i32.const 0) ) @@ -25002,7 +25002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 810) (i32.const 0) ) @@ -25021,7 +25021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 819) (i32.const 0) ) @@ -25040,7 +25040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 820) (i32.const 0) ) @@ -25059,7 +25059,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 821) (i32.const 0) ) @@ -25078,7 +25078,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 822) (i32.const 0) ) @@ -25097,7 +25097,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 823) (i32.const 0) ) @@ -25116,7 +25116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 824) (i32.const 0) ) @@ -25135,7 +25135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 825) (i32.const 0) ) @@ -25154,7 +25154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 826) (i32.const 0) ) @@ -25173,7 +25173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 827) (i32.const 0) ) @@ -25192,7 +25192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 828) (i32.const 0) ) @@ -25211,7 +25211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 831) (i32.const 0) ) @@ -25230,7 +25230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 832) (i32.const 0) ) @@ -25253,7 +25253,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 833) (i32.const 0) ) @@ -25272,7 +25272,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 834) (i32.const 0) ) @@ -25291,7 +25291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 835) (i32.const 0) ) @@ -25310,7 +25310,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 836) (i32.const 0) ) @@ -25329,7 +25329,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 837) (i32.const 0) ) @@ -25348,7 +25348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 838) (i32.const 0) ) @@ -25367,7 +25367,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 839) (i32.const 0) ) @@ -25386,7 +25386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 840) (i32.const 0) ) @@ -25405,7 +25405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 852) (i32.const 0) ) @@ -25424,7 +25424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 853) (i32.const 0) ) @@ -25443,7 +25443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 854) (i32.const 0) ) @@ -25462,7 +25462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 855) (i32.const 0) ) @@ -25481,7 +25481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 856) (i32.const 0) ) @@ -25500,7 +25500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 857) (i32.const 0) ) @@ -25519,7 +25519,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 858) (i32.const 0) ) @@ -25538,7 +25538,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 859) (i32.const 0) ) @@ -25557,7 +25557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 860) (i32.const 0) ) @@ -25576,7 +25576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 861) (i32.const 0) ) @@ -25595,7 +25595,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 864) (i32.const 0) ) @@ -25614,7 +25614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 865) (i32.const 0) ) @@ -25637,7 +25637,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 866) (i32.const 0) ) @@ -25656,7 +25656,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 867) (i32.const 0) ) @@ -25675,7 +25675,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 868) (i32.const 0) ) @@ -25694,7 +25694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 869) (i32.const 0) ) @@ -25713,7 +25713,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 870) (i32.const 0) ) @@ -25732,7 +25732,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 871) (i32.const 0) ) @@ -25751,7 +25751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 872) (i32.const 0) ) @@ -25770,7 +25770,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 873) (i32.const 0) ) @@ -25789,7 +25789,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 874) (i32.const 0) ) @@ -25808,7 +25808,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 875) (i32.const 0) ) @@ -25827,7 +25827,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 876) (i32.const 0) ) @@ -25846,7 +25846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 877) (i32.const 0) ) @@ -25865,7 +25865,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 878) (i32.const 0) ) @@ -25884,7 +25884,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 879) (i32.const 0) ) @@ -25903,7 +25903,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 880) (i32.const 0) ) @@ -25926,7 +25926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 881) (i32.const 0) ) @@ -25945,7 +25945,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 882) (i32.const 0) ) @@ -25964,7 +25964,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 883) (i32.const 0) ) @@ -25983,7 +25983,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 884) (i32.const 0) ) @@ -26002,7 +26002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 885) (i32.const 0) ) @@ -26021,7 +26021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 886) (i32.const 0) ) @@ -26040,7 +26040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 887) (i32.const 0) ) @@ -26059,7 +26059,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 888) (i32.const 0) ) @@ -26078,7 +26078,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 889) (i32.const 0) ) @@ -26097,7 +26097,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 890) (i32.const 0) ) @@ -26116,7 +26116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 891) (i32.const 0) ) @@ -26135,7 +26135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 892) (i32.const 0) ) @@ -26154,7 +26154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 893) (i32.const 0) ) @@ -26173,7 +26173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 894) (i32.const 0) ) @@ -26192,7 +26192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 895) (i32.const 0) ) @@ -26215,7 +26215,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 896) (i32.const 0) ) @@ -26234,7 +26234,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 897) (i32.const 0) ) @@ -26253,7 +26253,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 898) (i32.const 0) ) @@ -26272,7 +26272,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 899) (i32.const 0) ) @@ -26291,7 +26291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 900) (i32.const 0) ) @@ -26310,7 +26310,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 901) (i32.const 0) ) @@ -26329,7 +26329,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 902) (i32.const 0) ) @@ -26348,7 +26348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 903) (i32.const 0) ) @@ -26367,7 +26367,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 904) (i32.const 0) ) @@ -26386,7 +26386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 905) (i32.const 0) ) @@ -26405,7 +26405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 906) (i32.const 0) ) @@ -26424,7 +26424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 907) (i32.const 0) ) @@ -26443,7 +26443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 908) (i32.const 0) ) @@ -26462,7 +26462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 917) (i32.const 0) ) @@ -26481,7 +26481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 918) (i32.const 0) ) @@ -26500,7 +26500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 919) (i32.const 0) ) @@ -26519,7 +26519,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 920) (i32.const 0) ) @@ -26538,7 +26538,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 921) (i32.const 0) ) @@ -26557,7 +26557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 922) (i32.const 0) ) @@ -26576,7 +26576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 923) (i32.const 0) ) @@ -26595,7 +26595,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 924) (i32.const 0) ) @@ -26614,7 +26614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 925) (i32.const 0) ) @@ -26633,7 +26633,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 926) (i32.const 0) ) @@ -26652,7 +26652,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 929) (i32.const 0) ) @@ -26671,7 +26671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 930) (i32.const 0) ) @@ -26694,7 +26694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 931) (i32.const 0) ) @@ -26713,7 +26713,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 932) (i32.const 0) ) @@ -26732,7 +26732,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 933) (i32.const 0) ) @@ -26751,7 +26751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 934) (i32.const 0) ) @@ -26770,7 +26770,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 935) (i32.const 0) ) @@ -26789,7 +26789,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 936) (i32.const 0) ) @@ -26808,7 +26808,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 937) (i32.const 0) ) @@ -26827,7 +26827,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 938) (i32.const 0) ) @@ -26846,7 +26846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 939) (i32.const 0) ) @@ -26865,7 +26865,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 940) (i32.const 0) ) @@ -26884,7 +26884,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 941) (i32.const 0) ) @@ -26903,7 +26903,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 942) (i32.const 0) ) @@ -26922,7 +26922,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 943) (i32.const 0) ) @@ -26941,7 +26941,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 944) (i32.const 0) ) @@ -26960,7 +26960,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 945) (i32.const 0) ) @@ -26983,7 +26983,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 946) (i32.const 0) ) @@ -27002,7 +27002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 947) (i32.const 0) ) @@ -27021,7 +27021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 948) (i32.const 0) ) @@ -27040,7 +27040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 949) (i32.const 0) ) @@ -27059,7 +27059,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 950) (i32.const 0) ) @@ -27078,7 +27078,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 951) (i32.const 0) ) @@ -27097,7 +27097,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 952) (i32.const 0) ) @@ -27116,7 +27116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 953) (i32.const 0) ) @@ -27135,7 +27135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 954) (i32.const 0) ) @@ -27154,7 +27154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 955) (i32.const 0) ) @@ -27173,7 +27173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 956) (i32.const 0) ) @@ -27192,7 +27192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 957) (i32.const 0) ) @@ -27211,7 +27211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 958) (i32.const 0) ) @@ -27230,7 +27230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 959) (i32.const 0) ) @@ -27249,7 +27249,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 960) (i32.const 0) ) @@ -27272,7 +27272,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 961) (i32.const 0) ) @@ -27291,7 +27291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 962) (i32.const 0) ) @@ -27310,7 +27310,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 963) (i32.const 0) ) @@ -27329,7 +27329,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 964) (i32.const 0) ) @@ -27348,7 +27348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 965) (i32.const 0) ) @@ -27367,7 +27367,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 966) (i32.const 0) ) @@ -27386,7 +27386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 967) (i32.const 0) ) @@ -27405,7 +27405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 968) (i32.const 0) ) @@ -27424,7 +27424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 969) (i32.const 0) ) @@ -27443,7 +27443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 970) (i32.const 0) ) @@ -27462,7 +27462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 971) (i32.const 0) ) @@ -27481,7 +27481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 972) (i32.const 0) ) @@ -27500,7 +27500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 973) (i32.const 0) ) @@ -27519,7 +27519,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1110) (i32.const 0) ) @@ -27538,7 +27538,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1111) (i32.const 0) ) @@ -27557,7 +27557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1112) (i32.const 0) ) @@ -27576,7 +27576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1113) (i32.const 0) ) @@ -27595,7 +27595,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1114) (i32.const 0) ) @@ -27614,7 +27614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1115) (i32.const 0) ) @@ -27633,7 +27633,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1116) (i32.const 0) ) @@ -27652,7 +27652,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1117) (i32.const 0) ) @@ -27671,7 +27671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1118) (i32.const 0) ) @@ -27690,7 +27690,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1119) (i32.const 0) ) @@ -27709,7 +27709,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1122) (i32.const 0) ) @@ -27728,7 +27728,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1123) (i32.const 0) ) @@ -27747,7 +27747,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1124) (i32.const 0) ) @@ -27768,7 +27768,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1125) (i32.const 0) ) @@ -27787,7 +27787,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1126) (i32.const 0) ) @@ -27806,7 +27806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1135) (i32.const 0) ) @@ -27825,7 +27825,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1136) (i32.const 0) ) @@ -27844,7 +27844,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1137) (i32.const 0) ) @@ -27863,7 +27863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1138) (i32.const 0) ) @@ -27882,7 +27882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1139) (i32.const 0) ) @@ -27901,7 +27901,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1140) (i32.const 0) ) @@ -27920,7 +27920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1141) (i32.const 0) ) @@ -27939,7 +27939,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1142) (i32.const 0) ) @@ -27958,7 +27958,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1143) (i32.const 0) ) @@ -27977,7 +27977,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1144) (i32.const 0) ) @@ -27996,7 +27996,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1147) (i32.const 0) ) @@ -28015,7 +28015,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1148) (i32.const 0) ) @@ -28034,7 +28034,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1149) (i32.const 0) ) @@ -28055,7 +28055,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1150) (i32.const 0) ) @@ -28074,7 +28074,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1151) (i32.const 0) ) @@ -28093,7 +28093,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1163) (i32.const 0) ) @@ -28112,7 +28112,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1164) (i32.const 0) ) @@ -28131,7 +28131,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1165) (i32.const 0) ) @@ -28150,7 +28150,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1166) (i32.const 0) ) @@ -28169,7 +28169,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1167) (i32.const 0) ) @@ -28188,7 +28188,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1168) (i32.const 0) ) @@ -28207,7 +28207,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1169) (i32.const 0) ) @@ -28226,7 +28226,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1170) (i32.const 0) ) @@ -28245,7 +28245,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1171) (i32.const 0) ) @@ -28264,7 +28264,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1172) (i32.const 0) ) @@ -28283,7 +28283,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1175) (i32.const 0) ) @@ -28302,7 +28302,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1176) (i32.const 0) ) @@ -28321,7 +28321,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1177) (i32.const 0) ) @@ -28340,7 +28340,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1178) (i32.const 0) ) @@ -28359,7 +28359,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1179) (i32.const 0) ) @@ -28380,7 +28380,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1180) (i32.const 0) ) @@ -28399,7 +28399,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1181) (i32.const 0) ) @@ -28418,7 +28418,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1182) (i32.const 0) ) @@ -28437,7 +28437,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1183) (i32.const 0) ) @@ -28456,7 +28456,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1184) (i32.const 0) ) @@ -28475,7 +28475,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1185) (i32.const 0) ) @@ -28494,7 +28494,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1194) (i32.const 0) ) @@ -28513,7 +28513,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1195) (i32.const 0) ) @@ -28532,7 +28532,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1196) (i32.const 0) ) @@ -28551,7 +28551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1197) (i32.const 0) ) @@ -28570,7 +28570,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1198) (i32.const 0) ) @@ -28589,7 +28589,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1199) (i32.const 0) ) @@ -28608,7 +28608,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1200) (i32.const 0) ) @@ -28627,7 +28627,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1201) (i32.const 0) ) @@ -28646,7 +28646,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1202) (i32.const 0) ) @@ -28665,7 +28665,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1203) (i32.const 0) ) @@ -28684,7 +28684,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1206) (i32.const 0) ) @@ -28703,7 +28703,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1207) (i32.const 0) ) @@ -28722,7 +28722,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1208) (i32.const 0) ) @@ -28741,7 +28741,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1209) (i32.const 0) ) @@ -28760,7 +28760,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1210) (i32.const 0) ) @@ -28781,7 +28781,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1211) (i32.const 0) ) @@ -28800,7 +28800,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1212) (i32.const 0) ) @@ -28819,7 +28819,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1213) (i32.const 0) ) @@ -28841,7 +28841,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1214) (i32.const 0) ) @@ -28863,7 +28863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1215) (i32.const 0) ) @@ -28885,7 +28885,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1216) (i32.const 0) ) @@ -28904,7 +28904,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1217) (i32.const 0) ) @@ -28923,7 +28923,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1218) (i32.const 0) ) @@ -28942,7 +28942,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1219) (i32.const 0) ) @@ -28961,7 +28961,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1231) (i32.const 0) ) @@ -28980,7 +28980,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1232) (i32.const 0) ) @@ -28999,7 +28999,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1233) (i32.const 0) ) @@ -29018,7 +29018,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1234) (i32.const 0) ) @@ -29037,7 +29037,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1235) (i32.const 0) ) @@ -29056,7 +29056,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1236) (i32.const 0) ) @@ -29075,7 +29075,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1237) (i32.const 0) ) @@ -29094,7 +29094,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1238) (i32.const 0) ) @@ -29113,7 +29113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1239) (i32.const 0) ) @@ -29132,7 +29132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1240) (i32.const 0) ) @@ -29151,7 +29151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1243) (i32.const 0) ) @@ -29170,7 +29170,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1244) (i32.const 0) ) @@ -29189,7 +29189,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1245) (i32.const 0) ) @@ -29208,7 +29208,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1246) (i32.const 0) ) @@ -29227,7 +29227,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1247) (i32.const 0) ) @@ -29248,7 +29248,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1248) (i32.const 0) ) @@ -29267,7 +29267,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1249) (i32.const 0) ) @@ -29289,7 +29289,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1250) (i32.const 0) ) @@ -29311,7 +29311,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1251) (i32.const 0) ) @@ -29330,7 +29330,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1260) (i32.const 0) ) @@ -29349,7 +29349,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1261) (i32.const 0) ) @@ -29368,7 +29368,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1262) (i32.const 0) ) @@ -29387,7 +29387,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1263) (i32.const 0) ) @@ -29406,7 +29406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1264) (i32.const 0) ) @@ -29425,7 +29425,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1265) (i32.const 0) ) @@ -29444,7 +29444,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1266) (i32.const 0) ) @@ -29463,7 +29463,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1267) (i32.const 0) ) @@ -29482,7 +29482,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1268) (i32.const 0) ) @@ -29501,7 +29501,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1269) (i32.const 0) ) @@ -29520,7 +29520,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1272) (i32.const 0) ) @@ -29539,7 +29539,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1273) (i32.const 0) ) @@ -29558,7 +29558,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1274) (i32.const 0) ) @@ -29577,7 +29577,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1275) (i32.const 0) ) @@ -29596,7 +29596,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1276) (i32.const 0) ) @@ -29617,7 +29617,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1277) (i32.const 0) ) @@ -29636,7 +29636,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1278) (i32.const 0) ) @@ -29655,7 +29655,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1290) (i32.const 0) ) @@ -29674,7 +29674,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1291) (i32.const 0) ) @@ -29693,7 +29693,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1292) (i32.const 0) ) @@ -29712,7 +29712,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1293) (i32.const 0) ) @@ -29731,7 +29731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1294) (i32.const 0) ) @@ -29750,7 +29750,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1295) (i32.const 0) ) @@ -29769,7 +29769,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1296) (i32.const 0) ) @@ -29788,7 +29788,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1297) (i32.const 0) ) @@ -29807,7 +29807,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1298) (i32.const 0) ) @@ -29826,7 +29826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1299) (i32.const 0) ) @@ -29845,7 +29845,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1302) (i32.const 0) ) @@ -29864,7 +29864,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1303) (i32.const 0) ) @@ -29887,7 +29887,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1304) (i32.const 0) ) @@ -29906,7 +29906,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1305) (i32.const 0) ) @@ -29925,7 +29925,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1306) (i32.const 0) ) @@ -29944,7 +29944,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1307) (i32.const 0) ) @@ -29963,7 +29963,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1308) (i32.const 0) ) @@ -29982,7 +29982,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1309) (i32.const 0) ) @@ -30001,7 +30001,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1310) (i32.const 0) ) @@ -30020,7 +30020,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1311) (i32.const 0) ) @@ -30039,7 +30039,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1312) (i32.const 0) ) @@ -30058,7 +30058,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1313) (i32.const 0) ) @@ -30077,7 +30077,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1314) (i32.const 0) ) @@ -30096,7 +30096,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1315) (i32.const 0) ) @@ -30115,7 +30115,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1316) (i32.const 0) ) @@ -30134,7 +30134,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1325) (i32.const 0) ) @@ -30153,7 +30153,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1326) (i32.const 0) ) @@ -30172,7 +30172,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1327) (i32.const 0) ) @@ -30191,7 +30191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1328) (i32.const 0) ) @@ -30210,7 +30210,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1329) (i32.const 0) ) @@ -30229,7 +30229,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1330) (i32.const 0) ) @@ -30248,7 +30248,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1331) (i32.const 0) ) @@ -30267,7 +30267,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1332) (i32.const 0) ) @@ -30286,7 +30286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1333) (i32.const 0) ) @@ -30305,7 +30305,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1334) (i32.const 0) ) @@ -30324,7 +30324,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1337) (i32.const 0) ) @@ -30343,7 +30343,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1338) (i32.const 0) ) @@ -30366,7 +30366,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1339) (i32.const 0) ) @@ -30385,7 +30385,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1340) (i32.const 0) ) @@ -30404,7 +30404,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1341) (i32.const 0) ) @@ -30423,7 +30423,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1342) (i32.const 0) ) @@ -30442,7 +30442,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1343) (i32.const 0) ) @@ -30461,7 +30461,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1344) (i32.const 0) ) @@ -30480,7 +30480,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1345) (i32.const 0) ) @@ -30499,7 +30499,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1346) (i32.const 0) ) @@ -30518,7 +30518,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1347) (i32.const 0) ) @@ -30537,7 +30537,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1348) (i32.const 0) ) @@ -30556,7 +30556,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1349) (i32.const 0) ) @@ -30575,7 +30575,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1350) (i32.const 0) ) @@ -30594,7 +30594,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1351) (i32.const 0) ) @@ -30614,7 +30614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1363) (i32.const 0) ) @@ -30634,7 +30634,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1364) (i32.const 0) ) @@ -30654,7 +30654,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1365) (i32.const 0) ) @@ -30674,7 +30674,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1366) (i32.const 0) ) @@ -30694,7 +30694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1367) (i32.const 0) ) @@ -30714,7 +30714,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1368) (i32.const 0) ) @@ -30734,7 +30734,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1369) (i32.const 0) ) @@ -30754,7 +30754,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1370) (i32.const 0) ) @@ -30774,7 +30774,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1371) (i32.const 0) ) @@ -30794,7 +30794,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1372) (i32.const 0) ) @@ -30814,7 +30814,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1375) (i32.const 0) ) @@ -30834,7 +30834,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1376) (i32.const 0) ) @@ -30854,7 +30854,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1377) (i32.const 0) ) @@ -30874,7 +30874,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1378) (i32.const 0) ) @@ -30894,7 +30894,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1379) (i32.const 0) ) @@ -30914,7 +30914,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1380) (i32.const 0) ) @@ -30934,7 +30934,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1381) (i32.const 0) ) @@ -30954,7 +30954,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1382) (i32.const 0) ) @@ -30974,7 +30974,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1383) (i32.const 0) ) @@ -30994,7 +30994,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1384) (i32.const 0) ) @@ -31014,7 +31014,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1385) (i32.const 0) ) @@ -31034,7 +31034,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1386) (i32.const 0) ) @@ -31054,7 +31054,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1387) (i32.const 0) ) @@ -31076,7 +31076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1388) (i32.const 0) ) @@ -31098,7 +31098,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1389) (i32.const 0) ) @@ -31120,7 +31120,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1390) (i32.const 0) ) @@ -31142,7 +31142,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1391) (i32.const 0) ) @@ -31162,7 +31162,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1392) (i32.const 0) ) @@ -31182,7 +31182,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1393) (i32.const 0) ) @@ -31202,7 +31202,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1402) (i32.const 0) ) @@ -31222,7 +31222,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1403) (i32.const 0) ) @@ -31242,7 +31242,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1404) (i32.const 0) ) @@ -31262,7 +31262,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1405) (i32.const 0) ) @@ -31282,7 +31282,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1406) (i32.const 0) ) @@ -31302,7 +31302,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1407) (i32.const 0) ) @@ -31322,7 +31322,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1408) (i32.const 0) ) @@ -31342,7 +31342,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1409) (i32.const 0) ) @@ -31362,7 +31362,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1410) (i32.const 0) ) @@ -31382,7 +31382,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1411) (i32.const 0) ) @@ -31402,7 +31402,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1414) (i32.const 0) ) @@ -31422,7 +31422,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1415) (i32.const 0) ) @@ -31442,7 +31442,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1416) (i32.const 0) ) @@ -31462,7 +31462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1417) (i32.const 0) ) @@ -31482,7 +31482,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1418) (i32.const 0) ) @@ -31502,7 +31502,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1419) (i32.const 0) ) @@ -31522,7 +31522,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1420) (i32.const 0) ) @@ -31542,7 +31542,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1421) (i32.const 0) ) @@ -31562,7 +31562,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1422) (i32.const 0) ) @@ -31582,7 +31582,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1423) (i32.const 0) ) @@ -31602,7 +31602,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1424) (i32.const 0) ) @@ -31622,7 +31622,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1425) (i32.const 0) ) @@ -31642,7 +31642,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1426) (i32.const 0) ) @@ -31664,7 +31664,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1427) (i32.const 0) ) @@ -31686,7 +31686,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1428) (i32.const 0) ) @@ -31708,7 +31708,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1429) (i32.const 0) ) @@ -31730,7 +31730,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1430) (i32.const 0) ) @@ -31750,7 +31750,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1431) (i32.const 0) ) @@ -31770,7 +31770,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1432) (i32.const 0) ) @@ -31789,7 +31789,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1444) (i32.const 0) ) @@ -31808,7 +31808,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1445) (i32.const 0) ) @@ -31827,7 +31827,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1446) (i32.const 0) ) @@ -31846,7 +31846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1447) (i32.const 0) ) @@ -31865,7 +31865,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1448) (i32.const 0) ) @@ -31884,7 +31884,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1449) (i32.const 0) ) @@ -31903,7 +31903,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1450) (i32.const 0) ) @@ -31922,7 +31922,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1451) (i32.const 0) ) @@ -31941,7 +31941,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1452) (i32.const 0) ) @@ -31960,7 +31960,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1453) (i32.const 0) ) @@ -31981,7 +31981,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1456) (i32.const 0) ) @@ -32002,7 +32002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1457) (i32.const 0) ) @@ -32021,7 +32021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1458) (i32.const 0) ) @@ -32040,7 +32040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1459) (i32.const 0) ) @@ -32059,7 +32059,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1460) (i32.const 0) ) @@ -32078,7 +32078,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1461) (i32.const 0) ) @@ -32099,7 +32099,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1462) (i32.const 0) ) @@ -32118,7 +32118,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1463) (i32.const 0) ) @@ -32139,7 +32139,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1472) (i32.const 0) ) @@ -32160,7 +32160,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1473) (i32.const 0) ) @@ -32179,7 +32179,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1474) (i32.const 0) ) @@ -32198,7 +32198,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1475) (i32.const 0) ) @@ -32217,7 +32217,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1476) (i32.const 0) ) @@ -32236,7 +32236,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1477) (i32.const 0) ) @@ -32257,7 +32257,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1478) (i32.const 0) ) @@ -32276,7 +32276,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1479) (i32.const 0) ) @@ -32297,7 +32297,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1482) (i32.const 0) ) @@ -32318,7 +32318,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1483) (i32.const 0) ) @@ -32337,7 +32337,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1484) (i32.const 0) ) @@ -32356,7 +32356,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1485) (i32.const 0) ) @@ -32375,7 +32375,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1486) (i32.const 0) ) @@ -32394,7 +32394,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1487) (i32.const 0) ) @@ -32415,7 +32415,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1488) (i32.const 0) ) @@ -32434,7 +32434,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1489) (i32.const 0) ) @@ -32453,7 +32453,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1501) (i32.const 0) ) @@ -32472,7 +32472,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1502) (i32.const 0) ) @@ -32491,7 +32491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1503) (i32.const 0) ) @@ -32510,7 +32510,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1504) (i32.const 0) ) @@ -32529,7 +32529,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1505) (i32.const 0) ) @@ -32548,7 +32548,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1506) (i32.const 0) ) @@ -32567,7 +32567,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1507) (i32.const 0) ) @@ -32586,7 +32586,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1508) (i32.const 0) ) @@ -32605,7 +32605,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1509) (i32.const 0) ) @@ -32624,7 +32624,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1510) (i32.const 0) ) @@ -32645,7 +32645,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1513) (i32.const 0) ) @@ -32666,7 +32666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1514) (i32.const 0) ) @@ -32685,7 +32685,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1515) (i32.const 0) ) @@ -32704,7 +32704,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1516) (i32.const 0) ) @@ -32723,7 +32723,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1517) (i32.const 0) ) @@ -32742,7 +32742,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1518) (i32.const 0) ) @@ -32763,7 +32763,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1519) (i32.const 0) ) @@ -32782,7 +32782,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1520) (i32.const 0) ) @@ -32801,7 +32801,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1529) (i32.const 0) ) @@ -32820,7 +32820,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1530) (i32.const 0) ) @@ -32839,7 +32839,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1531) (i32.const 0) ) @@ -32858,7 +32858,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1532) (i32.const 0) ) @@ -32877,7 +32877,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1533) (i32.const 0) ) @@ -32896,7 +32896,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1534) (i32.const 0) ) @@ -32915,7 +32915,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1535) (i32.const 0) ) @@ -32934,7 +32934,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1536) (i32.const 0) ) @@ -32953,7 +32953,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1537) (i32.const 0) ) @@ -32972,7 +32972,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1538) (i32.const 0) ) @@ -32993,7 +32993,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1541) (i32.const 0) ) @@ -33014,7 +33014,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1542) (i32.const 0) ) @@ -33033,7 +33033,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1543) (i32.const 0) ) @@ -33052,7 +33052,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1544) (i32.const 0) ) @@ -33071,7 +33071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1545) (i32.const 0) ) @@ -33090,7 +33090,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1546) (i32.const 0) ) @@ -33111,7 +33111,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1547) (i32.const 0) ) @@ -33130,7 +33130,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1548) (i32.const 0) ) @@ -33149,7 +33149,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1560) (i32.const 0) ) @@ -33168,7 +33168,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1561) (i32.const 0) ) @@ -33187,7 +33187,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1562) (i32.const 0) ) @@ -33206,7 +33206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1563) (i32.const 0) ) @@ -33225,7 +33225,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1564) (i32.const 0) ) @@ -33244,7 +33244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1565) (i32.const 0) ) @@ -33263,7 +33263,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1566) (i32.const 0) ) @@ -33282,7 +33282,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1567) (i32.const 0) ) @@ -33301,7 +33301,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1568) (i32.const 0) ) @@ -33320,7 +33320,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1569) (i32.const 0) ) @@ -33339,7 +33339,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1572) (i32.const 0) ) @@ -33358,7 +33358,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1573) (i32.const 0) ) @@ -33377,7 +33377,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1574) (i32.const 0) ) @@ -33396,7 +33396,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1575) (i32.const 0) ) @@ -33417,7 +33417,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1576) (i32.const 0) ) @@ -33436,7 +33436,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1577) (i32.const 0) ) @@ -33457,7 +33457,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1578) (i32.const 0) ) @@ -33476,7 +33476,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1579) (i32.const 0) ) @@ -33495,7 +33495,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1588) (i32.const 0) ) @@ -33514,7 +33514,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1589) (i32.const 0) ) @@ -33533,7 +33533,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1590) (i32.const 0) ) @@ -33552,7 +33552,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1591) (i32.const 0) ) @@ -33571,7 +33571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1592) (i32.const 0) ) @@ -33590,7 +33590,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1593) (i32.const 0) ) @@ -33609,7 +33609,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1594) (i32.const 0) ) @@ -33628,7 +33628,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1595) (i32.const 0) ) @@ -33647,7 +33647,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1596) (i32.const 0) ) @@ -33666,7 +33666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1597) (i32.const 0) ) @@ -33685,7 +33685,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1600) (i32.const 0) ) @@ -33704,7 +33704,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1601) (i32.const 0) ) @@ -33723,7 +33723,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1602) (i32.const 0) ) @@ -33742,7 +33742,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1603) (i32.const 0) ) @@ -33763,7 +33763,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1604) (i32.const 0) ) @@ -33782,7 +33782,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1605) (i32.const 0) ) @@ -33803,7 +33803,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1606) (i32.const 0) ) @@ -33822,7 +33822,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1607) (i32.const 0) ) @@ -33844,7 +33844,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1608) (i32.const 0) ) @@ -33863,7 +33863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1620) (i32.const 0) ) @@ -33882,7 +33882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1621) (i32.const 0) ) @@ -33901,7 +33901,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1622) (i32.const 0) ) @@ -33920,7 +33920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1623) (i32.const 0) ) @@ -33939,7 +33939,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1624) (i32.const 0) ) @@ -33958,7 +33958,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1625) (i32.const 0) ) @@ -33977,7 +33977,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1626) (i32.const 0) ) @@ -33996,7 +33996,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1627) (i32.const 0) ) @@ -34015,7 +34015,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1628) (i32.const 0) ) @@ -34034,7 +34034,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1629) (i32.const 0) ) @@ -34055,7 +34055,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1632) (i32.const 0) ) @@ -34076,7 +34076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1633) (i32.const 0) ) @@ -34095,7 +34095,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1634) (i32.const 0) ) @@ -34114,7 +34114,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1635) (i32.const 0) ) @@ -34133,7 +34133,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1636) (i32.const 0) ) @@ -34152,7 +34152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1637) (i32.const 0) ) @@ -34173,7 +34173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1638) (i32.const 0) ) @@ -34192,7 +34192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1639) (i32.const 0) ) @@ -34211,7 +34211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1648) (i32.const 0) ) @@ -34230,7 +34230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1649) (i32.const 0) ) @@ -34249,7 +34249,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1650) (i32.const 0) ) @@ -34268,7 +34268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1651) (i32.const 0) ) @@ -34287,7 +34287,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1652) (i32.const 0) ) @@ -34306,7 +34306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1653) (i32.const 0) ) @@ -34325,7 +34325,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1654) (i32.const 0) ) @@ -34344,7 +34344,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1655) (i32.const 0) ) @@ -34363,7 +34363,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1656) (i32.const 0) ) @@ -34382,7 +34382,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1657) (i32.const 0) ) @@ -34403,7 +34403,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1660) (i32.const 0) ) @@ -34424,7 +34424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1661) (i32.const 0) ) @@ -34443,7 +34443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1662) (i32.const 0) ) @@ -34462,7 +34462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1663) (i32.const 0) ) @@ -34481,7 +34481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1664) (i32.const 0) ) @@ -34500,7 +34500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1665) (i32.const 0) ) @@ -34521,7 +34521,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1666) (i32.const 0) ) @@ -34540,7 +34540,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1667) (i32.const 0) ) @@ -34560,7 +34560,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1679) (i32.const 0) ) @@ -34580,7 +34580,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1680) (i32.const 0) ) @@ -34600,7 +34600,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1681) (i32.const 0) ) @@ -34620,7 +34620,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1682) (i32.const 0) ) @@ -34640,7 +34640,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1683) (i32.const 0) ) @@ -34660,7 +34660,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1684) (i32.const 0) ) @@ -34680,7 +34680,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1685) (i32.const 0) ) @@ -34700,7 +34700,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1686) (i32.const 0) ) @@ -34720,7 +34720,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1687) (i32.const 0) ) @@ -34740,7 +34740,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1688) (i32.const 0) ) @@ -34760,7 +34760,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1691) (i32.const 0) ) @@ -34780,7 +34780,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1692) (i32.const 0) ) @@ -34800,7 +34800,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1693) (i32.const 0) ) @@ -34820,7 +34820,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1694) (i32.const 0) ) @@ -34840,7 +34840,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1695) (i32.const 0) ) @@ -34860,7 +34860,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1696) (i32.const 0) ) @@ -34880,7 +34880,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1697) (i32.const 0) ) @@ -34902,7 +34902,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1698) (i32.const 0) ) @@ -34922,7 +34922,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1699) (i32.const 0) ) @@ -34942,7 +34942,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1700) (i32.const 0) ) @@ -34962,7 +34962,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1701) (i32.const 0) ) @@ -34982,7 +34982,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1702) (i32.const 0) ) @@ -35002,7 +35002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1703) (i32.const 0) ) @@ -35022,7 +35022,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1704) (i32.const 0) ) @@ -35042,7 +35042,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1705) (i32.const 0) ) @@ -35062,7 +35062,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1706) (i32.const 0) ) @@ -35084,7 +35084,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1707) (i32.const 0) ) @@ -35104,7 +35104,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1708) (i32.const 0) ) @@ -35124,7 +35124,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1709) (i32.const 0) ) @@ -35144,7 +35144,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1710) (i32.const 0) ) @@ -35164,7 +35164,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1711) (i32.const 0) ) @@ -35186,7 +35186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1712) (i32.const 0) ) @@ -35206,7 +35206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1713) (i32.const 0) ) @@ -35226,7 +35226,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1714) (i32.const 0) ) @@ -35246,7 +35246,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1715) (i32.const 0) ) @@ -35266,7 +35266,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1716) (i32.const 0) ) @@ -35288,7 +35288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1717) (i32.const 0) ) @@ -35308,7 +35308,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1718) (i32.const 0) ) @@ -35328,7 +35328,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1719) (i32.const 0) ) @@ -35348,7 +35348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1720) (i32.const 0) ) @@ -35368,7 +35368,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1721) (i32.const 0) ) @@ -35390,7 +35390,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1722) (i32.const 0) ) @@ -35410,7 +35410,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1723) (i32.const 0) ) @@ -35430,7 +35430,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1724) (i32.const 0) ) @@ -35450,7 +35450,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1725) (i32.const 0) ) @@ -35472,7 +35472,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1726) (i32.const 0) ) @@ -35492,7 +35492,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1727) (i32.const 0) ) @@ -35512,7 +35512,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1728) (i32.const 0) ) @@ -35532,7 +35532,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1729) (i32.const 0) ) @@ -35552,7 +35552,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1730) (i32.const 0) ) @@ -35574,7 +35574,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1731) (i32.const 0) ) @@ -35596,7 +35596,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1732) (i32.const 0) ) @@ -35618,7 +35618,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1733) (i32.const 0) ) @@ -35638,7 +35638,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1734) (i32.const 0) ) @@ -35658,7 +35658,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1735) (i32.const 0) ) @@ -35678,7 +35678,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1736) (i32.const 0) ) @@ -35698,7 +35698,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1737) (i32.const 0) ) @@ -35718,7 +35718,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1738) (i32.const 0) ) @@ -35738,7 +35738,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1739) (i32.const 0) ) @@ -35760,7 +35760,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1740) (i32.const 0) ) @@ -35782,7 +35782,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1741) (i32.const 0) ) @@ -35804,7 +35804,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1742) (i32.const 0) ) @@ -35826,7 +35826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1743) (i32.const 0) ) @@ -35852,7 +35852,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1744) (i32.const 0) ) @@ -35872,7 +35872,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1745) (i32.const 0) ) @@ -35892,7 +35892,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1746) (i32.const 0) ) @@ -35912,7 +35912,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1747) (i32.const 0) ) @@ -35932,7 +35932,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1748) (i32.const 0) ) @@ -35952,7 +35952,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1757) (i32.const 0) ) @@ -35972,7 +35972,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1758) (i32.const 0) ) @@ -35992,7 +35992,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1759) (i32.const 0) ) @@ -36012,7 +36012,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1760) (i32.const 0) ) @@ -36032,7 +36032,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1761) (i32.const 0) ) @@ -36052,7 +36052,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1762) (i32.const 0) ) @@ -36072,7 +36072,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1763) (i32.const 0) ) @@ -36092,7 +36092,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1764) (i32.const 0) ) @@ -36112,7 +36112,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1765) (i32.const 0) ) @@ -36132,7 +36132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1766) (i32.const 0) ) @@ -36152,7 +36152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1769) (i32.const 0) ) @@ -36172,7 +36172,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1770) (i32.const 0) ) @@ -36192,7 +36192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1771) (i32.const 0) ) @@ -36212,7 +36212,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1772) (i32.const 0) ) @@ -36232,7 +36232,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1773) (i32.const 0) ) @@ -36252,7 +36252,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1774) (i32.const 0) ) @@ -36272,7 +36272,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1775) (i32.const 0) ) @@ -36294,7 +36294,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1776) (i32.const 0) ) @@ -36314,7 +36314,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1777) (i32.const 0) ) @@ -36334,7 +36334,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1778) (i32.const 0) ) @@ -36354,7 +36354,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1779) (i32.const 0) ) @@ -36374,7 +36374,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1780) (i32.const 0) ) @@ -36394,7 +36394,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1781) (i32.const 0) ) @@ -36414,7 +36414,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1782) (i32.const 0) ) @@ -36434,7 +36434,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1783) (i32.const 0) ) @@ -36454,7 +36454,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1784) (i32.const 0) ) @@ -36476,7 +36476,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1785) (i32.const 0) ) @@ -36496,7 +36496,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1786) (i32.const 0) ) @@ -36516,7 +36516,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1787) (i32.const 0) ) @@ -36536,7 +36536,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1788) (i32.const 0) ) @@ -36556,7 +36556,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1789) (i32.const 0) ) @@ -36578,7 +36578,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1790) (i32.const 0) ) @@ -36598,7 +36598,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1791) (i32.const 0) ) @@ -36618,7 +36618,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1792) (i32.const 0) ) @@ -36638,7 +36638,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1793) (i32.const 0) ) @@ -36658,7 +36658,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1794) (i32.const 0) ) @@ -36680,7 +36680,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1795) (i32.const 0) ) @@ -36700,7 +36700,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1796) (i32.const 0) ) @@ -36720,7 +36720,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1797) (i32.const 0) ) @@ -36740,7 +36740,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1798) (i32.const 0) ) @@ -36760,7 +36760,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1799) (i32.const 0) ) @@ -36782,7 +36782,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1800) (i32.const 0) ) @@ -36802,7 +36802,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1801) (i32.const 0) ) @@ -36822,7 +36822,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1802) (i32.const 0) ) @@ -36842,7 +36842,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1803) (i32.const 0) ) @@ -36864,7 +36864,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1804) (i32.const 0) ) @@ -36884,7 +36884,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1805) (i32.const 0) ) @@ -36904,7 +36904,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1806) (i32.const 0) ) @@ -36924,7 +36924,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1807) (i32.const 0) ) @@ -36944,7 +36944,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1808) (i32.const 0) ) @@ -36966,7 +36966,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1809) (i32.const 0) ) @@ -36988,7 +36988,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1810) (i32.const 0) ) @@ -37010,7 +37010,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1811) (i32.const 0) ) @@ -37030,7 +37030,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1812) (i32.const 0) ) @@ -37050,7 +37050,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1813) (i32.const 0) ) @@ -37070,7 +37070,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1814) (i32.const 0) ) @@ -37090,7 +37090,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1815) (i32.const 0) ) @@ -37110,7 +37110,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1816) (i32.const 0) ) @@ -37130,7 +37130,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1817) (i32.const 0) ) @@ -37152,7 +37152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1818) (i32.const 0) ) @@ -37174,7 +37174,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1819) (i32.const 0) ) @@ -37196,7 +37196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1820) (i32.const 0) ) @@ -37218,7 +37218,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1821) (i32.const 0) ) @@ -37244,7 +37244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1822) (i32.const 0) ) @@ -37264,7 +37264,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1823) (i32.const 0) ) @@ -37284,7 +37284,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1824) (i32.const 0) ) @@ -37304,7 +37304,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1825) (i32.const 0) ) @@ -37324,7 +37324,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1826) (i32.const 0) ) @@ -37344,7 +37344,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1838) (i32.const 0) ) @@ -37364,7 +37364,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1839) (i32.const 0) ) @@ -37384,7 +37384,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1840) (i32.const 0) ) @@ -37404,7 +37404,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1841) (i32.const 0) ) @@ -37424,7 +37424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1842) (i32.const 0) ) @@ -37444,7 +37444,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1843) (i32.const 0) ) @@ -37464,7 +37464,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1844) (i32.const 0) ) @@ -37484,7 +37484,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1845) (i32.const 0) ) @@ -37504,7 +37504,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1846) (i32.const 0) ) @@ -37524,7 +37524,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1847) (i32.const 0) ) @@ -37544,7 +37544,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1850) (i32.const 0) ) @@ -37564,7 +37564,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1851) (i32.const 0) ) @@ -37584,7 +37584,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1852) (i32.const 0) ) @@ -37604,7 +37604,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1853) (i32.const 0) ) @@ -37624,7 +37624,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1854) (i32.const 0) ) @@ -37644,7 +37644,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1855) (i32.const 0) ) @@ -37664,7 +37664,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1856) (i32.const 0) ) @@ -37688,7 +37688,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1857) (i32.const 0) ) @@ -37708,7 +37708,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1858) (i32.const 0) ) @@ -37728,7 +37728,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1859) (i32.const 0) ) @@ -37748,7 +37748,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1860) (i32.const 0) ) @@ -37768,7 +37768,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1861) (i32.const 0) ) @@ -37788,7 +37788,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1862) (i32.const 0) ) @@ -37808,7 +37808,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1863) (i32.const 0) ) @@ -37828,7 +37828,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1864) (i32.const 0) ) @@ -37848,7 +37848,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1865) (i32.const 0) ) @@ -37872,7 +37872,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1866) (i32.const 0) ) @@ -37892,7 +37892,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1867) (i32.const 0) ) @@ -37912,7 +37912,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1868) (i32.const 0) ) @@ -37932,7 +37932,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1869) (i32.const 0) ) @@ -37952,7 +37952,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1870) (i32.const 0) ) @@ -37976,7 +37976,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1871) (i32.const 0) ) @@ -37996,7 +37996,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1872) (i32.const 0) ) @@ -38016,7 +38016,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1873) (i32.const 0) ) @@ -38036,7 +38036,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1874) (i32.const 0) ) @@ -38056,7 +38056,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1875) (i32.const 0) ) @@ -38080,7 +38080,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1876) (i32.const 0) ) @@ -38100,7 +38100,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1877) (i32.const 0) ) @@ -38120,7 +38120,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1878) (i32.const 0) ) @@ -38140,7 +38140,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1879) (i32.const 0) ) @@ -38160,7 +38160,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1880) (i32.const 0) ) @@ -38184,7 +38184,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1881) (i32.const 0) ) @@ -38204,7 +38204,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1882) (i32.const 0) ) @@ -38224,7 +38224,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1883) (i32.const 0) ) @@ -38244,7 +38244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1884) (i32.const 0) ) @@ -38268,7 +38268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1885) (i32.const 0) ) @@ -38288,7 +38288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1886) (i32.const 0) ) @@ -38308,7 +38308,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1887) (i32.const 0) ) @@ -38328,7 +38328,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1888) (i32.const 0) ) @@ -38348,7 +38348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1889) (i32.const 0) ) @@ -38372,7 +38372,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1890) (i32.const 0) ) @@ -38396,7 +38396,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1891) (i32.const 0) ) @@ -38418,7 +38418,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1892) (i32.const 0) ) @@ -38438,7 +38438,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1893) (i32.const 0) ) @@ -38458,7 +38458,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1894) (i32.const 0) ) @@ -38478,7 +38478,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1895) (i32.const 0) ) @@ -38498,7 +38498,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1896) (i32.const 0) ) @@ -38518,7 +38518,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1897) (i32.const 0) ) @@ -38538,7 +38538,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1898) (i32.const 0) ) @@ -38562,7 +38562,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1899) (i32.const 0) ) @@ -38586,7 +38586,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1900) (i32.const 0) ) @@ -38610,7 +38610,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1901) (i32.const 0) ) @@ -38634,7 +38634,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1902) (i32.const 0) ) @@ -38660,7 +38660,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1903) (i32.const 0) ) @@ -38680,7 +38680,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1904) (i32.const 0) ) @@ -38700,7 +38700,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1905) (i32.const 0) ) @@ -38720,7 +38720,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1906) (i32.const 0) ) @@ -38740,7 +38740,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1907) (i32.const 0) ) @@ -38760,7 +38760,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1916) (i32.const 0) ) @@ -38780,7 +38780,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1917) (i32.const 0) ) @@ -38800,7 +38800,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1918) (i32.const 0) ) @@ -38820,7 +38820,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1919) (i32.const 0) ) @@ -38840,7 +38840,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1920) (i32.const 0) ) @@ -38860,7 +38860,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1921) (i32.const 0) ) @@ -38880,7 +38880,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1922) (i32.const 0) ) @@ -38900,7 +38900,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1923) (i32.const 0) ) @@ -38920,7 +38920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1924) (i32.const 0) ) @@ -38940,7 +38940,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1925) (i32.const 0) ) @@ -38960,7 +38960,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1928) (i32.const 0) ) @@ -38980,7 +38980,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1929) (i32.const 0) ) @@ -39000,7 +39000,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1930) (i32.const 0) ) @@ -39020,7 +39020,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1931) (i32.const 0) ) @@ -39040,7 +39040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1932) (i32.const 0) ) @@ -39060,7 +39060,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1933) (i32.const 0) ) @@ -39080,7 +39080,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1934) (i32.const 0) ) @@ -39104,7 +39104,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1935) (i32.const 0) ) @@ -39124,7 +39124,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1936) (i32.const 0) ) @@ -39144,7 +39144,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1937) (i32.const 0) ) @@ -39164,7 +39164,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1938) (i32.const 0) ) @@ -39184,7 +39184,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1939) (i32.const 0) ) @@ -39204,7 +39204,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1940) (i32.const 0) ) @@ -39224,7 +39224,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1941) (i32.const 0) ) @@ -39244,7 +39244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1942) (i32.const 0) ) @@ -39264,7 +39264,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1943) (i32.const 0) ) @@ -39288,7 +39288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1944) (i32.const 0) ) @@ -39308,7 +39308,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1945) (i32.const 0) ) @@ -39328,7 +39328,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1946) (i32.const 0) ) @@ -39348,7 +39348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1947) (i32.const 0) ) @@ -39368,7 +39368,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1948) (i32.const 0) ) @@ -39392,7 +39392,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1949) (i32.const 0) ) @@ -39412,7 +39412,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1950) (i32.const 0) ) @@ -39432,7 +39432,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1951) (i32.const 0) ) @@ -39452,7 +39452,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1952) (i32.const 0) ) @@ -39472,7 +39472,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1953) (i32.const 0) ) @@ -39496,7 +39496,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1954) (i32.const 0) ) @@ -39516,7 +39516,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1955) (i32.const 0) ) @@ -39536,7 +39536,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1956) (i32.const 0) ) @@ -39556,7 +39556,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1957) (i32.const 0) ) @@ -39576,7 +39576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1958) (i32.const 0) ) @@ -39600,7 +39600,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1959) (i32.const 0) ) @@ -39620,7 +39620,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1960) (i32.const 0) ) @@ -39640,7 +39640,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1961) (i32.const 0) ) @@ -39660,7 +39660,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1962) (i32.const 0) ) @@ -39684,7 +39684,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1963) (i32.const 0) ) @@ -39704,7 +39704,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1964) (i32.const 0) ) @@ -39724,7 +39724,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1965) (i32.const 0) ) @@ -39744,7 +39744,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1966) (i32.const 0) ) @@ -39764,7 +39764,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1967) (i32.const 0) ) @@ -39788,7 +39788,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1968) (i32.const 0) ) @@ -39812,7 +39812,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1969) (i32.const 0) ) @@ -39834,7 +39834,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1970) (i32.const 0) ) @@ -39854,7 +39854,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1971) (i32.const 0) ) @@ -39874,7 +39874,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1972) (i32.const 0) ) @@ -39894,7 +39894,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1973) (i32.const 0) ) @@ -39914,7 +39914,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1974) (i32.const 0) ) @@ -39934,7 +39934,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1975) (i32.const 0) ) @@ -39954,7 +39954,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1976) (i32.const 0) ) @@ -39978,7 +39978,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1977) (i32.const 0) ) @@ -40002,7 +40002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1978) (i32.const 0) ) @@ -40026,7 +40026,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1979) (i32.const 0) ) @@ -40050,7 +40050,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1980) (i32.const 0) ) @@ -40076,7 +40076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1981) (i32.const 0) ) @@ -40096,7 +40096,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1982) (i32.const 0) ) @@ -40116,7 +40116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1983) (i32.const 0) ) @@ -40136,7 +40136,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1984) (i32.const 0) ) @@ -40156,7 +40156,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1985) (i32.const 0) ) @@ -40176,7 +40176,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2001) (i32.const 0) ) @@ -40196,7 +40196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2002) (i32.const 0) ) @@ -40216,7 +40216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2003) (i32.const 0) ) @@ -40236,7 +40236,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2004) (i32.const 0) ) @@ -40256,7 +40256,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2005) (i32.const 0) ) @@ -40276,7 +40276,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2006) (i32.const 0) ) @@ -40296,7 +40296,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2007) (i32.const 0) ) @@ -40316,7 +40316,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2008) (i32.const 0) ) @@ -40336,7 +40336,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2009) (i32.const 0) ) @@ -40356,7 +40356,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2010) (i32.const 0) ) @@ -40376,7 +40376,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2013) (i32.const 0) ) @@ -40396,7 +40396,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2014) (i32.const 0) ) @@ -40416,7 +40416,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2015) (i32.const 0) ) @@ -40436,7 +40436,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2016) (i32.const 0) ) @@ -40456,7 +40456,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2017) (i32.const 0) ) @@ -40476,7 +40476,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2018) (i32.const 0) ) @@ -40496,7 +40496,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2019) (i32.const 0) ) @@ -40516,7 +40516,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2020) (i32.const 0) ) @@ -40536,7 +40536,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2021) (i32.const 0) ) @@ -40556,7 +40556,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2022) (i32.const 0) ) @@ -40576,7 +40576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2023) (i32.const 0) ) @@ -40598,7 +40598,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2024) (i32.const 0) ) @@ -40618,7 +40618,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2025) (i32.const 0) ) @@ -40638,7 +40638,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2026) (i32.const 0) ) @@ -40658,7 +40658,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2027) (i32.const 0) ) @@ -40678,7 +40678,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2028) (i32.const 0) ) @@ -40698,7 +40698,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2029) (i32.const 0) ) @@ -40718,7 +40718,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2030) (i32.const 0) ) @@ -40738,7 +40738,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2031) (i32.const 0) ) @@ -40758,7 +40758,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2032) (i32.const 0) ) @@ -40778,7 +40778,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2033) (i32.const 0) ) @@ -40798,7 +40798,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2034) (i32.const 0) ) @@ -40818,7 +40818,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2035) (i32.const 0) ) @@ -40838,7 +40838,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2036) (i32.const 0) ) @@ -40860,7 +40860,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2037) (i32.const 0) ) @@ -40880,7 +40880,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2038) (i32.const 0) ) @@ -40900,7 +40900,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2039) (i32.const 0) ) @@ -40920,7 +40920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2040) (i32.const 0) ) @@ -40940,7 +40940,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2041) (i32.const 0) ) @@ -40962,7 +40962,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2042) (i32.const 0) ) @@ -40982,7 +40982,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2043) (i32.const 0) ) @@ -41002,7 +41002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2044) (i32.const 0) ) @@ -41022,7 +41022,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2045) (i32.const 0) ) @@ -41042,7 +41042,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2046) (i32.const 0) ) @@ -41064,7 +41064,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2047) (i32.const 0) ) @@ -41084,7 +41084,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2048) (i32.const 0) ) @@ -41104,7 +41104,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2049) (i32.const 0) ) @@ -41124,7 +41124,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2050) (i32.const 0) ) @@ -41144,7 +41144,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2051) (i32.const 0) ) @@ -41166,7 +41166,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2052) (i32.const 0) ) @@ -41186,7 +41186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2053) (i32.const 0) ) @@ -41206,7 +41206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2054) (i32.const 0) ) @@ -41226,7 +41226,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2055) (i32.const 0) ) @@ -41248,7 +41248,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2056) (i32.const 0) ) @@ -41268,7 +41268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2057) (i32.const 0) ) @@ -41288,7 +41288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2058) (i32.const 0) ) @@ -41308,7 +41308,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2059) (i32.const 0) ) @@ -41328,7 +41328,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2060) (i32.const 0) ) @@ -41350,7 +41350,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2061) (i32.const 0) ) @@ -41372,7 +41372,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2062) (i32.const 0) ) @@ -41394,7 +41394,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2063) (i32.const 0) ) @@ -41414,7 +41414,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2064) (i32.const 0) ) @@ -41434,7 +41434,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2065) (i32.const 0) ) @@ -41454,7 +41454,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2066) (i32.const 0) ) @@ -41474,7 +41474,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2067) (i32.const 0) ) @@ -41494,7 +41494,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2068) (i32.const 0) ) @@ -41514,7 +41514,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2069) (i32.const 0) ) @@ -41536,7 +41536,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2070) (i32.const 0) ) @@ -41558,7 +41558,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2071) (i32.const 0) ) @@ -41580,7 +41580,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2072) (i32.const 0) ) @@ -41602,7 +41602,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2073) (i32.const 0) ) @@ -41626,7 +41626,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2074) (i32.const 0) ) @@ -41646,7 +41646,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2075) (i32.const 0) ) @@ -41666,7 +41666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2076) (i32.const 0) ) @@ -41686,7 +41686,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2077) (i32.const 0) ) @@ -41706,7 +41706,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2078) (i32.const 0) ) @@ -41726,7 +41726,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2087) (i32.const 0) ) @@ -41746,7 +41746,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2088) (i32.const 0) ) @@ -41766,7 +41766,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2089) (i32.const 0) ) @@ -41786,7 +41786,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2090) (i32.const 0) ) @@ -41806,7 +41806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2091) (i32.const 0) ) @@ -41826,7 +41826,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2092) (i32.const 0) ) @@ -41846,7 +41846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2093) (i32.const 0) ) @@ -41866,7 +41866,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2094) (i32.const 0) ) @@ -41886,7 +41886,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2095) (i32.const 0) ) @@ -41906,7 +41906,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2096) (i32.const 0) ) @@ -41926,7 +41926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2099) (i32.const 0) ) @@ -41946,7 +41946,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2100) (i32.const 0) ) @@ -41966,7 +41966,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2101) (i32.const 0) ) @@ -41986,7 +41986,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2102) (i32.const 0) ) @@ -42006,7 +42006,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2103) (i32.const 0) ) @@ -42026,7 +42026,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2104) (i32.const 0) ) @@ -42046,7 +42046,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2105) (i32.const 0) ) @@ -42066,7 +42066,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2106) (i32.const 0) ) @@ -42086,7 +42086,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2107) (i32.const 0) ) @@ -42106,7 +42106,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2108) (i32.const 0) ) @@ -42126,7 +42126,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2109) (i32.const 0) ) @@ -42148,7 +42148,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2110) (i32.const 0) ) @@ -42168,7 +42168,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2111) (i32.const 0) ) @@ -42188,7 +42188,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2112) (i32.const 0) ) @@ -42208,7 +42208,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2113) (i32.const 0) ) @@ -42228,7 +42228,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2114) (i32.const 0) ) @@ -42248,7 +42248,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2115) (i32.const 0) ) @@ -42268,7 +42268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2116) (i32.const 0) ) @@ -42288,7 +42288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2117) (i32.const 0) ) @@ -42308,7 +42308,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2118) (i32.const 0) ) @@ -42328,7 +42328,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2119) (i32.const 0) ) @@ -42348,7 +42348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2120) (i32.const 0) ) @@ -42368,7 +42368,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2121) (i32.const 0) ) @@ -42388,7 +42388,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2122) (i32.const 0) ) @@ -42410,7 +42410,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2123) (i32.const 0) ) @@ -42430,7 +42430,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2124) (i32.const 0) ) @@ -42450,7 +42450,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2125) (i32.const 0) ) @@ -42470,7 +42470,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2126) (i32.const 0) ) @@ -42490,7 +42490,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2127) (i32.const 0) ) @@ -42512,7 +42512,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2128) (i32.const 0) ) @@ -42532,7 +42532,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2129) (i32.const 0) ) @@ -42552,7 +42552,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2130) (i32.const 0) ) @@ -42572,7 +42572,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2131) (i32.const 0) ) @@ -42592,7 +42592,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2132) (i32.const 0) ) @@ -42614,7 +42614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2133) (i32.const 0) ) @@ -42634,7 +42634,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2134) (i32.const 0) ) @@ -42654,7 +42654,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2135) (i32.const 0) ) @@ -42674,7 +42674,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2136) (i32.const 0) ) @@ -42694,7 +42694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2137) (i32.const 0) ) @@ -42716,7 +42716,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2138) (i32.const 0) ) @@ -42736,7 +42736,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2139) (i32.const 0) ) @@ -42756,7 +42756,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2140) (i32.const 0) ) @@ -42776,7 +42776,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2141) (i32.const 0) ) @@ -42798,7 +42798,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2142) (i32.const 0) ) @@ -42818,7 +42818,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2143) (i32.const 0) ) @@ -42838,7 +42838,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2144) (i32.const 0) ) @@ -42858,7 +42858,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2145) (i32.const 0) ) @@ -42878,7 +42878,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2146) (i32.const 0) ) @@ -42900,7 +42900,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2147) (i32.const 0) ) @@ -42922,7 +42922,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2148) (i32.const 0) ) @@ -42944,7 +42944,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2149) (i32.const 0) ) @@ -42964,7 +42964,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2150) (i32.const 0) ) @@ -42984,7 +42984,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2151) (i32.const 0) ) @@ -43004,7 +43004,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2152) (i32.const 0) ) @@ -43024,7 +43024,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2153) (i32.const 0) ) @@ -43044,7 +43044,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2154) (i32.const 0) ) @@ -43064,7 +43064,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2155) (i32.const 0) ) @@ -43086,7 +43086,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2156) (i32.const 0) ) @@ -43108,7 +43108,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2157) (i32.const 0) ) @@ -43130,7 +43130,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2158) (i32.const 0) ) @@ -43152,7 +43152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2159) (i32.const 0) ) @@ -43176,7 +43176,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2160) (i32.const 0) ) @@ -43196,7 +43196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2161) (i32.const 0) ) @@ -43216,7 +43216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2162) (i32.const 0) ) @@ -43236,7 +43236,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2163) (i32.const 0) ) @@ -43256,7 +43256,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2164) (i32.const 0) ) @@ -43276,7 +43276,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2176) (i32.const 0) ) @@ -43296,7 +43296,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2177) (i32.const 0) ) @@ -43316,7 +43316,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2178) (i32.const 0) ) @@ -43336,7 +43336,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2179) (i32.const 0) ) @@ -43356,7 +43356,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2180) (i32.const 0) ) @@ -43376,7 +43376,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2181) (i32.const 0) ) @@ -43396,7 +43396,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2182) (i32.const 0) ) @@ -43416,7 +43416,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2183) (i32.const 0) ) @@ -43436,7 +43436,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2184) (i32.const 0) ) @@ -43456,7 +43456,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2185) (i32.const 0) ) @@ -43476,7 +43476,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2188) (i32.const 0) ) @@ -43496,7 +43496,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2189) (i32.const 0) ) @@ -43516,7 +43516,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2190) (i32.const 0) ) @@ -43536,7 +43536,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2191) (i32.const 0) ) @@ -43556,7 +43556,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2192) (i32.const 0) ) @@ -43576,7 +43576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2193) (i32.const 0) ) @@ -43596,7 +43596,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2194) (i32.const 0) ) @@ -43616,7 +43616,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2195) (i32.const 0) ) @@ -43636,7 +43636,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2196) (i32.const 0) ) @@ -43656,7 +43656,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2197) (i32.const 0) ) @@ -43676,7 +43676,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2198) (i32.const 0) ) @@ -43696,7 +43696,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2199) (i32.const 0) ) @@ -43716,7 +43716,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2200) (i32.const 0) ) @@ -43738,7 +43738,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2201) (i32.const 0) ) @@ -43758,7 +43758,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2202) (i32.const 0) ) @@ -43778,7 +43778,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2203) (i32.const 0) ) @@ -43798,7 +43798,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2204) (i32.const 0) ) @@ -43818,7 +43818,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2205) (i32.const 0) ) @@ -43838,7 +43838,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2206) (i32.const 0) ) @@ -43858,7 +43858,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2207) (i32.const 0) ) @@ -43878,7 +43878,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2208) (i32.const 0) ) @@ -43898,7 +43898,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2209) (i32.const 0) ) @@ -43918,7 +43918,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2210) (i32.const 0) ) @@ -43940,7 +43940,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2211) (i32.const 0) ) @@ -43960,7 +43960,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2212) (i32.const 0) ) @@ -43982,7 +43982,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2213) (i32.const 0) ) @@ -44002,7 +44002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2214) (i32.const 0) ) @@ -44024,7 +44024,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2215) (i32.const 0) ) @@ -44044,7 +44044,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2216) (i32.const 0) ) @@ -44064,7 +44064,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2217) (i32.const 0) ) @@ -44086,7 +44086,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2218) (i32.const 0) ) @@ -44106,7 +44106,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2219) (i32.const 0) ) @@ -44126,7 +44126,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2220) (i32.const 0) ) @@ -44146,7 +44146,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2221) (i32.const 0) ) @@ -44166,7 +44166,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2222) (i32.const 0) ) @@ -44186,7 +44186,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2223) (i32.const 0) ) @@ -44208,7 +44208,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2224) (i32.const 0) ) @@ -44228,7 +44228,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2225) (i32.const 0) ) @@ -44248,7 +44248,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2226) (i32.const 0) ) @@ -44268,7 +44268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2227) (i32.const 0) ) @@ -44288,7 +44288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2228) (i32.const 0) ) @@ -44308,7 +44308,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2229) (i32.const 0) ) @@ -44330,7 +44330,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2230) (i32.const 0) ) @@ -44350,7 +44350,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2231) (i32.const 0) ) @@ -44370,7 +44370,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2232) (i32.const 0) ) @@ -44390,7 +44390,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2233) (i32.const 0) ) @@ -44410,7 +44410,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2234) (i32.const 0) ) @@ -44430,7 +44430,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2235) (i32.const 0) ) @@ -44450,7 +44450,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2236) (i32.const 0) ) @@ -44470,7 +44470,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2237) (i32.const 0) ) @@ -44492,7 +44492,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2238) (i32.const 0) ) @@ -44512,7 +44512,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2239) (i32.const 0) ) @@ -44532,7 +44532,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2240) (i32.const 0) ) @@ -44552,7 +44552,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2241) (i32.const 0) ) @@ -44572,7 +44572,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2242) (i32.const 0) ) @@ -44592,7 +44592,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2243) (i32.const 0) ) @@ -44612,7 +44612,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2244) (i32.const 0) ) @@ -44632,7 +44632,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2245) (i32.const 0) ) @@ -44652,7 +44652,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2246) (i32.const 0) ) @@ -44672,7 +44672,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2247) (i32.const 0) ) @@ -44694,7 +44694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2248) (i32.const 0) ) @@ -44714,7 +44714,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2249) (i32.const 0) ) @@ -44734,7 +44734,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2250) (i32.const 0) ) @@ -44756,7 +44756,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2251) (i32.const 0) ) @@ -44776,7 +44776,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2252) (i32.const 0) ) @@ -44796,7 +44796,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2253) (i32.const 0) ) @@ -44818,7 +44818,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2254) (i32.const 0) ) @@ -44838,7 +44838,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2255) (i32.const 0) ) @@ -44858,7 +44858,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2256) (i32.const 0) ) @@ -44878,7 +44878,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2257) (i32.const 0) ) @@ -44900,7 +44900,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2258) (i32.const 0) ) @@ -44920,7 +44920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2259) (i32.const 0) ) @@ -44940,7 +44940,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2260) (i32.const 0) ) @@ -44960,7 +44960,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2261) (i32.const 0) ) @@ -44980,7 +44980,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2262) (i32.const 0) ) @@ -45000,7 +45000,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2263) (i32.const 0) ) @@ -45020,7 +45020,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2264) (i32.const 0) ) @@ -45040,7 +45040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2265) (i32.const 0) ) @@ -45062,7 +45062,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2266) (i32.const 0) ) @@ -45084,7 +45084,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2267) (i32.const 0) ) @@ -45108,7 +45108,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2268) (i32.const 0) ) @@ -45132,7 +45132,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2269) (i32.const 0) ) @@ -45154,7 +45154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2270) (i32.const 0) ) @@ -45178,7 +45178,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2271) (i32.const 0) ) @@ -45200,7 +45200,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2272) (i32.const 0) ) @@ -45222,7 +45222,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2273) (i32.const 0) ) @@ -45244,7 +45244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2274) (i32.const 0) ) @@ -45266,7 +45266,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2275) (i32.const 0) ) @@ -45286,7 +45286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2276) (i32.const 0) ) @@ -45306,7 +45306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2277) (i32.const 0) ) @@ -45326,7 +45326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2278) (i32.const 0) ) @@ -45346,7 +45346,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2279) (i32.const 0) ) @@ -45366,7 +45366,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2288) (i32.const 0) ) @@ -45386,7 +45386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2289) (i32.const 0) ) @@ -45406,7 +45406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2290) (i32.const 0) ) @@ -45426,7 +45426,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2291) (i32.const 0) ) @@ -45446,7 +45446,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2292) (i32.const 0) ) @@ -45466,7 +45466,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2293) (i32.const 0) ) @@ -45486,7 +45486,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2294) (i32.const 0) ) @@ -45506,7 +45506,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2295) (i32.const 0) ) @@ -45526,7 +45526,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2296) (i32.const 0) ) @@ -45546,7 +45546,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2297) (i32.const 0) ) @@ -45566,7 +45566,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2300) (i32.const 0) ) @@ -45586,7 +45586,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2301) (i32.const 0) ) @@ -45606,7 +45606,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2302) (i32.const 0) ) @@ -45626,7 +45626,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2303) (i32.const 0) ) @@ -45646,7 +45646,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2304) (i32.const 0) ) @@ -45666,7 +45666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2305) (i32.const 0) ) @@ -45686,7 +45686,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2306) (i32.const 0) ) @@ -45706,7 +45706,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2307) (i32.const 0) ) @@ -45726,7 +45726,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2308) (i32.const 0) ) @@ -45746,7 +45746,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2309) (i32.const 0) ) @@ -45766,7 +45766,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2310) (i32.const 0) ) @@ -45786,7 +45786,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2311) (i32.const 0) ) @@ -45806,7 +45806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2312) (i32.const 0) ) @@ -45828,7 +45828,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2313) (i32.const 0) ) @@ -45848,7 +45848,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2314) (i32.const 0) ) @@ -45868,7 +45868,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2315) (i32.const 0) ) @@ -45888,7 +45888,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2316) (i32.const 0) ) @@ -45908,7 +45908,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2317) (i32.const 0) ) @@ -45928,7 +45928,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2318) (i32.const 0) ) @@ -45948,7 +45948,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2319) (i32.const 0) ) @@ -45968,7 +45968,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2320) (i32.const 0) ) @@ -45988,7 +45988,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2321) (i32.const 0) ) @@ -46008,7 +46008,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2322) (i32.const 0) ) @@ -46030,7 +46030,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2323) (i32.const 0) ) @@ -46050,7 +46050,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2324) (i32.const 0) ) @@ -46072,7 +46072,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2325) (i32.const 0) ) @@ -46092,7 +46092,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2326) (i32.const 0) ) @@ -46114,7 +46114,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2327) (i32.const 0) ) @@ -46134,7 +46134,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2328) (i32.const 0) ) @@ -46154,7 +46154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2329) (i32.const 0) ) @@ -46176,7 +46176,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2330) (i32.const 0) ) @@ -46196,7 +46196,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2331) (i32.const 0) ) @@ -46216,7 +46216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2332) (i32.const 0) ) @@ -46236,7 +46236,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2333) (i32.const 0) ) @@ -46256,7 +46256,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2334) (i32.const 0) ) @@ -46276,7 +46276,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2335) (i32.const 0) ) @@ -46298,7 +46298,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2336) (i32.const 0) ) @@ -46318,7 +46318,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2337) (i32.const 0) ) @@ -46338,7 +46338,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2338) (i32.const 0) ) @@ -46358,7 +46358,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2339) (i32.const 0) ) @@ -46378,7 +46378,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2340) (i32.const 0) ) @@ -46398,7 +46398,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2341) (i32.const 0) ) @@ -46420,7 +46420,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2342) (i32.const 0) ) @@ -46440,7 +46440,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2343) (i32.const 0) ) @@ -46460,7 +46460,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2344) (i32.const 0) ) @@ -46480,7 +46480,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2345) (i32.const 0) ) @@ -46500,7 +46500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2346) (i32.const 0) ) @@ -46520,7 +46520,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2347) (i32.const 0) ) @@ -46540,7 +46540,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2348) (i32.const 0) ) @@ -46560,7 +46560,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2349) (i32.const 0) ) @@ -46582,7 +46582,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2350) (i32.const 0) ) @@ -46602,7 +46602,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2351) (i32.const 0) ) @@ -46622,7 +46622,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2352) (i32.const 0) ) @@ -46642,7 +46642,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2353) (i32.const 0) ) @@ -46662,7 +46662,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2354) (i32.const 0) ) @@ -46682,7 +46682,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2355) (i32.const 0) ) @@ -46702,7 +46702,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2356) (i32.const 0) ) @@ -46722,7 +46722,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2357) (i32.const 0) ) @@ -46742,7 +46742,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2358) (i32.const 0) ) @@ -46762,7 +46762,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2359) (i32.const 0) ) @@ -46784,7 +46784,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2360) (i32.const 0) ) @@ -46804,7 +46804,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2361) (i32.const 0) ) @@ -46824,7 +46824,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2362) (i32.const 0) ) @@ -46846,7 +46846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2363) (i32.const 0) ) @@ -46866,7 +46866,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2364) (i32.const 0) ) @@ -46886,7 +46886,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2365) (i32.const 0) ) @@ -46908,7 +46908,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2366) (i32.const 0) ) @@ -46928,7 +46928,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2367) (i32.const 0) ) @@ -46948,7 +46948,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2368) (i32.const 0) ) @@ -46968,7 +46968,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2369) (i32.const 0) ) @@ -46990,7 +46990,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2370) (i32.const 0) ) @@ -47010,7 +47010,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2371) (i32.const 0) ) @@ -47030,7 +47030,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2372) (i32.const 0) ) @@ -47050,7 +47050,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2373) (i32.const 0) ) @@ -47070,7 +47070,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2374) (i32.const 0) ) @@ -47090,7 +47090,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2375) (i32.const 0) ) @@ -47110,7 +47110,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2376) (i32.const 0) ) @@ -47130,7 +47130,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2377) (i32.const 0) ) @@ -47152,7 +47152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2378) (i32.const 0) ) @@ -47174,7 +47174,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2379) (i32.const 0) ) @@ -47198,7 +47198,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2380) (i32.const 0) ) @@ -47222,7 +47222,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2381) (i32.const 0) ) @@ -47244,7 +47244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2382) (i32.const 0) ) @@ -47268,7 +47268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2383) (i32.const 0) ) @@ -47290,7 +47290,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2384) (i32.const 0) ) @@ -47312,7 +47312,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2385) (i32.const 0) ) @@ -47334,7 +47334,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2386) (i32.const 0) ) @@ -47356,7 +47356,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2387) (i32.const 0) ) @@ -47376,7 +47376,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2388) (i32.const 0) ) @@ -47396,7 +47396,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2389) (i32.const 0) ) @@ -47416,7 +47416,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2390) (i32.const 0) ) @@ -47436,7 +47436,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2391) (i32.const 0) ) @@ -47484,7 +47484,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2400) (i32.const 2) ) @@ -47549,7 +47549,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2408) (i32.const 2) ) @@ -47580,7 +47580,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2422) (i32.const 0) ) @@ -47599,7 +47599,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2423) (i32.const 0) ) @@ -47618,7 +47618,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2424) (i32.const 0) ) @@ -47637,7 +47637,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2425) (i32.const 0) ) @@ -47656,7 +47656,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2426) (i32.const 0) ) @@ -47675,7 +47675,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2427) (i32.const 0) ) @@ -47694,7 +47694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2428) (i32.const 0) ) @@ -47713,7 +47713,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2429) (i32.const 0) ) @@ -47732,7 +47732,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2430) (i32.const 0) ) @@ -47751,7 +47751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2431) (i32.const 0) ) @@ -47770,7 +47770,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2434) (i32.const 0) ) @@ -47789,7 +47789,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2435) (i32.const 0) ) @@ -47812,7 +47812,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2436) (i32.const 0) ) @@ -47831,7 +47831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2437) (i32.const 0) ) @@ -47850,7 +47850,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2438) (i32.const 0) ) @@ -47869,7 +47869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2439) (i32.const 0) ) @@ -47888,7 +47888,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2440) (i32.const 0) ) @@ -47907,7 +47907,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2441) (i32.const 0) ) @@ -47926,7 +47926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2442) (i32.const 0) ) @@ -47945,7 +47945,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2443) (i32.const 0) ) @@ -47964,7 +47964,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2444) (i32.const 0) ) @@ -47983,7 +47983,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2445) (i32.const 0) ) @@ -48002,7 +48002,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2446) (i32.const 0) ) @@ -48021,7 +48021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2447) (i32.const 0) ) @@ -48040,7 +48040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2448) (i32.const 0) ) @@ -48059,7 +48059,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2449) (i32.const 0) ) @@ -48078,7 +48078,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2450) (i32.const 0) ) @@ -48097,7 +48097,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2459) (i32.const 0) ) @@ -48116,7 +48116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2460) (i32.const 0) ) @@ -48135,7 +48135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2461) (i32.const 0) ) @@ -48154,7 +48154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2462) (i32.const 0) ) @@ -48173,7 +48173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2463) (i32.const 0) ) @@ -48192,7 +48192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2464) (i32.const 0) ) @@ -48211,7 +48211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2465) (i32.const 0) ) @@ -48230,7 +48230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2466) (i32.const 0) ) @@ -48249,7 +48249,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2467) (i32.const 0) ) @@ -48268,7 +48268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2468) (i32.const 0) ) @@ -48287,7 +48287,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2471) (i32.const 0) ) @@ -48306,7 +48306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2472) (i32.const 0) ) @@ -48329,7 +48329,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2473) (i32.const 0) ) @@ -48348,7 +48348,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2474) (i32.const 0) ) @@ -48367,7 +48367,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2475) (i32.const 0) ) @@ -48386,7 +48386,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2476) (i32.const 0) ) @@ -48405,7 +48405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2477) (i32.const 0) ) @@ -48424,7 +48424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2478) (i32.const 0) ) @@ -48443,7 +48443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2479) (i32.const 0) ) @@ -48462,7 +48462,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2480) (i32.const 0) ) @@ -48481,7 +48481,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2481) (i32.const 0) ) @@ -48500,7 +48500,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2482) (i32.const 0) ) @@ -48519,7 +48519,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2483) (i32.const 0) ) @@ -48538,7 +48538,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2484) (i32.const 0) ) @@ -48557,7 +48557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2485) (i32.const 0) ) @@ -48576,7 +48576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2486) (i32.const 0) ) @@ -48595,7 +48595,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2487) (i32.const 0) ) @@ -48614,7 +48614,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2498) (i32.const 0) ) @@ -48633,7 +48633,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2499) (i32.const 0) ) @@ -48652,7 +48652,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2500) (i32.const 0) ) @@ -48671,7 +48671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2501) (i32.const 0) ) @@ -48690,7 +48690,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2502) (i32.const 0) ) @@ -48709,7 +48709,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2503) (i32.const 0) ) @@ -48728,7 +48728,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2504) (i32.const 0) ) @@ -48749,7 +48749,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2505) (i32.const 0) ) @@ -48768,7 +48768,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2506) (i32.const 0) ) @@ -48787,7 +48787,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2514) (i32.const 0) ) @@ -48806,7 +48806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2515) (i32.const 0) ) @@ -48825,7 +48825,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2516) (i32.const 0) ) @@ -48844,7 +48844,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2517) (i32.const 0) ) @@ -48863,7 +48863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2518) (i32.const 0) ) @@ -48882,7 +48882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2519) (i32.const 0) ) @@ -48901,7 +48901,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2520) (i32.const 0) ) @@ -48922,7 +48922,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2521) (i32.const 0) ) @@ -48941,7 +48941,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2522) (i32.const 0) ) @@ -48961,7 +48961,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2533) (i32.const 0) ) @@ -48981,7 +48981,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2534) (i32.const 0) ) @@ -49001,7 +49001,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2535) (i32.const 0) ) @@ -49021,7 +49021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2536) (i32.const 0) ) @@ -49041,7 +49041,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2537) (i32.const 0) ) @@ -49061,7 +49061,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2538) (i32.const 0) ) @@ -49081,7 +49081,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2539) (i32.const 0) ) @@ -49101,7 +49101,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2540) (i32.const 0) ) @@ -49121,7 +49121,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2541) (i32.const 0) ) @@ -49141,7 +49141,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2542) (i32.const 0) ) @@ -49161,7 +49161,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2545) (i32.const 0) ) @@ -49181,7 +49181,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2546) (i32.const 0) ) @@ -49201,7 +49201,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2547) (i32.const 0) ) @@ -49221,7 +49221,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2548) (i32.const 0) ) @@ -49241,7 +49241,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2549) (i32.const 0) ) @@ -49261,7 +49261,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2550) (i32.const 0) ) @@ -49281,7 +49281,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2551) (i32.const 0) ) @@ -49301,7 +49301,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2552) (i32.const 0) ) @@ -49321,7 +49321,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2553) (i32.const 0) ) @@ -49341,7 +49341,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2554) (i32.const 0) ) @@ -49361,7 +49361,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2555) (i32.const 0) ) @@ -49383,7 +49383,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2556) (i32.const 0) ) @@ -49403,7 +49403,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2557) (i32.const 0) ) @@ -49423,7 +49423,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2558) (i32.const 0) ) @@ -49443,7 +49443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2559) (i32.const 0) ) @@ -49463,7 +49463,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2560) (i32.const 0) ) @@ -49483,7 +49483,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2561) (i32.const 0) ) @@ -49503,7 +49503,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2562) (i32.const 0) ) @@ -49523,7 +49523,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2563) (i32.const 0) ) @@ -49543,7 +49543,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2564) (i32.const 0) ) @@ -49563,7 +49563,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2565) (i32.const 0) ) @@ -49583,7 +49583,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2566) (i32.const 0) ) @@ -49603,7 +49603,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2567) (i32.const 0) ) @@ -49623,7 +49623,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2568) (i32.const 0) ) @@ -49645,7 +49645,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2569) (i32.const 0) ) @@ -49665,7 +49665,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2570) (i32.const 0) ) @@ -49685,7 +49685,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2571) (i32.const 0) ) @@ -49705,7 +49705,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2572) (i32.const 0) ) @@ -49725,7 +49725,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2573) (i32.const 0) ) @@ -49747,7 +49747,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2574) (i32.const 0) ) @@ -49767,7 +49767,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2575) (i32.const 0) ) @@ -49787,7 +49787,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2576) (i32.const 0) ) @@ -49807,7 +49807,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2577) (i32.const 0) ) @@ -49827,7 +49827,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2578) (i32.const 0) ) @@ -49849,7 +49849,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2579) (i32.const 0) ) @@ -49869,7 +49869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2580) (i32.const 0) ) @@ -49889,7 +49889,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2581) (i32.const 0) ) @@ -49909,7 +49909,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2582) (i32.const 0) ) @@ -49929,7 +49929,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2583) (i32.const 0) ) @@ -49951,7 +49951,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2584) (i32.const 0) ) @@ -49971,7 +49971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2585) (i32.const 0) ) @@ -49991,7 +49991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2586) (i32.const 0) ) @@ -50011,7 +50011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2587) (i32.const 0) ) @@ -50033,7 +50033,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2588) (i32.const 0) ) @@ -50053,7 +50053,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2589) (i32.const 0) ) @@ -50073,7 +50073,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2590) (i32.const 0) ) @@ -50093,7 +50093,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2591) (i32.const 0) ) @@ -50113,7 +50113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2592) (i32.const 0) ) @@ -50135,7 +50135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2593) (i32.const 0) ) @@ -50157,7 +50157,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2594) (i32.const 0) ) @@ -50179,7 +50179,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2595) (i32.const 0) ) @@ -50199,7 +50199,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2596) (i32.const 0) ) @@ -50219,7 +50219,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2597) (i32.const 0) ) @@ -50239,7 +50239,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2598) (i32.const 0) ) @@ -50259,7 +50259,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2599) (i32.const 0) ) @@ -50279,7 +50279,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2600) (i32.const 0) ) @@ -50299,7 +50299,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2601) (i32.const 0) ) @@ -50321,7 +50321,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2602) (i32.const 0) ) @@ -50343,7 +50343,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2603) (i32.const 0) ) @@ -50365,7 +50365,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2604) (i32.const 0) ) @@ -50387,7 +50387,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2605) (i32.const 0) ) @@ -50411,7 +50411,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2606) (i32.const 0) ) @@ -50431,7 +50431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2607) (i32.const 0) ) @@ -50451,7 +50451,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2608) (i32.const 0) ) @@ -50471,7 +50471,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2609) (i32.const 0) ) @@ -50491,7 +50491,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2610) (i32.const 0) ) @@ -50511,7 +50511,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2611) (i32.const 0) ) @@ -50531,7 +50531,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2620) (i32.const 0) ) @@ -50551,7 +50551,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2621) (i32.const 0) ) @@ -50571,7 +50571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2622) (i32.const 0) ) @@ -50591,7 +50591,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2623) (i32.const 0) ) @@ -50611,7 +50611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2624) (i32.const 0) ) @@ -50631,7 +50631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2625) (i32.const 0) ) @@ -50651,7 +50651,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2626) (i32.const 0) ) @@ -50671,7 +50671,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2627) (i32.const 0) ) @@ -50691,7 +50691,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2628) (i32.const 0) ) @@ -50711,7 +50711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2629) (i32.const 0) ) @@ -50731,7 +50731,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2632) (i32.const 0) ) @@ -50751,7 +50751,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2633) (i32.const 0) ) @@ -50771,7 +50771,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2634) (i32.const 0) ) @@ -50791,7 +50791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2635) (i32.const 0) ) @@ -50811,7 +50811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2636) (i32.const 0) ) @@ -50831,7 +50831,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2637) (i32.const 0) ) @@ -50851,7 +50851,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2638) (i32.const 0) ) @@ -50871,7 +50871,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2639) (i32.const 0) ) @@ -50891,7 +50891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2640) (i32.const 0) ) @@ -50911,7 +50911,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2641) (i32.const 0) ) @@ -50931,7 +50931,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2642) (i32.const 0) ) @@ -50953,7 +50953,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2643) (i32.const 0) ) @@ -50973,7 +50973,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2644) (i32.const 0) ) @@ -50993,7 +50993,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2645) (i32.const 0) ) @@ -51013,7 +51013,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2646) (i32.const 0) ) @@ -51033,7 +51033,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2647) (i32.const 0) ) @@ -51053,7 +51053,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2648) (i32.const 0) ) @@ -51073,7 +51073,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2649) (i32.const 0) ) @@ -51093,7 +51093,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2650) (i32.const 0) ) @@ -51113,7 +51113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2651) (i32.const 0) ) @@ -51133,7 +51133,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2652) (i32.const 0) ) @@ -51153,7 +51153,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2653) (i32.const 0) ) @@ -51173,7 +51173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2654) (i32.const 0) ) @@ -51193,7 +51193,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2655) (i32.const 0) ) @@ -51215,7 +51215,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2656) (i32.const 0) ) @@ -51235,7 +51235,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2657) (i32.const 0) ) @@ -51255,7 +51255,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2658) (i32.const 0) ) @@ -51275,7 +51275,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2659) (i32.const 0) ) @@ -51295,7 +51295,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2660) (i32.const 0) ) @@ -51317,7 +51317,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2661) (i32.const 0) ) @@ -51337,7 +51337,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2662) (i32.const 0) ) @@ -51357,7 +51357,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2663) (i32.const 0) ) @@ -51377,7 +51377,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2664) (i32.const 0) ) @@ -51397,7 +51397,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2665) (i32.const 0) ) @@ -51419,7 +51419,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2666) (i32.const 0) ) @@ -51439,7 +51439,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2667) (i32.const 0) ) @@ -51459,7 +51459,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2668) (i32.const 0) ) @@ -51479,7 +51479,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2669) (i32.const 0) ) @@ -51499,7 +51499,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2670) (i32.const 0) ) @@ -51521,7 +51521,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2671) (i32.const 0) ) @@ -51541,7 +51541,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2672) (i32.const 0) ) @@ -51561,7 +51561,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2673) (i32.const 0) ) @@ -51581,7 +51581,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2674) (i32.const 0) ) @@ -51603,7 +51603,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2675) (i32.const 0) ) @@ -51623,7 +51623,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2676) (i32.const 0) ) @@ -51643,7 +51643,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2677) (i32.const 0) ) @@ -51663,7 +51663,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2678) (i32.const 0) ) @@ -51683,7 +51683,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2679) (i32.const 0) ) @@ -51705,7 +51705,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2680) (i32.const 0) ) @@ -51727,7 +51727,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2681) (i32.const 0) ) @@ -51749,7 +51749,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2682) (i32.const 0) ) @@ -51769,7 +51769,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2683) (i32.const 0) ) @@ -51789,7 +51789,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2684) (i32.const 0) ) @@ -51809,7 +51809,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2685) (i32.const 0) ) @@ -51829,7 +51829,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2686) (i32.const 0) ) @@ -51849,7 +51849,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2687) (i32.const 0) ) @@ -51869,7 +51869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2688) (i32.const 0) ) @@ -51891,7 +51891,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2689) (i32.const 0) ) @@ -51913,7 +51913,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2690) (i32.const 0) ) @@ -51935,7 +51935,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2691) (i32.const 0) ) @@ -51957,7 +51957,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2692) (i32.const 0) ) @@ -51981,7 +51981,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2693) (i32.const 0) ) @@ -52001,7 +52001,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2694) (i32.const 0) ) @@ -52021,7 +52021,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2695) (i32.const 0) ) @@ -52041,7 +52041,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2696) (i32.const 0) ) @@ -52061,7 +52061,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2697) (i32.const 0) ) @@ -52081,7 +52081,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2698) (i32.const 0) ) @@ -52100,7 +52100,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2763) (i32.const 0) ) @@ -52119,7 +52119,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2764) (i32.const 0) ) @@ -52138,7 +52138,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2765) (i32.const 0) ) @@ -52157,7 +52157,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2766) (i32.const 0) ) @@ -52176,7 +52176,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2767) (i32.const 0) ) @@ -52195,7 +52195,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2768) (i32.const 0) ) @@ -52214,7 +52214,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2769) (i32.const 0) ) @@ -52233,7 +52233,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2770) (i32.const 0) ) @@ -52252,7 +52252,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2771) (i32.const 0) ) @@ -52271,7 +52271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2772) (i32.const 0) ) @@ -52290,7 +52290,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2775) (i32.const 0) ) @@ -52309,7 +52309,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2776) (i32.const 0) ) @@ -52328,7 +52328,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2777) (i32.const 0) ) @@ -52351,7 +52351,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2778) (i32.const 0) ) @@ -52370,7 +52370,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2779) (i32.const 0) ) @@ -52389,7 +52389,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2788) (i32.const 0) ) @@ -52408,7 +52408,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2789) (i32.const 0) ) @@ -52427,7 +52427,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2790) (i32.const 0) ) @@ -52446,7 +52446,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2791) (i32.const 0) ) @@ -52465,7 +52465,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2792) (i32.const 0) ) @@ -52484,7 +52484,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2793) (i32.const 0) ) @@ -52503,7 +52503,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2794) (i32.const 0) ) @@ -52522,7 +52522,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2795) (i32.const 0) ) @@ -52541,7 +52541,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2796) (i32.const 0) ) @@ -52560,7 +52560,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2797) (i32.const 0) ) @@ -52579,7 +52579,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2800) (i32.const 0) ) @@ -52598,7 +52598,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2801) (i32.const 0) ) @@ -52617,7 +52617,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2802) (i32.const 0) ) @@ -52640,7 +52640,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2803) (i32.const 0) ) @@ -52659,7 +52659,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2804) (i32.const 0) ) @@ -52678,7 +52678,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2816) (i32.const 0) ) @@ -52697,7 +52697,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2817) (i32.const 0) ) @@ -52716,7 +52716,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2818) (i32.const 0) ) @@ -52735,7 +52735,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2819) (i32.const 0) ) @@ -52754,7 +52754,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2820) (i32.const 0) ) @@ -52773,7 +52773,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2821) (i32.const 0) ) @@ -52792,7 +52792,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2822) (i32.const 0) ) @@ -52811,7 +52811,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2823) (i32.const 0) ) @@ -52830,7 +52830,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2824) (i32.const 0) ) @@ -52849,7 +52849,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2825) (i32.const 0) ) @@ -52868,7 +52868,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2828) (i32.const 0) ) @@ -52887,7 +52887,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2829) (i32.const 0) ) @@ -52908,7 +52908,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2830) (i32.const 0) ) @@ -52927,7 +52927,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2831) (i32.const 0) ) @@ -52946,7 +52946,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2832) (i32.const 0) ) @@ -52965,7 +52965,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2833) (i32.const 0) ) @@ -52984,7 +52984,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2834) (i32.const 0) ) @@ -53003,7 +53003,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2835) (i32.const 0) ) @@ -53022,7 +53022,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2836) (i32.const 0) ) @@ -53041,7 +53041,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2837) (i32.const 0) ) @@ -53060,7 +53060,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2838) (i32.const 0) ) @@ -53079,7 +53079,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2839) (i32.const 0) ) @@ -53098,7 +53098,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2840) (i32.const 0) ) @@ -53117,7 +53117,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2841) (i32.const 0) ) @@ -53136,7 +53136,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2842) (i32.const 0) ) @@ -53155,7 +53155,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2843) (i32.const 0) ) @@ -53174,7 +53174,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2844) (i32.const 0) ) @@ -53193,7 +53193,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2845) (i32.const 0) ) @@ -53212,7 +53212,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2846) (i32.const 0) ) @@ -53231,7 +53231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2847) (i32.const 0) ) @@ -53250,7 +53250,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2848) (i32.const 0) ) @@ -53269,7 +53269,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2849) (i32.const 0) ) @@ -53288,7 +53288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2850) (i32.const 0) ) @@ -53307,7 +53307,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2851) (i32.const 0) ) @@ -53326,7 +53326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2852) (i32.const 0) ) @@ -53345,7 +53345,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2853) (i32.const 0) ) @@ -53364,7 +53364,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2854) (i32.const 0) ) @@ -53383,7 +53383,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2855) (i32.const 0) ) @@ -53402,7 +53402,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2856) (i32.const 0) ) @@ -53421,7 +53421,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2857) (i32.const 0) ) @@ -53440,7 +53440,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2858) (i32.const 0) ) @@ -53459,7 +53459,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2859) (i32.const 0) ) @@ -53478,7 +53478,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2860) (i32.const 0) ) @@ -53497,7 +53497,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2861) (i32.const 0) ) @@ -53516,7 +53516,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2862) (i32.const 0) ) @@ -53535,7 +53535,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2863) (i32.const 0) ) @@ -53554,7 +53554,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2864) (i32.const 0) ) @@ -53573,7 +53573,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2865) (i32.const 0) ) @@ -53592,7 +53592,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2866) (i32.const 0) ) @@ -53611,7 +53611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2867) (i32.const 0) ) @@ -53630,7 +53630,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2868) (i32.const 0) ) @@ -53649,7 +53649,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2869) (i32.const 0) ) @@ -53668,7 +53668,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2870) (i32.const 0) ) @@ -53687,7 +53687,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2871) (i32.const 0) ) @@ -53706,7 +53706,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2872) (i32.const 0) ) @@ -53725,7 +53725,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2873) (i32.const 0) ) @@ -53744,7 +53744,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2874) (i32.const 0) ) @@ -53763,7 +53763,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2875) (i32.const 0) ) @@ -53782,7 +53782,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2876) (i32.const 0) ) @@ -53801,7 +53801,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2877) (i32.const 0) ) @@ -53820,7 +53820,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2878) (i32.const 0) ) @@ -53839,7 +53839,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2879) (i32.const 0) ) @@ -53858,7 +53858,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2880) (i32.const 0) ) @@ -53877,7 +53877,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2881) (i32.const 0) ) @@ -53896,7 +53896,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2882) (i32.const 0) ) @@ -53915,7 +53915,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2883) (i32.const 0) ) @@ -53934,7 +53934,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2884) (i32.const 0) ) @@ -53953,7 +53953,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2885) (i32.const 0) ) @@ -53972,7 +53972,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2886) (i32.const 0) ) @@ -53991,7 +53991,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2887) (i32.const 0) ) @@ -54010,7 +54010,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2888) (i32.const 0) ) @@ -54029,7 +54029,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2889) (i32.const 0) ) @@ -54048,7 +54048,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2890) (i32.const 0) ) @@ -54067,7 +54067,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2891) (i32.const 0) ) @@ -54086,7 +54086,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2892) (i32.const 0) ) @@ -54105,7 +54105,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2893) (i32.const 0) ) @@ -54124,7 +54124,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2894) (i32.const 0) ) @@ -54143,7 +54143,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2895) (i32.const 0) ) @@ -54162,7 +54162,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2896) (i32.const 0) ) @@ -54181,7 +54181,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2897) (i32.const 0) ) @@ -54200,7 +54200,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2898) (i32.const 0) ) @@ -54219,7 +54219,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2899) (i32.const 0) ) @@ -54238,7 +54238,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2900) (i32.const 0) ) @@ -54257,7 +54257,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2901) (i32.const 0) ) @@ -54276,7 +54276,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2910) (i32.const 0) ) @@ -54295,7 +54295,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2911) (i32.const 0) ) @@ -54314,7 +54314,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2912) (i32.const 0) ) @@ -54333,7 +54333,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2913) (i32.const 0) ) @@ -54352,7 +54352,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2914) (i32.const 0) ) @@ -54371,7 +54371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2915) (i32.const 0) ) @@ -54390,7 +54390,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2916) (i32.const 0) ) @@ -54409,7 +54409,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2917) (i32.const 0) ) @@ -54428,7 +54428,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2918) (i32.const 0) ) @@ -54447,7 +54447,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2919) (i32.const 0) ) @@ -54466,7 +54466,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2922) (i32.const 0) ) @@ -54485,7 +54485,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2923) (i32.const 0) ) @@ -54506,7 +54506,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2924) (i32.const 0) ) @@ -54525,7 +54525,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2925) (i32.const 0) ) @@ -54544,7 +54544,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2926) (i32.const 0) ) @@ -54563,7 +54563,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2927) (i32.const 0) ) @@ -54582,7 +54582,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2928) (i32.const 0) ) @@ -54601,7 +54601,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2929) (i32.const 0) ) @@ -54620,7 +54620,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2930) (i32.const 0) ) @@ -54639,7 +54639,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2931) (i32.const 0) ) @@ -54658,7 +54658,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2932) (i32.const 0) ) @@ -54677,7 +54677,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2933) (i32.const 0) ) @@ -54696,7 +54696,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2934) (i32.const 0) ) @@ -54715,7 +54715,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2935) (i32.const 0) ) @@ -54734,7 +54734,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2936) (i32.const 0) ) @@ -54753,7 +54753,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2937) (i32.const 0) ) @@ -54772,7 +54772,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2938) (i32.const 0) ) @@ -54791,7 +54791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2939) (i32.const 0) ) @@ -54810,7 +54810,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2940) (i32.const 0) ) @@ -54829,7 +54829,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2941) (i32.const 0) ) @@ -54848,7 +54848,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2942) (i32.const 0) ) @@ -54867,7 +54867,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2943) (i32.const 0) ) @@ -54886,7 +54886,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3008) (i32.const 0) ) @@ -54905,7 +54905,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3009) (i32.const 0) ) @@ -54924,7 +54924,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3010) (i32.const 0) ) @@ -54943,7 +54943,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3011) (i32.const 0) ) @@ -54962,7 +54962,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3012) (i32.const 0) ) @@ -54981,7 +54981,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3013) (i32.const 0) ) @@ -55000,7 +55000,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3014) (i32.const 0) ) @@ -55019,7 +55019,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3015) (i32.const 0) ) @@ -55038,7 +55038,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3016) (i32.const 0) ) @@ -55057,7 +55057,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3017) (i32.const 0) ) @@ -55076,7 +55076,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3020) (i32.const 0) ) @@ -55095,7 +55095,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3021) (i32.const 0) ) @@ -55114,7 +55114,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3022) (i32.const 0) ) @@ -55135,7 +55135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3023) (i32.const 0) ) @@ -55154,7 +55154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3024) (i32.const 0) ) @@ -55173,7 +55173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3033) (i32.const 0) ) @@ -55192,7 +55192,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3034) (i32.const 0) ) @@ -55211,7 +55211,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3035) (i32.const 0) ) @@ -55230,7 +55230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3036) (i32.const 0) ) @@ -55249,7 +55249,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3037) (i32.const 0) ) @@ -55268,7 +55268,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3038) (i32.const 0) ) @@ -55287,7 +55287,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3039) (i32.const 0) ) @@ -55306,7 +55306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3040) (i32.const 0) ) @@ -55325,7 +55325,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3041) (i32.const 0) ) @@ -55344,7 +55344,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3042) (i32.const 0) ) @@ -55363,7 +55363,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3045) (i32.const 0) ) @@ -55382,7 +55382,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3046) (i32.const 0) ) @@ -55401,7 +55401,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3047) (i32.const 0) ) @@ -55422,7 +55422,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3048) (i32.const 0) ) @@ -55441,7 +55441,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3049) (i32.const 0) ) @@ -55460,7 +55460,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3061) (i32.const 0) ) @@ -55479,7 +55479,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3062) (i32.const 0) ) @@ -55498,7 +55498,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3063) (i32.const 0) ) @@ -55517,7 +55517,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3064) (i32.const 0) ) @@ -55536,7 +55536,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3065) (i32.const 0) ) @@ -55555,7 +55555,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3066) (i32.const 0) ) @@ -55574,7 +55574,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3067) (i32.const 0) ) @@ -55593,7 +55593,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3068) (i32.const 0) ) @@ -55612,7 +55612,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3069) (i32.const 0) ) @@ -55631,7 +55631,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3070) (i32.const 0) ) @@ -55650,7 +55650,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3073) (i32.const 0) ) @@ -55669,7 +55669,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3074) (i32.const 0) ) @@ -55692,7 +55692,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3075) (i32.const 0) ) @@ -55711,7 +55711,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3076) (i32.const 0) ) @@ -55730,7 +55730,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3077) (i32.const 0) ) @@ -55749,7 +55749,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3078) (i32.const 0) ) @@ -55768,7 +55768,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3079) (i32.const 0) ) @@ -55787,7 +55787,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3080) (i32.const 0) ) @@ -55806,7 +55806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3081) (i32.const 0) ) @@ -55825,7 +55825,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3082) (i32.const 0) ) @@ -55844,7 +55844,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3083) (i32.const 0) ) @@ -55863,7 +55863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3084) (i32.const 0) ) @@ -55882,7 +55882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3085) (i32.const 0) ) @@ -55901,7 +55901,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3086) (i32.const 0) ) @@ -55920,7 +55920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3087) (i32.const 0) ) @@ -55939,7 +55939,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3096) (i32.const 0) ) @@ -55958,7 +55958,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3097) (i32.const 0) ) @@ -55977,7 +55977,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3098) (i32.const 0) ) @@ -55996,7 +55996,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3099) (i32.const 0) ) @@ -56015,7 +56015,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3100) (i32.const 0) ) @@ -56034,7 +56034,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3101) (i32.const 0) ) @@ -56053,7 +56053,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3102) (i32.const 0) ) @@ -56072,7 +56072,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3103) (i32.const 0) ) @@ -56091,7 +56091,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3104) (i32.const 0) ) @@ -56110,7 +56110,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3105) (i32.const 0) ) @@ -56129,7 +56129,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3108) (i32.const 0) ) @@ -56148,7 +56148,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3109) (i32.const 0) ) @@ -56171,7 +56171,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3110) (i32.const 0) ) @@ -56190,7 +56190,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3111) (i32.const 0) ) @@ -56209,7 +56209,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3112) (i32.const 0) ) @@ -56228,7 +56228,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3113) (i32.const 0) ) @@ -56247,7 +56247,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3114) (i32.const 0) ) @@ -56266,7 +56266,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3115) (i32.const 0) ) @@ -56285,7 +56285,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3116) (i32.const 0) ) @@ -56304,7 +56304,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3117) (i32.const 0) ) @@ -56323,7 +56323,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3118) (i32.const 0) ) @@ -56342,7 +56342,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3119) (i32.const 0) ) @@ -56361,7 +56361,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3120) (i32.const 0) ) @@ -56380,7 +56380,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3121) (i32.const 0) ) @@ -56399,7 +56399,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3122) (i32.const 0) ) diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index 95b275c2..f05d44dd 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -12,7 +12,7 @@ (import "JSOp" "mod" (func $std/mod/JSOp.mod (param f64 f64) (result f64))) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 4) "\n\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s") + (data (i32.const 8) "\n\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $isNaN (; 2 ;) (type $Fi) (param $0 f64) (result i32) @@ -848,7 +848,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 21) (i32.const 0) ) @@ -866,7 +866,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 0) ) @@ -884,7 +884,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -902,7 +902,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 0) ) @@ -920,7 +920,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 0) ) @@ -938,7 +938,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 26) (i32.const 0) ) @@ -956,7 +956,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 0) ) @@ -974,7 +974,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 0) ) @@ -992,7 +992,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 0) ) @@ -1010,7 +1010,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 30) (i32.const 0) ) @@ -1028,7 +1028,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) @@ -1046,7 +1046,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 32) (i32.const 0) ) @@ -1064,7 +1064,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 33) (i32.const 0) ) @@ -1082,7 +1082,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 34) (i32.const 0) ) @@ -1100,7 +1100,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 35) (i32.const 0) ) @@ -1118,7 +1118,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 36) (i32.const 0) ) @@ -1136,7 +1136,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 37) (i32.const 0) ) @@ -1154,7 +1154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 38) (i32.const 0) ) @@ -1172,7 +1172,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 39) (i32.const 0) ) @@ -1190,7 +1190,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 40) (i32.const 0) ) @@ -1208,7 +1208,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 41) (i32.const 0) ) @@ -1226,7 +1226,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 42) (i32.const 0) ) @@ -1244,7 +1244,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 43) (i32.const 0) ) @@ -1262,7 +1262,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 44) (i32.const 0) ) @@ -1280,7 +1280,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 0) ) @@ -1298,7 +1298,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 46) (i32.const 0) ) @@ -1316,7 +1316,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 47) (i32.const 0) ) @@ -1334,7 +1334,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 48) (i32.const 0) ) @@ -1352,7 +1352,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 49) (i32.const 0) ) @@ -1370,7 +1370,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 52) (i32.const 0) ) @@ -1388,7 +1388,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 53) (i32.const 0) ) @@ -1406,7 +1406,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 54) (i32.const 0) ) @@ -1424,7 +1424,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 55) (i32.const 0) ) @@ -1442,7 +1442,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 56) (i32.const 0) ) @@ -1460,7 +1460,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 57) (i32.const 0) ) @@ -1478,7 +1478,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 58) (i32.const 0) ) @@ -1496,7 +1496,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 59) (i32.const 0) ) @@ -1514,7 +1514,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 0) ) @@ -1532,7 +1532,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 61) (i32.const 0) ) @@ -1550,7 +1550,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 62) (i32.const 0) ) @@ -1568,7 +1568,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 0) ) @@ -1586,7 +1586,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 64) (i32.const 0) ) @@ -1604,7 +1604,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 0) ) @@ -1622,7 +1622,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 66) (i32.const 0) ) @@ -1640,7 +1640,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 67) (i32.const 0) ) @@ -1658,7 +1658,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 68) (i32.const 0) ) @@ -1676,7 +1676,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 69) (i32.const 0) ) @@ -1694,7 +1694,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 70) (i32.const 0) ) @@ -1712,7 +1712,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 71) (i32.const 0) ) @@ -1730,7 +1730,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 72) (i32.const 0) ) @@ -1748,7 +1748,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 73) (i32.const 0) ) @@ -1766,7 +1766,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 74) (i32.const 0) ) @@ -1784,7 +1784,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 75) (i32.const 0) ) @@ -1802,7 +1802,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 76) (i32.const 0) ) @@ -1820,7 +1820,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 77) (i32.const 0) ) @@ -1838,7 +1838,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 78) (i32.const 0) ) @@ -1856,7 +1856,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 79) (i32.const 0) ) @@ -1874,7 +1874,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 0) ) @@ -1892,7 +1892,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 81) (i32.const 0) ) @@ -1910,7 +1910,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 82) (i32.const 0) ) @@ -1928,7 +1928,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 83) (i32.const 0) ) @@ -1946,7 +1946,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 84) (i32.const 0) ) @@ -1964,7 +1964,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 85) (i32.const 0) ) @@ -1982,7 +1982,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 0) ) @@ -2000,7 +2000,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 87) (i32.const 0) ) @@ -2018,7 +2018,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 88) (i32.const 0) ) @@ -2036,7 +2036,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 89) (i32.const 0) ) @@ -2054,7 +2054,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 90) (i32.const 0) ) @@ -2072,7 +2072,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 91) (i32.const 0) ) @@ -2090,7 +2090,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 92) (i32.const 0) ) @@ -2108,7 +2108,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 93) (i32.const 0) ) @@ -2126,7 +2126,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 94) (i32.const 0) ) @@ -2144,7 +2144,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 95) (i32.const 0) ) @@ -2162,7 +2162,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 96) (i32.const 0) ) @@ -2180,7 +2180,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 105) (i32.const 0) ) @@ -2198,7 +2198,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 106) (i32.const 0) ) @@ -2216,7 +2216,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 107) (i32.const 0) ) @@ -2234,7 +2234,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 108) (i32.const 0) ) @@ -2252,7 +2252,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 109) (i32.const 0) ) @@ -2270,7 +2270,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 110) (i32.const 0) ) @@ -2288,7 +2288,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 111) (i32.const 0) ) @@ -2306,7 +2306,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 112) (i32.const 0) ) @@ -2324,7 +2324,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 113) (i32.const 0) ) @@ -2342,7 +2342,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 114) (i32.const 0) ) @@ -2360,7 +2360,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 115) (i32.const 0) ) @@ -2378,7 +2378,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 116) (i32.const 0) ) @@ -2396,7 +2396,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 117) (i32.const 0) ) @@ -2414,7 +2414,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 118) (i32.const 0) ) @@ -2432,7 +2432,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 119) (i32.const 0) ) @@ -2450,7 +2450,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 120) (i32.const 0) ) @@ -2468,7 +2468,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 121) (i32.const 0) ) @@ -2486,7 +2486,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 122) (i32.const 0) ) @@ -2504,7 +2504,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 123) (i32.const 0) ) @@ -2522,7 +2522,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 124) (i32.const 0) ) @@ -2540,7 +2540,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 127) (i32.const 0) ) @@ -2558,7 +2558,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 128) (i32.const 0) ) @@ -2576,7 +2576,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 129) (i32.const 0) ) @@ -2594,7 +2594,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 130) (i32.const 0) ) @@ -2612,7 +2612,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 131) (i32.const 0) ) @@ -2630,7 +2630,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 132) (i32.const 0) ) @@ -2648,7 +2648,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 133) (i32.const 0) ) @@ -2666,7 +2666,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 134) (i32.const 0) ) @@ -2684,7 +2684,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 135) (i32.const 0) ) @@ -2702,7 +2702,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 136) (i32.const 0) ) @@ -2720,7 +2720,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 137) (i32.const 0) ) @@ -2738,7 +2738,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 138) (i32.const 0) ) @@ -2756,7 +2756,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 139) (i32.const 0) ) @@ -2774,7 +2774,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 140) (i32.const 0) ) @@ -2792,7 +2792,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 141) (i32.const 0) ) @@ -2810,7 +2810,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 142) (i32.const 0) ) @@ -2828,7 +2828,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 143) (i32.const 0) ) @@ -2846,7 +2846,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 144) (i32.const 0) ) @@ -2864,7 +2864,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 145) (i32.const 0) ) @@ -2882,7 +2882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 146) (i32.const 0) ) @@ -2900,7 +2900,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 147) (i32.const 0) ) @@ -2918,7 +2918,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 148) (i32.const 0) ) @@ -2936,7 +2936,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 149) (i32.const 0) ) @@ -2954,7 +2954,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 150) (i32.const 0) ) @@ -2972,7 +2972,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 151) (i32.const 0) ) @@ -2990,7 +2990,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 152) (i32.const 0) ) @@ -3008,7 +3008,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 153) (i32.const 0) ) @@ -3026,7 +3026,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 154) (i32.const 0) ) @@ -3044,7 +3044,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 155) (i32.const 0) ) @@ -3062,7 +3062,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 156) (i32.const 0) ) @@ -3080,7 +3080,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 157) (i32.const 0) ) @@ -3098,7 +3098,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 158) (i32.const 0) ) @@ -3116,7 +3116,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 159) (i32.const 0) ) @@ -3134,7 +3134,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 160) (i32.const 0) ) @@ -3152,7 +3152,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 161) (i32.const 0) ) @@ -3170,7 +3170,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 162) (i32.const 0) ) @@ -3188,7 +3188,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 163) (i32.const 0) ) @@ -3206,7 +3206,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 164) (i32.const 0) ) @@ -3224,7 +3224,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 165) (i32.const 0) ) @@ -3242,7 +3242,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 166) (i32.const 0) ) @@ -3260,7 +3260,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 167) (i32.const 0) ) diff --git a/tests/compiler/std/mod.untouched.wat b/tests/compiler/std/mod.untouched.wat index 5323150d..8e35f74f 100644 --- a/tests/compiler/std/mod.untouched.wat +++ b/tests/compiler/std/mod.untouched.wat @@ -14,9 +14,9 @@ (global $std/mod/js i32 (i32.const 1)) (global $NaN f64 (f64.const nan:0x8000000000000)) (global $Infinity f64 (f64.const inf)) - (global $HEAP_BASE i32 (i32.const 28)) + (global $HEAP_BASE i32 (i32.const 32)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s\00") + (data (i32.const 8) "\n\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $isNaN (; 2 ;) (type $Fi) (param $0 f64) (result i32) @@ -1035,7 +1035,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 21) (i32.const 0) ) @@ -1053,7 +1053,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 0) ) @@ -1071,7 +1071,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -1089,7 +1089,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 0) ) @@ -1107,7 +1107,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 0) ) @@ -1125,7 +1125,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 26) (i32.const 0) ) @@ -1143,7 +1143,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 0) ) @@ -1161,7 +1161,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 0) ) @@ -1179,7 +1179,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 0) ) @@ -1197,7 +1197,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 30) (i32.const 0) ) @@ -1215,7 +1215,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) @@ -1233,7 +1233,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 32) (i32.const 0) ) @@ -1251,7 +1251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 33) (i32.const 0) ) @@ -1269,7 +1269,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 34) (i32.const 0) ) @@ -1287,7 +1287,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 35) (i32.const 0) ) @@ -1305,7 +1305,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 36) (i32.const 0) ) @@ -1323,7 +1323,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 37) (i32.const 0) ) @@ -1341,7 +1341,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 38) (i32.const 0) ) @@ -1359,7 +1359,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 39) (i32.const 0) ) @@ -1377,7 +1377,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 40) (i32.const 0) ) @@ -1395,7 +1395,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 41) (i32.const 0) ) @@ -1413,7 +1413,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 42) (i32.const 0) ) @@ -1431,7 +1431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 43) (i32.const 0) ) @@ -1449,7 +1449,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 44) (i32.const 0) ) @@ -1467,7 +1467,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 0) ) @@ -1485,7 +1485,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 46) (i32.const 0) ) @@ -1503,7 +1503,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 47) (i32.const 0) ) @@ -1521,7 +1521,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 48) (i32.const 0) ) @@ -1539,7 +1539,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 49) (i32.const 0) ) @@ -1557,7 +1557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 52) (i32.const 0) ) @@ -1575,7 +1575,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 53) (i32.const 0) ) @@ -1593,7 +1593,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 54) (i32.const 0) ) @@ -1611,7 +1611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 55) (i32.const 0) ) @@ -1629,7 +1629,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 56) (i32.const 0) ) @@ -1647,7 +1647,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 57) (i32.const 0) ) @@ -1665,7 +1665,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 58) (i32.const 0) ) @@ -1683,7 +1683,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 59) (i32.const 0) ) @@ -1701,7 +1701,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 0) ) @@ -1719,7 +1719,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 61) (i32.const 0) ) @@ -1737,7 +1737,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 62) (i32.const 0) ) @@ -1755,7 +1755,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 0) ) @@ -1773,7 +1773,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 64) (i32.const 0) ) @@ -1791,7 +1791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 0) ) @@ -1809,7 +1809,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 66) (i32.const 0) ) @@ -1827,7 +1827,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 67) (i32.const 0) ) @@ -1845,7 +1845,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 68) (i32.const 0) ) @@ -1863,7 +1863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 69) (i32.const 0) ) @@ -1881,7 +1881,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 70) (i32.const 0) ) @@ -1899,7 +1899,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 71) (i32.const 0) ) @@ -1917,7 +1917,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 72) (i32.const 0) ) @@ -1935,7 +1935,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 73) (i32.const 0) ) @@ -1953,7 +1953,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 74) (i32.const 0) ) @@ -1973,7 +1973,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 75) (i32.const 0) ) @@ -1993,7 +1993,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 76) (i32.const 0) ) @@ -2011,7 +2011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 77) (i32.const 0) ) @@ -2029,7 +2029,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 78) (i32.const 0) ) @@ -2049,7 +2049,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 79) (i32.const 0) ) @@ -2069,7 +2069,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 0) ) @@ -2087,7 +2087,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 81) (i32.const 0) ) @@ -2105,7 +2105,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 82) (i32.const 0) ) @@ -2125,7 +2125,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 83) (i32.const 0) ) @@ -2145,7 +2145,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 84) (i32.const 0) ) @@ -2163,7 +2163,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 85) (i32.const 0) ) @@ -2181,7 +2181,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 86) (i32.const 0) ) @@ -2201,7 +2201,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 87) (i32.const 0) ) @@ -2221,7 +2221,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 88) (i32.const 0) ) @@ -2239,7 +2239,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 89) (i32.const 0) ) @@ -2259,7 +2259,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 90) (i32.const 0) ) @@ -2279,7 +2279,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 91) (i32.const 0) ) @@ -2301,7 +2301,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 92) (i32.const 0) ) @@ -2319,7 +2319,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 93) (i32.const 0) ) @@ -2339,7 +2339,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 94) (i32.const 0) ) @@ -2357,7 +2357,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 95) (i32.const 0) ) @@ -2377,7 +2377,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 96) (i32.const 0) ) @@ -2395,7 +2395,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 105) (i32.const 0) ) @@ -2413,7 +2413,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 106) (i32.const 0) ) @@ -2431,7 +2431,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 107) (i32.const 0) ) @@ -2449,7 +2449,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 108) (i32.const 0) ) @@ -2467,7 +2467,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 109) (i32.const 0) ) @@ -2485,7 +2485,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 110) (i32.const 0) ) @@ -2503,7 +2503,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 111) (i32.const 0) ) @@ -2521,7 +2521,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 112) (i32.const 0) ) @@ -2539,7 +2539,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 113) (i32.const 0) ) @@ -2557,7 +2557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 114) (i32.const 0) ) @@ -2575,7 +2575,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 115) (i32.const 0) ) @@ -2593,7 +2593,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 116) (i32.const 0) ) @@ -2611,7 +2611,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 117) (i32.const 0) ) @@ -2629,7 +2629,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 118) (i32.const 0) ) @@ -2647,7 +2647,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 119) (i32.const 0) ) @@ -2665,7 +2665,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 120) (i32.const 0) ) @@ -2683,7 +2683,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 121) (i32.const 0) ) @@ -2701,7 +2701,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 122) (i32.const 0) ) @@ -2719,7 +2719,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 123) (i32.const 0) ) @@ -2737,7 +2737,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 124) (i32.const 0) ) @@ -2755,7 +2755,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 127) (i32.const 0) ) @@ -2773,7 +2773,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 128) (i32.const 0) ) @@ -2791,7 +2791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 129) (i32.const 0) ) @@ -2809,7 +2809,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 130) (i32.const 0) ) @@ -2827,7 +2827,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 131) (i32.const 0) ) @@ -2845,7 +2845,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 132) (i32.const 0) ) @@ -2863,7 +2863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 133) (i32.const 0) ) @@ -2881,7 +2881,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 134) (i32.const 0) ) @@ -2899,7 +2899,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 135) (i32.const 0) ) @@ -2917,7 +2917,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 136) (i32.const 0) ) @@ -2935,7 +2935,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 137) (i32.const 0) ) @@ -2953,7 +2953,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 138) (i32.const 0) ) @@ -2971,7 +2971,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 139) (i32.const 0) ) @@ -2989,7 +2989,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 140) (i32.const 0) ) @@ -3007,7 +3007,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 141) (i32.const 0) ) @@ -3025,7 +3025,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 142) (i32.const 0) ) @@ -3043,7 +3043,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 143) (i32.const 0) ) @@ -3061,7 +3061,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 144) (i32.const 0) ) @@ -3079,7 +3079,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 145) (i32.const 0) ) @@ -3099,7 +3099,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 146) (i32.const 0) ) @@ -3119,7 +3119,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 147) (i32.const 0) ) @@ -3137,7 +3137,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 148) (i32.const 0) ) @@ -3155,7 +3155,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 149) (i32.const 0) ) @@ -3175,7 +3175,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 150) (i32.const 0) ) @@ -3195,7 +3195,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 151) (i32.const 0) ) @@ -3213,7 +3213,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 152) (i32.const 0) ) @@ -3231,7 +3231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 153) (i32.const 0) ) @@ -3251,7 +3251,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 154) (i32.const 0) ) @@ -3271,7 +3271,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 155) (i32.const 0) ) @@ -3289,7 +3289,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 156) (i32.const 0) ) @@ -3307,7 +3307,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 157) (i32.const 0) ) @@ -3327,7 +3327,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 158) (i32.const 0) ) @@ -3347,7 +3347,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 159) (i32.const 0) ) @@ -3365,7 +3365,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 160) (i32.const 0) ) @@ -3385,7 +3385,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 161) (i32.const 0) ) @@ -3405,7 +3405,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 162) (i32.const 0) ) @@ -3427,7 +3427,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 163) (i32.const 0) ) @@ -3445,7 +3445,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 164) (i32.const 0) ) @@ -3465,7 +3465,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 165) (i32.const 0) ) @@ -3483,7 +3483,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 166) (i32.const 0) ) @@ -3503,7 +3503,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 167) (i32.const 0) ) diff --git a/tests/compiler/std/new.optimized.wat b/tests/compiler/std/new.optimized.wat index c2bafda1..a8aefe3f 100644 --- a/tests/compiler/std/new.optimized.wat +++ b/tests/compiler/std/new.optimized.wat @@ -5,7 +5,7 @@ (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/new/aClass (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) @@ -26,7 +26,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -41,7 +41,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -51,14 +51,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -70,7 +70,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -89,7 +89,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) diff --git a/tests/compiler/std/new.untouched.wat b/tests/compiler/std/new.untouched.wat index 274d36c5..18faece9 100644 --- a/tests/compiler/std/new.untouched.wat +++ b/tests/compiler/std/new.untouched.wat @@ -9,7 +9,7 @@ (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/new/aClass (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/std/operator-overloading.optimized.wat b/tests/compiler/std/operator-overloading.optimized.wat index df2212f2..b517ad4a 100644 --- a/tests/compiler/std/operator-overloading.optimized.wat +++ b/tests/compiler/std/operator-overloading.optimized.wat @@ -60,9 +60,9 @@ (global $std/operator-overloading/aii1 (mut i32) (i32.const 0)) (global $std/operator-overloading/aii2 (mut i32) (i32.const 0)) (global $std/operator-overloading/aii (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 64)) + (global $HEAP_BASE i32 (i32.const 68)) (memory $0 1) - (data (i32.const 4) "\1b\00\00\00s\00t\00d\00/\00o\00p\00e\00r\00a\00t\00o\00r\00-\00o\00v\00e\00r\00l\00o\00a\00d\00i\00n\00g\00.\00t\00s") + (data (i32.const 8) "\1b\00\00\00s\00t\00d\00/\00o\00p\00e\00r\00a\00t\00o\00r\00-\00o\00v\00e\00r\00l\00o\00a\00d\00i\00n\00g\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -82,7 +82,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -97,7 +97,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -107,14 +107,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -126,7 +126,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -145,7 +145,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) @@ -2074,7 +2074,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 87) (i32.const 0) ) @@ -2123,7 +2123,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 93) (i32.const 0) ) @@ -2173,7 +2173,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 99) (i32.const 0) ) @@ -2223,7 +2223,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 105) (i32.const 0) ) @@ -2272,7 +2272,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 111) (i32.const 0) ) @@ -2322,7 +2322,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 117) (i32.const 0) ) @@ -2372,7 +2372,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 123) (i32.const 0) ) @@ -2422,7 +2422,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 129) (i32.const 0) ) @@ -2472,7 +2472,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 135) (i32.const 0) ) @@ -2507,7 +2507,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 141) (i32.const 0) ) @@ -2539,7 +2539,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 147) (i32.const 0) ) @@ -2557,7 +2557,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 151) (i32.const 0) ) @@ -2578,7 +2578,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 155) (i32.const 0) ) @@ -2613,7 +2613,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 161) (i32.const 0) ) @@ -2648,7 +2648,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 167) (i32.const 0) ) @@ -2683,7 +2683,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 173) (i32.const 0) ) @@ -2718,7 +2718,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 179) (i32.const 0) ) @@ -2787,7 +2787,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 193) (i32.const 0) ) @@ -2856,7 +2856,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 207) (i32.const 0) ) diff --git a/tests/compiler/std/operator-overloading.untouched.wat b/tests/compiler/std/operator-overloading.untouched.wat index 6080c6d1..543a40f5 100644 --- a/tests/compiler/std/operator-overloading.untouched.wat +++ b/tests/compiler/std/operator-overloading.untouched.wat @@ -65,9 +65,9 @@ (global $std/operator-overloading/aii1 (mut i32) (i32.const 0)) (global $std/operator-overloading/aii2 (mut i32) (i32.const 0)) (global $std/operator-overloading/aii (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 64)) + (global $HEAP_BASE i32 (i32.const 68)) (memory $0 1) - (data (i32.const 4) "\1b\00\00\00s\00t\00d\00/\00o\00p\00e\00r\00a\00t\00o\00r\00-\00o\00v\00e\00r\00l\00o\00a\00d\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 8) "\1b\00\00\00s\00t\00d\00/\00o\00p\00e\00r\00a\00t\00o\00r\00-\00o\00v\00e\00r\00l\00o\00a\00d\00i\00n\00g\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -2380,7 +2380,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 87) (i32.const 0) ) @@ -2430,7 +2430,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 93) (i32.const 0) ) @@ -2480,7 +2480,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 99) (i32.const 0) ) @@ -2530,7 +2530,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 105) (i32.const 0) ) @@ -2580,7 +2580,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 111) (i32.const 0) ) @@ -2630,7 +2630,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 117) (i32.const 0) ) @@ -2680,7 +2680,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 123) (i32.const 0) ) @@ -2730,7 +2730,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 129) (i32.const 0) ) @@ -2780,7 +2780,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 135) (i32.const 0) ) @@ -2817,7 +2817,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 141) (i32.const 0) ) @@ -2854,7 +2854,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 147) (i32.const 0) ) @@ -2877,7 +2877,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 151) (i32.const 0) ) @@ -2900,7 +2900,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 155) (i32.const 0) ) @@ -2937,7 +2937,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 161) (i32.const 0) ) @@ -2974,7 +2974,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 167) (i32.const 0) ) @@ -3011,7 +3011,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 173) (i32.const 0) ) @@ -3048,7 +3048,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 179) (i32.const 0) ) @@ -3123,7 +3123,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 193) (i32.const 0) ) @@ -3198,7 +3198,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 207) (i32.const 0) ) diff --git a/tests/compiler/std/polyfills.optimized.wat b/tests/compiler/std/polyfills.optimized.wat index 1e3df765..10c87df6 100644 --- a/tests/compiler/std/polyfills.optimized.wat +++ b/tests/compiler/std/polyfills.optimized.wat @@ -5,8 +5,8 @@ (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 4) "\11\00\00\00~\00l\00i\00b\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s") - (data (i32.const 44) "\10\00\00\00s\00t\00d\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s") + (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") (export "memory" (memory $0)) (start $start) (func $~lib/polyfills/bswap16 (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -24,7 +24,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 2) ) @@ -87,7 +87,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -113,7 +113,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 2) ) @@ -179,7 +179,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -205,7 +205,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -238,7 +238,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -291,7 +291,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 2) ) @@ -332,7 +332,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 2) ) @@ -378,7 +378,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 4) (i32.const 0) ) @@ -398,7 +398,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 5) (i32.const 0) ) @@ -415,7 +415,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 8) (i32.const 0) ) @@ -432,7 +432,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 9) (i32.const 0) ) @@ -449,7 +449,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 12) (i32.const 0) ) @@ -466,7 +466,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 13) (i32.const 0) ) @@ -483,7 +483,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 16) (i32.const 0) ) @@ -500,7 +500,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 17) (i32.const 0) ) @@ -520,7 +520,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 20) (i32.const 0) ) @@ -540,7 +540,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 21) (i32.const 0) ) @@ -557,7 +557,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 24) (i32.const 0) ) @@ -574,7 +574,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 25) (i32.const 0) ) diff --git a/tests/compiler/std/polyfills.untouched.wat b/tests/compiler/std/polyfills.untouched.wat index 3fd889b1..7281512d 100644 --- a/tests/compiler/std/polyfills.untouched.wat +++ b/tests/compiler/std/polyfills.untouched.wat @@ -4,10 +4,10 @@ (type $II (func (param i64) (result i64))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) - (global $HEAP_BASE i32 (i32.const 80)) + (global $HEAP_BASE i32 (i32.const 84)) (memory $0 1) - (data (i32.const 4) "\11\00\00\00~\00l\00i\00b\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s\00") - (data (i32.const 44) "\10\00\00\00s\00t\00d\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s\00") + (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") + (data (i32.const 48) "\10\00\00\00s\00t\00d\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $~lib/polyfills/bswap16 (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -40,7 +40,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 2) ) @@ -134,7 +134,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -177,7 +177,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 2) ) @@ -274,7 +274,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -326,7 +326,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -391,7 +391,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -459,7 +459,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -562,7 +562,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -662,7 +662,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -727,7 +727,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 2) ) @@ -783,7 +783,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 2) ) @@ -863,7 +863,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 27) (i32.const 2) ) @@ -929,7 +929,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 4) (i32.const 0) ) @@ -960,7 +960,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 5) (i32.const 0) ) @@ -979,7 +979,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 8) (i32.const 0) ) @@ -998,7 +998,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 9) (i32.const 0) ) @@ -1017,7 +1017,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 12) (i32.const 0) ) @@ -1036,7 +1036,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 13) (i32.const 0) ) @@ -1055,7 +1055,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 16) (i32.const 0) ) @@ -1074,7 +1074,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 17) (i32.const 0) ) @@ -1096,7 +1096,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 20) (i32.const 0) ) @@ -1127,7 +1127,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 21) (i32.const 0) ) @@ -1146,7 +1146,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 24) (i32.const 0) ) @@ -1165,7 +1165,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 25) (i32.const 0) ) diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index f79a43fa..abd8cbea 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -9,10 +9,10 @@ (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)) - (global $HEAP_BASE i32 (i32.const 56)) + (global $HEAP_BASE i32 (i32.const 60)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s") - (data (i32.const 28) "\0b\00\00\00~\00l\00i\00b\00/\00s\00e\00t\00.\00t\00s") + (data (i32.const 8) "\n\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s") + (data (i32.const 32) "\0b\00\00\00~\00l\00i\00b\00/\00s\00e\00t\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -32,7 +32,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -47,7 +47,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -57,14 +57,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -76,7 +76,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -95,7 +95,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) @@ -1985,7 +1985,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 33) (i32.const 4) ) @@ -2097,7 +2097,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 22) (i32.const 4) ) @@ -2157,7 +2157,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 51) (i32.const 4) ) @@ -2265,7 +2265,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 70) (i32.const 4) ) @@ -2302,7 +2302,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -2337,7 +2337,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) @@ -2354,7 +2354,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -2371,7 +2371,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 0) ) @@ -2388,7 +2388,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 17) (i32.const 0) ) @@ -2403,7 +2403,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 0) ) @@ -2426,7 +2426,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 0) ) @@ -2443,7 +2443,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -2458,7 +2458,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 0) ) @@ -2475,7 +2475,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 0) ) @@ -2492,7 +2492,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 0) ) @@ -2507,7 +2507,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 30) (i32.const 0) ) diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index a800bd7c..fb384006 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -13,10 +13,10 @@ (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)) - (global $HEAP_BASE i32 (i32.const 56)) + (global $HEAP_BASE i32 (i32.const 60)) (memory $0 1) - (data (i32.const 4) "\n\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00") - (data (i32.const 28) "\0b\00\00\00~\00l\00i\00b\00/\00s\00e\00t\00.\00t\00s\00") + (data (i32.const 8) "\n\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00") + (data (i32.const 32) "\0b\00\00\00~\00l\00i\00b\00/\00s\00e\00t\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -2272,7 +2272,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 33) (i32.const 4) ) @@ -2390,7 +2390,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 22) (i32.const 4) ) @@ -2462,7 +2462,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 51) (i32.const 4) ) @@ -2582,7 +2582,7 @@ (block (call $abort (i32.const 0) - (i32.const 28) + (i32.const 32) (i32.const 70) (i32.const 4) ) @@ -2633,7 +2633,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -2670,7 +2670,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 13) (i32.const 0) ) @@ -2687,7 +2687,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 15) (i32.const 0) ) @@ -2704,7 +2704,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 16) (i32.const 0) ) @@ -2721,7 +2721,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 17) (i32.const 0) ) @@ -2740,7 +2740,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 0) ) @@ -2765,7 +2765,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 0) ) @@ -2782,7 +2782,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 0) ) @@ -2801,7 +2801,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 0) ) @@ -2818,7 +2818,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 0) ) @@ -2840,7 +2840,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 0) ) @@ -2859,7 +2859,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 30) (i32.const 0) ) diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index 3ae1b5f0..907dcd58 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -426,7 +426,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -441,7 +441,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -451,14 +451,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -470,7 +470,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -489,7 +489,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 3bcc8bd3..7efaeebe 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -11,45 +11,45 @@ (import "env" "abort" (func $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 4)) + (global $std/string/str (mut i32) (i32.const 8)) (global $std/string/nullStr (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) (global $std/string/c (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 520)) + (global $HEAP_BASE i32 (i32.const 524)) (memory $0 1) - (data (i32.const 4) "\10\00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g") - (data (i32.const 40) "\0d\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 72) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 104) "\02\00\00\00h\00i") - (data (i32.const 112) "\04\00\00\00n\00u\00l\00l") - (data (i32.const 124) "\06\00\00\00s\00t\00r\00i\00n\00g") - (data (i32.const 140) "\03\00\00\00I\00\'\00m") - (data (i32.const 152) "\01\00\00\00,") - (data (i32.const 160) "\01\00\00\00x") - (data (i32.const 168) "\01\00\00\000") - (data (i32.const 176) "\01\00\00\001") - (data (i32.const 184) "\05\00\00\000\00b\001\000\001") - (data (i32.const 200) "\05\00\00\000\00o\007\000\007") - (data (i32.const 216) "\05\00\00\000\00x\00f\000\00f") - (data (i32.const 232) "\05\00\00\000\00x\00F\000\00F") - (data (i32.const 248) "\03\00\00\000\001\001") - (data (i32.const 260) "\04\00\00\000\00x\001\00g") - (data (i32.const 272) "\03\00\00\000\00.\001") - (data (i32.const 284) "\03\00\00\00.\002\005") - (data (i32.const 296) "\08\00\00\00.\001\00f\00o\00o\00b\00a\00r") - (data (i32.const 316) "\01\00\00\00a") - (data (i32.const 324) "\01\00\00\00b") - (data (i32.const 336) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 388) "\02\00\00\00a\00b") - (data (i32.const 396) "\02\00\00\00b\00a") - (data (i32.const 404) "\02\00\00\00a\00a") - (data (i32.const 412) "\03\00\00\00a\00b\00c") - (data (i32.const 424) "\03\00\00\001\002\003") - (data (i32.const 436) "\03\00\00\00a\00a\00a") - (data (i32.const 448) "\08\00\00\00a\00b\00a\00b\00a\00b\00a\00b") - (data (i32.const 468) "\05\00\00\00a\00a\00a\00a\00a") - (data (i32.const 484) "\06\00\00\00a\00a\00a\00a\00a\00a") - (data (i32.const 500) "\07\00\00\00a\00a\00a\00a\00a\00a\00a") + (data (i32.const 8) "\10\00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g") + (data (i32.const 44) "\0d\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") + (data (i32.const 76) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") + (data (i32.const 108) "\02\00\00\00h\00i") + (data (i32.const 116) "\04\00\00\00n\00u\00l\00l") + (data (i32.const 128) "\06\00\00\00s\00t\00r\00i\00n\00g") + (data (i32.const 144) "\03\00\00\00I\00\'\00m") + (data (i32.const 156) "\01\00\00\00,") + (data (i32.const 164) "\01\00\00\00x") + (data (i32.const 172) "\01\00\00\000") + (data (i32.const 180) "\01\00\00\001") + (data (i32.const 188) "\05\00\00\000\00b\001\000\001") + (data (i32.const 204) "\05\00\00\000\00o\007\000\007") + (data (i32.const 220) "\05\00\00\000\00x\00f\000\00f") + (data (i32.const 236) "\05\00\00\000\00x\00F\000\00F") + (data (i32.const 252) "\03\00\00\000\001\001") + (data (i32.const 264) "\04\00\00\000\00x\001\00g") + (data (i32.const 276) "\03\00\00\000\00.\001") + (data (i32.const 288) "\03\00\00\00.\002\005") + (data (i32.const 300) "\08\00\00\00.\001\00f\00o\00o\00b\00a\00r") + (data (i32.const 320) "\01\00\00\00a") + (data (i32.const 328) "\01\00\00\00b") + (data (i32.const 340) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") + (data (i32.const 392) "\02\00\00\00a\00b") + (data (i32.const 400) "\02\00\00\00b\00a") + (data (i32.const 408) "\02\00\00\00a\00a") + (data (i32.const 416) "\03\00\00\00a\00b\00c") + (data (i32.const 428) "\03\00\00\001\002\003") + (data (i32.const 440) "\03\00\00\00a\00a\00a") + (data (i32.const 452) "\08\00\00\00a\00b\00a\00b\00a\00b\00a\00b") + (data (i32.const 472) "\05\00\00\00a\00a\00a\00a\00a") + (data (i32.const 488) "\06\00\00\00a\00a\00a\00a\00a\00a") + (data (i32.const 504) "\07\00\00\00a\00a\00a\00a\00a\00a\00a") (export "getString" (func $std/string/getString)) (export "memory" (memory $0)) (start $start) @@ -61,7 +61,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 37) (i32.const 4) ) @@ -160,7 +160,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 231) (i32.const 4) ) @@ -172,7 +172,7 @@ (get_local $1) ) (set_local $1 - (i32.const 112) + (i32.const 116) ) ) (if @@ -247,7 +247,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 98) (i32.const 4) ) @@ -357,7 +357,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 210) (i32.const 4) ) @@ -369,7 +369,7 @@ (get_local $1) ) (set_local $1 - (i32.const 112) + (i32.const 116) ) ) (set_local $4 @@ -979,7 +979,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 466) (i32.const 10) ) @@ -1083,7 +1083,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -1098,7 +1098,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -1108,14 +1108,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -1127,7 +1127,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -1146,7 +1146,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) @@ -1176,7 +1176,7 @@ (block (call $abort (i32.const 0) - (i32.const 336) + (i32.const 340) (i32.const 20) (i32.const 2) ) @@ -3073,7 +3073,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 74) (i32.const 4) ) @@ -3085,7 +3085,7 @@ (get_local $1) ) (set_local $1 - (i32.const 112) + (i32.const 116) ) ) (if @@ -3106,7 +3106,7 @@ ) ) (return - (i32.const 332) + (i32.const 336) ) ) (call $~lib/memory/move_memory @@ -3155,7 +3155,7 @@ (get_local $0) ) (set_local $0 - (i32.const 112) + (i32.const 116) ) ) (call $~lib/string/String#concat @@ -3557,7 +3557,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 383) (i32.const 4) ) @@ -3589,7 +3589,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 388) (i32.const 6) ) @@ -3609,7 +3609,7 @@ ) ) (return - (i32.const 332) + (i32.const 336) ) ) (if @@ -3692,12 +3692,12 @@ (if (i32.ne (get_global $std/string/str) - (i32.const 4) + (i32.const 8) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 9) (i32.const 0) ) @@ -3714,7 +3714,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 11) (i32.const 0) ) @@ -3732,7 +3732,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 12) (i32.const 0) ) @@ -3743,14 +3743,14 @@ (i32.eqz (call $~lib/string/String#startsWith (get_global $std/string/str) - (i32.const 104) + (i32.const 108) (i32.const 0) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 13) (i32.const 0) ) @@ -3765,7 +3765,7 @@ (i32.eqz (call $~lib/string/String#endsWith|trampoline (get_global $std/string/str) - (i32.const 124) + (i32.const 128) (i32.const 0) ) ) @@ -3773,7 +3773,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 14) (i32.const 0) ) @@ -3784,14 +3784,14 @@ (i32.eqz (call $~lib/string/String#includes (get_global $std/string/str) - (i32.const 140) + (i32.const 144) (i32.const 0) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 15) (i32.const 0) ) @@ -3802,7 +3802,7 @@ (i32.ne (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 152) + (i32.const 156) (i32.const 0) ) (i32.const 2) @@ -3810,7 +3810,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 16) (i32.const 0) ) @@ -3821,7 +3821,7 @@ (i32.ne (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 160) + (i32.const 164) (i32.const 0) ) (i32.const -1) @@ -3829,7 +3829,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 17) (i32.const 0) ) @@ -3839,7 +3839,7 @@ (if (f64.ne (call $~lib/string/parseInt - (i32.const 168) + (i32.const 172) (i32.const 0) ) (f64.const 0) @@ -3847,7 +3847,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 23) (i32.const 0) ) @@ -3857,7 +3857,7 @@ (if (f64.ne (call $~lib/string/parseInt - (i32.const 176) + (i32.const 180) (i32.const 0) ) (f64.const 1) @@ -3865,7 +3865,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 24) (i32.const 0) ) @@ -3875,7 +3875,7 @@ (if (f64.ne (call $~lib/string/parseInt - (i32.const 184) + (i32.const 188) (i32.const 0) ) (f64.const 5) @@ -3883,7 +3883,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 25) (i32.const 0) ) @@ -3893,7 +3893,7 @@ (if (f64.ne (call $~lib/string/parseInt - (i32.const 200) + (i32.const 204) (i32.const 0) ) (f64.const 455) @@ -3901,7 +3901,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 26) (i32.const 0) ) @@ -3911,7 +3911,7 @@ (if (f64.ne (call $~lib/string/parseInt - (i32.const 216) + (i32.const 220) (i32.const 0) ) (f64.const 3855) @@ -3919,7 +3919,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 27) (i32.const 0) ) @@ -3929,7 +3929,7 @@ (if (f64.ne (call $~lib/string/parseInt - (i32.const 232) + (i32.const 236) (i32.const 0) ) (f64.const 3855) @@ -3937,7 +3937,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 28) (i32.const 0) ) @@ -3947,7 +3947,7 @@ (if (f64.ne (call $~lib/string/parseInt - (i32.const 248) + (i32.const 252) (i32.const 0) ) (f64.const 11) @@ -3955,7 +3955,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 29) (i32.const 0) ) @@ -3965,7 +3965,7 @@ (if (f64.ne (call $~lib/string/parseInt - (i32.const 260) + (i32.const 264) (i32.const 0) ) (f64.const 1) @@ -3973,7 +3973,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 30) (i32.const 0) ) @@ -3983,14 +3983,14 @@ (if (f64.ne (call $~lib/string/parseFloat - (i32.const 168) + (i32.const 172) ) (f64.const 0) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 32) (i32.const 0) ) @@ -4000,14 +4000,14 @@ (if (f64.ne (call $~lib/string/parseFloat - (i32.const 176) + (i32.const 180) ) (f64.const 1) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 33) (i32.const 0) ) @@ -4017,14 +4017,14 @@ (if (f64.ne (call $~lib/string/parseFloat - (i32.const 272) + (i32.const 276) ) (f64.const 0.1) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 34) (i32.const 0) ) @@ -4034,14 +4034,14 @@ (if (f64.ne (call $~lib/string/parseFloat - (i32.const 284) + (i32.const 288) ) (f64.const 0.25) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 35) (i32.const 0) ) @@ -4051,14 +4051,14 @@ (if (f64.ne (call $~lib/string/parseFloat - (i32.const 296) + (i32.const 300) ) (f64.const 0.1) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 36) (i32.const 0) ) @@ -4067,21 +4067,21 @@ ) (set_global $std/string/c (call $~lib/string/String.__concat - (i32.const 316) - (i32.const 324) + (i32.const 320) + (i32.const 328) ) ) (if (i32.eqz (call $~lib/string/String.__eq (get_global $std/string/c) - (i32.const 388) + (i32.const 392) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 39) (i32.const 0) ) @@ -4092,13 +4092,13 @@ (i32.eqz (call $~lib/string/String.__ne (get_global $std/string/c) - (i32.const 316) + (i32.const 320) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 40) (i32.const 0) ) @@ -4108,14 +4108,14 @@ (if (i32.eqz (call $~lib/string/String.__eq - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 41) (i32.const 0) ) @@ -4125,14 +4125,14 @@ (if (i32.eqz (call $~lib/string/String.__ne - (i32.const 332) + (i32.const 336) (get_global $std/string/nullStr) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 42) (i32.const 0) ) @@ -4142,14 +4142,14 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 324) - (i32.const 316) + (i32.const 328) + (i32.const 320) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 44) (i32.const 0) ) @@ -4159,14 +4159,14 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 396) - (i32.const 316) + (i32.const 400) + (i32.const 320) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 45) (i32.const 0) ) @@ -4176,14 +4176,14 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 396) - (i32.const 404) + (i32.const 400) + (i32.const 408) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 46) (i32.const 0) ) @@ -4193,14 +4193,14 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 396) - (i32.const 388) + (i32.const 400) + (i32.const 392) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 47) (i32.const 0) ) @@ -4209,13 +4209,13 @@ ) (if (call $~lib/string/String.__lt - (i32.const 396) - (i32.const 388) + (i32.const 400) + (i32.const 392) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 48) (i32.const 0) ) @@ -4224,13 +4224,13 @@ ) (if (call $~lib/string/String.__lt - (i32.const 324) + (i32.const 328) (get_global $std/string/nullStr) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 50) (i32.const 0) ) @@ -4240,12 +4240,12 @@ (if (call $~lib/string/String.__lt (get_global $std/string/nullStr) - (i32.const 324) + (i32.const 328) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 51) (i32.const 0) ) @@ -4255,14 +4255,14 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 412) - (i32.const 332) + (i32.const 416) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 53) (i32.const 0) ) @@ -4272,14 +4272,14 @@ (if (i32.eqz (call $~lib/string/String.__lt - (i32.const 332) - (i32.const 412) + (i32.const 336) + (i32.const 416) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 54) (i32.const 0) ) @@ -4289,14 +4289,14 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 412) - (i32.const 332) + (i32.const 416) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 55) (i32.const 0) ) @@ -4306,14 +4306,14 @@ (if (i32.eqz (call $~lib/string/String.__lte - (i32.const 332) - (i32.const 412) + (i32.const 336) + (i32.const 416) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 56) (i32.const 0) ) @@ -4322,13 +4322,13 @@ ) (if (call $~lib/string/String.__lt - (i32.const 412) - (i32.const 332) + (i32.const 416) + (i32.const 336) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 57) (i32.const 0) ) @@ -4337,13 +4337,13 @@ ) (if (call $~lib/string/String.__gt - (i32.const 332) - (i32.const 412) + (i32.const 336) + (i32.const 416) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 58) (i32.const 0) ) @@ -4352,13 +4352,13 @@ ) (if (call $~lib/string/String.__lt - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 59) (i32.const 0) ) @@ -4367,13 +4367,13 @@ ) (if (call $~lib/string/String.__gt - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 60) (i32.const 0) ) @@ -4383,14 +4383,14 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 61) (i32.const 0) ) @@ -4400,14 +4400,14 @@ (if (i32.eqz (call $~lib/string/String.__lte - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 62) (i32.const 0) ) @@ -4417,14 +4417,14 @@ (if (i32.ne (i32.load - (i32.const 424) + (i32.const 428) ) (i32.const 3) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 64) (i32.const 0) ) @@ -4435,16 +4435,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 332) + (i32.const 336) (i32.const 100) ) - (i32.const 332) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 66) (i32.const 0) ) @@ -4455,16 +4455,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 0) ) - (i32.const 332) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 67) (i32.const 0) ) @@ -4475,16 +4475,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 1) ) - (i32.const 316) + (i32.const 320) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 68) (i32.const 0) ) @@ -4495,16 +4495,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 2) ) - (i32.const 404) + (i32.const 408) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 69) (i32.const 0) ) @@ -4515,16 +4515,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 3) ) - (i32.const 436) + (i32.const 440) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 70) (i32.const 0) ) @@ -4535,16 +4535,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 388) + (i32.const 392) (i32.const 4) ) - (i32.const 448) + (i32.const 452) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 71) (i32.const 0) ) @@ -4555,16 +4555,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 5) ) - (i32.const 468) + (i32.const 472) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 72) (i32.const 0) ) @@ -4575,16 +4575,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 6) ) - (i32.const 484) + (i32.const 488) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 73) (i32.const 0) ) @@ -4595,16 +4595,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 7) ) - (i32.const 500) + (i32.const 504) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 74) (i32.const 0) ) diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index fba17643..24aca8f0 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -15,7 +15,7 @@ (global $~lib/internal/allocator/MAX_SIZE_32 i32 (i32.const 1073741824)) (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 4)) + (global $std/string/str (mut i32) (i32.const 8)) (global $std/string/nullStr (mut i32) (i32.const 0)) (global $~lib/internal/string/HEADER_SIZE i32 (i32.const 4)) (global $~lib/internal/string/MAX_LENGTH i32 (i32.const 536870910)) @@ -46,44 +46,44 @@ (global $~lib/internal/string/CharCode.o i32 (i32.const 111)) (global $~lib/internal/string/CharCode.x i32 (i32.const 120)) (global $~lib/internal/string/CharCode.z i32 (i32.const 122)) - (global $~lib/internal/string/EMPTY i32 (i32.const 332)) + (global $~lib/internal/string/EMPTY i32 (i32.const 336)) (global $std/string/c (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 520)) + (global $HEAP_BASE i32 (i32.const 524)) (memory $0 1) - (data (i32.const 4) "\10\00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g\00") - (data (i32.const 40) "\0d\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 72) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 104) "\02\00\00\00h\00i\00") - (data (i32.const 112) "\04\00\00\00n\00u\00l\00l\00") - (data (i32.const 124) "\06\00\00\00s\00t\00r\00i\00n\00g\00") - (data (i32.const 140) "\03\00\00\00I\00\'\00m\00") - (data (i32.const 152) "\01\00\00\00,\00") - (data (i32.const 160) "\01\00\00\00x\00") - (data (i32.const 168) "\01\00\00\000\00") - (data (i32.const 176) "\01\00\00\001\00") - (data (i32.const 184) "\05\00\00\000\00b\001\000\001\00") - (data (i32.const 200) "\05\00\00\000\00o\007\000\007\00") - (data (i32.const 216) "\05\00\00\000\00x\00f\000\00f\00") - (data (i32.const 232) "\05\00\00\000\00x\00F\000\00F\00") - (data (i32.const 248) "\03\00\00\000\001\001\00") - (data (i32.const 260) "\04\00\00\000\00x\001\00g\00") - (data (i32.const 272) "\03\00\00\000\00.\001\00") - (data (i32.const 284) "\03\00\00\00.\002\005\00") - (data (i32.const 296) "\08\00\00\00.\001\00f\00o\00o\00b\00a\00r\00") - (data (i32.const 316) "\01\00\00\00a\00") - (data (i32.const 324) "\01\00\00\00b\00") - (data (i32.const 332) "\00\00\00\00") - (data (i32.const 336) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 388) "\02\00\00\00a\00b\00") - (data (i32.const 396) "\02\00\00\00b\00a\00") - (data (i32.const 404) "\02\00\00\00a\00a\00") - (data (i32.const 412) "\03\00\00\00a\00b\00c\00") - (data (i32.const 424) "\03\00\00\001\002\003\00") - (data (i32.const 436) "\03\00\00\00a\00a\00a\00") - (data (i32.const 448) "\08\00\00\00a\00b\00a\00b\00a\00b\00a\00b\00") - (data (i32.const 468) "\05\00\00\00a\00a\00a\00a\00a\00") - (data (i32.const 484) "\06\00\00\00a\00a\00a\00a\00a\00a\00") - (data (i32.const 500) "\07\00\00\00a\00a\00a\00a\00a\00a\00a\00") + (data (i32.const 8) "\10\00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g\00") + (data (i32.const 44) "\0d\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 76) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 108) "\02\00\00\00h\00i\00") + (data (i32.const 116) "\04\00\00\00n\00u\00l\00l\00") + (data (i32.const 128) "\06\00\00\00s\00t\00r\00i\00n\00g\00") + (data (i32.const 144) "\03\00\00\00I\00\'\00m\00") + (data (i32.const 156) "\01\00\00\00,\00") + (data (i32.const 164) "\01\00\00\00x\00") + (data (i32.const 172) "\01\00\00\000\00") + (data (i32.const 180) "\01\00\00\001\00") + (data (i32.const 188) "\05\00\00\000\00b\001\000\001\00") + (data (i32.const 204) "\05\00\00\000\00o\007\000\007\00") + (data (i32.const 220) "\05\00\00\000\00x\00f\000\00f\00") + (data (i32.const 236) "\05\00\00\000\00x\00F\000\00F\00") + (data (i32.const 252) "\03\00\00\000\001\001\00") + (data (i32.const 264) "\04\00\00\000\00x\001\00g\00") + (data (i32.const 276) "\03\00\00\000\00.\001\00") + (data (i32.const 288) "\03\00\00\00.\002\005\00") + (data (i32.const 300) "\08\00\00\00.\001\00f\00o\00o\00b\00a\00r\00") + (data (i32.const 320) "\01\00\00\00a\00") + (data (i32.const 328) "\01\00\00\00b\00") + (data (i32.const 336) "\00\00\00\00") + (data (i32.const 340) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 392) "\02\00\00\00a\00b\00") + (data (i32.const 400) "\02\00\00\00b\00a\00") + (data (i32.const 408) "\02\00\00\00a\00a\00") + (data (i32.const 416) "\03\00\00\00a\00b\00c\00") + (data (i32.const 428) "\03\00\00\001\002\003\00") + (data (i32.const 440) "\03\00\00\00a\00a\00a\00") + (data (i32.const 452) "\08\00\00\00a\00b\00a\00b\00a\00b\00a\00b\00") + (data (i32.const 472) "\05\00\00\00a\00a\00a\00a\00a\00") + (data (i32.const 488) "\06\00\00\00a\00a\00a\00a\00a\00a\00") + (data (i32.const 504) "\07\00\00\00a\00a\00a\00a\00a\00a\00a\00") (export "getString" (func $std/string/getString)) (export "memory" (memory $0)) (start $start) @@ -98,7 +98,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 37) (i32.const 4) ) @@ -211,7 +211,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 231) (i32.const 4) ) @@ -224,7 +224,7 @@ (i32.const 0) ) (set_local $1 - (i32.const 112) + (i32.const 116) ) ) (set_local $3 @@ -318,7 +318,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 98) (i32.const 4) ) @@ -446,7 +446,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 210) (i32.const 4) ) @@ -459,7 +459,7 @@ (i32.const 0) ) (set_local $1 - (i32.const 112) + (i32.const 116) ) ) (set_local $3 @@ -1156,7 +1156,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 466) (i32.const 10) ) @@ -1384,7 +1384,7 @@ (block (call $abort (i32.const 0) - (i32.const 336) + (i32.const 340) (i32.const 20) (i32.const 2) ) @@ -3545,7 +3545,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 74) (i32.const 4) ) @@ -3558,7 +3558,7 @@ (i32.const 0) ) (set_local $1 - (i32.const 112) + (i32.const 116) ) ) (set_local $2 @@ -3583,7 +3583,7 @@ (i32.const 0) ) (return - (i32.const 332) + (i32.const 336) ) ) (set_local $5 @@ -3635,7 +3635,7 @@ (get_local $0) ) (set_local $0 - (i32.const 112) + (i32.const 116) ) ) (return @@ -4112,7 +4112,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 383) (i32.const 4) ) @@ -4147,7 +4147,7 @@ (block (call $abort (i32.const 0) - (i32.const 72) + (i32.const 76) (i32.const 388) (i32.const 6) ) @@ -4168,7 +4168,7 @@ ) ) (return - (i32.const 332) + (i32.const 336) ) ) (if @@ -4262,13 +4262,13 @@ (i32.eqz (i32.eq (get_global $std/string/str) - (i32.const 4) + (i32.const 8) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 9) (i32.const 0) ) @@ -4287,7 +4287,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 11) (i32.const 0) ) @@ -4307,7 +4307,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 12) (i32.const 0) ) @@ -4318,14 +4318,14 @@ (i32.eqz (call $~lib/string/String#startsWith (get_global $std/string/str) - (i32.const 104) + (i32.const 108) (i32.const 0) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 13) (i32.const 0) ) @@ -4340,7 +4340,7 @@ ) (call $~lib/string/String#endsWith|trampoline (get_global $std/string/str) - (i32.const 124) + (i32.const 128) (i32.const 0) ) ) @@ -4348,7 +4348,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 14) (i32.const 0) ) @@ -4359,14 +4359,14 @@ (i32.eqz (call $~lib/string/String#includes (get_global $std/string/str) - (i32.const 140) + (i32.const 144) (i32.const 0) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 15) (i32.const 0) ) @@ -4378,7 +4378,7 @@ (i32.eq (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 152) + (i32.const 156) (i32.const 0) ) (i32.const 2) @@ -4387,7 +4387,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 16) (i32.const 0) ) @@ -4399,7 +4399,7 @@ (i32.eq (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 160) + (i32.const 164) (i32.const 0) ) (i32.const -1) @@ -4408,7 +4408,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 17) (i32.const 0) ) @@ -4419,7 +4419,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseInt - (i32.const 168) + (i32.const 172) (i32.const 0) ) (f64.const 0) @@ -4428,7 +4428,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 23) (i32.const 0) ) @@ -4439,7 +4439,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseInt - (i32.const 176) + (i32.const 180) (i32.const 0) ) (f64.const 1) @@ -4448,7 +4448,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 24) (i32.const 0) ) @@ -4459,7 +4459,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseInt - (i32.const 184) + (i32.const 188) (i32.const 0) ) (f64.const 5) @@ -4468,7 +4468,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 25) (i32.const 0) ) @@ -4479,7 +4479,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseInt - (i32.const 200) + (i32.const 204) (i32.const 0) ) (f64.const 455) @@ -4488,7 +4488,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 26) (i32.const 0) ) @@ -4499,7 +4499,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseInt - (i32.const 216) + (i32.const 220) (i32.const 0) ) (f64.const 3855) @@ -4508,7 +4508,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 27) (i32.const 0) ) @@ -4519,7 +4519,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseInt - (i32.const 232) + (i32.const 236) (i32.const 0) ) (f64.const 3855) @@ -4528,7 +4528,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 28) (i32.const 0) ) @@ -4539,7 +4539,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseInt - (i32.const 248) + (i32.const 252) (i32.const 0) ) (f64.const 11) @@ -4548,7 +4548,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 29) (i32.const 0) ) @@ -4559,7 +4559,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseInt - (i32.const 260) + (i32.const 264) (i32.const 0) ) (f64.const 1) @@ -4568,7 +4568,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 30) (i32.const 0) ) @@ -4579,7 +4579,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseFloat - (i32.const 168) + (i32.const 172) ) (f64.const 0) ) @@ -4587,7 +4587,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 32) (i32.const 0) ) @@ -4598,7 +4598,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseFloat - (i32.const 176) + (i32.const 180) ) (f64.const 1) ) @@ -4606,7 +4606,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 33) (i32.const 0) ) @@ -4617,7 +4617,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseFloat - (i32.const 272) + (i32.const 276) ) (f64.const 0.1) ) @@ -4625,7 +4625,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 34) (i32.const 0) ) @@ -4636,7 +4636,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseFloat - (i32.const 284) + (i32.const 288) ) (f64.const 0.25) ) @@ -4644,7 +4644,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 35) (i32.const 0) ) @@ -4655,7 +4655,7 @@ (i32.eqz (f64.eq (call $~lib/string/parseFloat - (i32.const 296) + (i32.const 300) ) (f64.const 0.1) ) @@ -4663,7 +4663,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 36) (i32.const 0) ) @@ -4672,21 +4672,21 @@ ) (set_global $std/string/c (call $~lib/string/String.__concat - (i32.const 316) - (i32.const 324) + (i32.const 320) + (i32.const 328) ) ) (if (i32.eqz (call $~lib/string/String.__eq (get_global $std/string/c) - (i32.const 388) + (i32.const 392) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 39) (i32.const 0) ) @@ -4697,13 +4697,13 @@ (i32.eqz (call $~lib/string/String.__ne (get_global $std/string/c) - (i32.const 316) + (i32.const 320) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 40) (i32.const 0) ) @@ -4713,14 +4713,14 @@ (if (i32.eqz (call $~lib/string/String.__eq - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 41) (i32.const 0) ) @@ -4730,14 +4730,14 @@ (if (i32.eqz (call $~lib/string/String.__ne - (i32.const 332) + (i32.const 336) (get_global $std/string/nullStr) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 42) (i32.const 0) ) @@ -4747,14 +4747,14 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 324) - (i32.const 316) + (i32.const 328) + (i32.const 320) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 44) (i32.const 0) ) @@ -4764,14 +4764,14 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 396) - (i32.const 316) + (i32.const 400) + (i32.const 320) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 45) (i32.const 0) ) @@ -4781,14 +4781,14 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 396) - (i32.const 404) + (i32.const 400) + (i32.const 408) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 46) (i32.const 0) ) @@ -4798,14 +4798,14 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 396) - (i32.const 388) + (i32.const 400) + (i32.const 392) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 47) (i32.const 0) ) @@ -4816,15 +4816,15 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__lt - (i32.const 396) - (i32.const 388) + (i32.const 400) + (i32.const 392) ) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 48) (i32.const 0) ) @@ -4835,7 +4835,7 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__lt - (i32.const 324) + (i32.const 328) (get_global $std/string/nullStr) ) ) @@ -4843,7 +4843,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 50) (i32.const 0) ) @@ -4855,14 +4855,14 @@ (i32.eqz (call $~lib/string/String.__lt (get_global $std/string/nullStr) - (i32.const 324) + (i32.const 328) ) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 51) (i32.const 0) ) @@ -4872,14 +4872,14 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 412) - (i32.const 332) + (i32.const 416) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 53) (i32.const 0) ) @@ -4889,14 +4889,14 @@ (if (i32.eqz (call $~lib/string/String.__lt - (i32.const 332) - (i32.const 412) + (i32.const 336) + (i32.const 416) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 54) (i32.const 0) ) @@ -4906,14 +4906,14 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 412) - (i32.const 332) + (i32.const 416) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 55) (i32.const 0) ) @@ -4923,14 +4923,14 @@ (if (i32.eqz (call $~lib/string/String.__lte - (i32.const 332) - (i32.const 412) + (i32.const 336) + (i32.const 416) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 56) (i32.const 0) ) @@ -4941,15 +4941,15 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__lt - (i32.const 412) - (i32.const 332) + (i32.const 416) + (i32.const 336) ) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 57) (i32.const 0) ) @@ -4960,15 +4960,15 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__gt - (i32.const 332) - (i32.const 412) + (i32.const 336) + (i32.const 416) ) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 58) (i32.const 0) ) @@ -4979,15 +4979,15 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__lt - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 59) (i32.const 0) ) @@ -4998,15 +4998,15 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__gt - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 60) (i32.const 0) ) @@ -5016,14 +5016,14 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 61) (i32.const 0) ) @@ -5033,14 +5033,14 @@ (if (i32.eqz (call $~lib/string/String.__lte - (i32.const 332) - (i32.const 332) + (i32.const 336) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 62) (i32.const 0) ) @@ -5051,7 +5051,7 @@ (i32.eqz (i32.eq (i32.load - (i32.const 424) + (i32.const 428) ) (i32.const 3) ) @@ -5059,7 +5059,7 @@ (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 64) (i32.const 0) ) @@ -5070,16 +5070,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 332) + (i32.const 336) (i32.const 100) ) - (i32.const 332) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 66) (i32.const 0) ) @@ -5090,16 +5090,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 0) ) - (i32.const 332) + (i32.const 336) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 67) (i32.const 0) ) @@ -5110,16 +5110,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 1) ) - (i32.const 316) + (i32.const 320) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 68) (i32.const 0) ) @@ -5130,16 +5130,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 2) ) - (i32.const 404) + (i32.const 408) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 69) (i32.const 0) ) @@ -5150,16 +5150,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 3) ) - (i32.const 436) + (i32.const 440) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 70) (i32.const 0) ) @@ -5170,16 +5170,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 388) + (i32.const 392) (i32.const 4) ) - (i32.const 448) + (i32.const 452) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 71) (i32.const 0) ) @@ -5190,16 +5190,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 5) ) - (i32.const 468) + (i32.const 472) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 72) (i32.const 0) ) @@ -5210,16 +5210,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 6) ) - (i32.const 484) + (i32.const 488) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 73) (i32.const 0) ) @@ -5230,16 +5230,16 @@ (i32.eqz (call $~lib/string/String.__eq (call $~lib/string/String#repeat - (i32.const 316) + (i32.const 320) (i32.const 7) ) - (i32.const 500) + (i32.const 504) ) ) (block (call $abort (i32.const 0) - (i32.const 40) + (i32.const 44) (i32.const 74) (i32.const 0) ) diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 313cc83f..482d5a70 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -11,11 +11,11 @@ (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/typedarray/arr (mut i32) (i32.const 0)) (global $std/typedarray/clampedArr (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 164)) + (global $HEAP_BASE i32 (i32.const 168)) (memory $0 1) - (data (i32.const 4) "\11\00\00\00s\00t\00d\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 44) "\1b\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 104) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 8) "\11\00\00\00s\00t\00d\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 48) "\1b\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 108) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $~lib/internal/arraybuffer/computeSize (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -49,7 +49,7 @@ ) (if (i32.gt_u - (tee_local $2 + (tee_local $0 (i32.and (i32.add (i32.add @@ -64,7 +64,7 @@ ) ) (i32.shl - (tee_local $0 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -74,14 +74,14 @@ (i32.lt_s (grow_memory (select - (get_local $0) + (get_local $2) (tee_local $4 (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) + (get_local $0) (get_local $1) ) (i32.const 65535) @@ -93,7 +93,7 @@ ) ) (i32.gt_s - (get_local $0) + (get_local $2) (get_local $4) ) ) @@ -112,7 +112,7 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $0) ) (return (get_local $1) @@ -131,7 +131,7 @@ (block (call $abort (i32.const 0) - (i32.const 104) + (i32.const 108) (i32.const 22) (i32.const 2) ) @@ -488,6 +488,7 @@ ) (func $~lib/internal/typedarray/TypedArray#constructor (; 5 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) + (local $3 i32) (if (i32.gt_u (get_local $1) @@ -496,7 +497,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -505,9 +506,11 @@ ) (call $~lib/memory/set_memory (i32.add - (tee_local $2 + (tee_local $3 (call $~lib/internal/arraybuffer/allocUnsafe - (get_local $1) + (tee_local $2 + (get_local $1) + ) ) ) (i32.const 8) @@ -539,7 +542,7 @@ (get_local $0) ) ) - (get_local $2) + (get_local $3) ) (i32.store offset=4 (get_local $0) @@ -547,7 +550,7 @@ ) (i32.store offset=8 (get_local $0) - (get_local $1) + (get_local $2) ) (get_local $0) ) @@ -571,7 +574,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -654,7 +657,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -737,7 +740,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -824,7 +827,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 2) ) @@ -841,7 +844,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 19) (i32.const 2) ) @@ -858,7 +861,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 2) ) @@ -877,7 +880,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 2) ) @@ -894,7 +897,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 2) ) @@ -911,7 +914,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 2) ) @@ -930,7 +933,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 2) ) @@ -947,7 +950,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 2) ) @@ -964,7 +967,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 30) (i32.const 2) ) @@ -983,7 +986,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 33) (i32.const 2) ) @@ -1003,7 +1006,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 34) (i32.const 2) ) @@ -1020,7 +1023,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 35) (i32.const 2) ) @@ -1039,7 +1042,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 38) (i32.const 2) ) @@ -1059,7 +1062,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 39) (i32.const 2) ) @@ -1076,7 +1079,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 40) (i32.const 2) ) @@ -1095,7 +1098,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 43) (i32.const 2) ) @@ -1115,7 +1118,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 44) (i32.const 2) ) @@ -1132,7 +1135,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 2) ) @@ -1151,7 +1154,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 48) (i32.const 2) ) @@ -1171,7 +1174,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 49) (i32.const 2) ) @@ -1188,7 +1191,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 50) (i32.const 2) ) @@ -1207,7 +1210,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 53) (i32.const 2) ) @@ -1227,7 +1230,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 54) (i32.const 2) ) @@ -1244,7 +1247,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 55) (i32.const 2) ) @@ -1263,7 +1266,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 58) (i32.const 2) ) @@ -1283,7 +1286,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 59) (i32.const 2) ) @@ -1300,7 +1303,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 2) ) @@ -1319,7 +1322,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 2) ) @@ -1339,7 +1342,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 64) (i32.const 2) ) @@ -1356,7 +1359,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 2) ) @@ -1375,7 +1378,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 68) (i32.const 2) ) @@ -1395,7 +1398,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 69) (i32.const 2) ) @@ -1412,7 +1415,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 70) (i32.const 2) ) @@ -1442,7 +1445,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 48) (i32.const 42) ) @@ -1487,7 +1490,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 35) (i32.const 42) ) @@ -1512,8 +1515,7 @@ (func $~lib/typedarray/Int32Array#subarray (; 16 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (set_local $5 + (set_local $4 (call $~lib/internal/typedarray/TypedArray#get:length (get_local $0) ) @@ -1527,26 +1529,28 @@ (select (tee_local $3 (i32.add - (get_local $5) + (get_local $4) (get_local $1) ) ) - (i32.const 0) + (tee_local $1 + (i32.const 0) + ) (i32.gt_s (get_local $3) - (get_local $4) + (get_local $1) ) ) (select (tee_local $3 (get_local $1) ) - (tee_local $4 - (get_local $5) + (tee_local $1 + (get_local $4) ) (i32.lt_s (get_local $3) - (get_local $4) + (get_local $1) ) ) ) @@ -1560,16 +1564,14 @@ (select (tee_local $3 (i32.add - (get_local $5) + (get_local $4) (get_local $2) ) ) - (tee_local $4 - (get_local $1) - ) + (get_local $1) (i32.gt_s (get_local $3) - (get_local $4) + (get_local $1) ) ) (select @@ -1578,21 +1580,17 @@ (tee_local $3 (get_local $2) ) - (tee_local $4 - (get_local $5) - ) + (get_local $4) (i32.lt_s (get_local $3) (get_local $4) ) ) ) - (tee_local $4 - (get_local $1) - ) + (get_local $1) (i32.gt_s (get_local $3) - (get_local $4) + (get_local $1) ) ) ) @@ -1642,7 +1640,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 48) (i32.const 42) ) @@ -1708,7 +1706,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 35) (i32.const 42) ) @@ -1777,7 +1775,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 0) ) @@ -1791,7 +1789,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 81) (i32.const 0) ) @@ -1808,7 +1806,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 82) (i32.const 0) ) @@ -1826,7 +1824,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 83) (i32.const 0) ) @@ -1844,7 +1842,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 84) (i32.const 0) ) @@ -1862,7 +1860,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 85) (i32.const 0) ) @@ -1886,7 +1884,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 88) (i32.const 0) ) @@ -1903,7 +1901,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 89) (i32.const 0) ) @@ -1920,7 +1918,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 90) (i32.const 0) ) @@ -1938,7 +1936,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 91) (i32.const 0) ) @@ -1977,7 +1975,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 98) (i32.const 0) ) @@ -1998,7 +1996,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 99) (i32.const 0) ) @@ -2019,7 +2017,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 100) (i32.const 0) ) diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index 9d886fe4..c569bde8 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -18,11 +18,11 @@ (global $std/typedarray/arr (mut i32) (i32.const 0)) (global $std/typedarray/clampedArr (mut i32) (i32.const 0)) (global $std/typedarray/MAX_F64LENGTH i32 (i32.const 134217727)) - (global $HEAP_BASE i32 (i32.const 164)) + (global $HEAP_BASE i32 (i32.const 168)) (memory $0 1) - (data (i32.const 4) "\11\00\00\00s\00t\00d\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 44) "\1b\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 104) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") + (data (i32.const 8) "\11\00\00\00s\00t\00d\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 48) "\1b\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 108) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $~lib/internal/arraybuffer/computeSize (; 1 ;) (type $ii) (param $0 i32) (result i32) @@ -166,7 +166,7 @@ (block (call $abort (i32.const 0) - (i32.const 104) + (i32.const 108) (i32.const 22) (i32.const 2) ) @@ -553,7 +553,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -649,7 +649,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -745,7 +745,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -841,7 +841,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -937,7 +937,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -1033,7 +1033,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -1129,7 +1129,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -1225,7 +1225,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -1321,7 +1321,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -1417,7 +1417,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 18) (i32.const 34) ) @@ -1530,7 +1530,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 18) (i32.const 2) ) @@ -1552,7 +1552,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 19) (i32.const 2) ) @@ -1571,7 +1571,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 20) (i32.const 2) ) @@ -1596,7 +1596,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 23) (i32.const 2) ) @@ -1618,7 +1618,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 2) ) @@ -1637,7 +1637,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 2) ) @@ -1662,7 +1662,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 28) (i32.const 2) ) @@ -1684,7 +1684,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 29) (i32.const 2) ) @@ -1703,7 +1703,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 30) (i32.const 2) ) @@ -1728,7 +1728,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 33) (i32.const 2) ) @@ -1750,7 +1750,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 34) (i32.const 2) ) @@ -1769,7 +1769,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 35) (i32.const 2) ) @@ -1794,7 +1794,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 38) (i32.const 2) ) @@ -1816,7 +1816,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 39) (i32.const 2) ) @@ -1835,7 +1835,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 40) (i32.const 2) ) @@ -1860,7 +1860,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 43) (i32.const 2) ) @@ -1882,7 +1882,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 44) (i32.const 2) ) @@ -1901,7 +1901,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 45) (i32.const 2) ) @@ -1926,7 +1926,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 48) (i32.const 2) ) @@ -1948,7 +1948,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 49) (i32.const 2) ) @@ -1967,7 +1967,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 50) (i32.const 2) ) @@ -1992,7 +1992,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 53) (i32.const 2) ) @@ -2014,7 +2014,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 54) (i32.const 2) ) @@ -2033,7 +2033,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 55) (i32.const 2) ) @@ -2058,7 +2058,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 58) (i32.const 2) ) @@ -2080,7 +2080,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 59) (i32.const 2) ) @@ -2099,7 +2099,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 60) (i32.const 2) ) @@ -2124,7 +2124,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 63) (i32.const 2) ) @@ -2146,7 +2146,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 64) (i32.const 2) ) @@ -2165,7 +2165,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 65) (i32.const 2) ) @@ -2190,7 +2190,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 68) (i32.const 2) ) @@ -2212,7 +2212,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 69) (i32.const 2) ) @@ -2231,7 +2231,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 70) (i32.const 2) ) @@ -2267,7 +2267,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 48) (i32.const 42) ) @@ -2323,7 +2323,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 35) (i32.const 42) ) @@ -2509,7 +2509,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 48) (i32.const 42) ) @@ -2596,7 +2596,7 @@ (block (call $abort (i32.const 0) - (i32.const 44) + (i32.const 48) (i32.const 35) (i32.const 42) ) @@ -2638,7 +2638,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 1) (i32.const 0) ) @@ -2655,7 +2655,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 2) (i32.const 0) ) @@ -2672,7 +2672,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 3) (i32.const 0) ) @@ -2689,7 +2689,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 4) (i32.const 0) ) @@ -2706,7 +2706,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 5) (i32.const 0) ) @@ -2723,7 +2723,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 6) (i32.const 0) ) @@ -2740,7 +2740,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 7) (i32.const 0) ) @@ -2757,7 +2757,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -2774,7 +2774,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -2791,7 +2791,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 10) (i32.const 0) ) @@ -2808,7 +2808,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 11) (i32.const 0) ) @@ -2869,7 +2869,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 80) (i32.const 0) ) @@ -2888,7 +2888,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 81) (i32.const 0) ) @@ -2910,7 +2910,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 82) (i32.const 0) ) @@ -2930,7 +2930,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 83) (i32.const 0) ) @@ -2950,7 +2950,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 84) (i32.const 0) ) @@ -2970,7 +2970,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 85) (i32.const 0) ) @@ -2996,7 +2996,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 88) (i32.const 0) ) @@ -3018,7 +3018,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 89) (i32.const 0) ) @@ -3040,7 +3040,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 90) (i32.const 0) ) @@ -3060,7 +3060,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 91) (i32.const 0) ) @@ -3104,7 +3104,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 98) (i32.const 0) ) @@ -3127,7 +3127,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 99) (i32.const 0) ) @@ -3150,7 +3150,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 100) (i32.const 0) ) diff --git a/tests/compiler/switch.untouched.wat b/tests/compiler/switch.untouched.wat index 29b20b03..3423af63 100644 --- a/tests/compiler/switch.untouched.wat +++ b/tests/compiler/switch.untouched.wat @@ -1,6 +1,6 @@ (module (type $ii (func (param i32) (result i32))) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "doSwitch" (func $switch/doSwitch)) (export "doSwitchDefaultFirst" (func $switch/doSwitchDefaultFirst)) diff --git a/tests/compiler/ternary.untouched.wat b/tests/compiler/ternary.untouched.wat index 0809d0e1..8f6bd0e2 100644 --- a/tests/compiler/ternary.untouched.wat +++ b/tests/compiler/ternary.untouched.wat @@ -1,7 +1,7 @@ (module (type $v (func)) (global $ternary/a (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/typealias.untouched.wat b/tests/compiler/typealias.untouched.wat index 3c8aa61b..c877d428 100644 --- a/tests/compiler/typealias.untouched.wat +++ b/tests/compiler/typealias.untouched.wat @@ -1,7 +1,7 @@ (module (type $ii (func (param i32) (result i32))) (type $v (func)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "alias" (func $typealias/alias)) (export "memory" (memory $0)) diff --git a/tests/compiler/unary.untouched.wat b/tests/compiler/unary.untouched.wat index e62c1268..916c55e8 100644 --- a/tests/compiler/unary.untouched.wat +++ b/tests/compiler/unary.untouched.wat @@ -4,7 +4,7 @@ (global $unary/I (mut i64) (i64.const 0)) (global $unary/f (mut f32) (f32.const 0)) (global $unary/F (mut f64) (f64.const 0)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/void.untouched.wat b/tests/compiler/void.untouched.wat index 74838ed8..d5fcbcbc 100644 --- a/tests/compiler/void.untouched.wat +++ b/tests/compiler/void.untouched.wat @@ -3,7 +3,7 @@ (type $v (func)) (global $void/u8Val1 (mut i32) (i32.const 1)) (global $void/u8Val2 (mut i32) (i32.const 255)) - (global $HEAP_BASE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 8)) (memory $0 1) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 00b4d97c..88aedf48 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -6,7 +6,7 @@ (global $while/m (mut i32) (i32.const 0)) (global $while/o (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 4) "\08\00\00\00w\00h\00i\00l\00e\00.\00t\00s") + (data (i32.const 8) "\08\00\00\00w\00h\00i\00l\00e\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -36,7 +36,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -51,7 +51,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -105,7 +105,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 21) (i32.const 2) ) @@ -120,7 +120,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 2) ) @@ -136,7 +136,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 0) ) @@ -151,7 +151,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 0) ) @@ -166,7 +166,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 26) (i32.const 0) ) @@ -214,7 +214,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) @@ -229,7 +229,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 32) (i32.const 0) ) diff --git a/tests/compiler/while.untouched.wat b/tests/compiler/while.untouched.wat index d7ebfb05..421198e5 100644 --- a/tests/compiler/while.untouched.wat +++ b/tests/compiler/while.untouched.wat @@ -5,9 +5,9 @@ (global $while/n (mut i32) (i32.const 10)) (global $while/m (mut i32) (i32.const 0)) (global $while/o (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 24)) + (global $HEAP_BASE i32 (i32.const 28)) (memory $0 1) - (data (i32.const 4) "\08\00\00\00w\00h\00i\00l\00e\00.\00t\00s\00") + (data (i32.const 8) "\08\00\00\00w\00h\00i\00l\00e\00.\00t\00s\00") (export "memory" (memory $0)) (start $start) (func $start (; 1 ;) (type $v) @@ -46,7 +46,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 8) (i32.const 0) ) @@ -63,7 +63,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 9) (i32.const 0) ) @@ -128,7 +128,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 21) (i32.const 2) ) @@ -145,7 +145,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 22) (i32.const 2) ) @@ -168,7 +168,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 24) (i32.const 0) ) @@ -185,7 +185,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 25) (i32.const 0) ) @@ -202,7 +202,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 26) (i32.const 0) ) @@ -261,7 +261,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 31) (i32.const 0) ) @@ -278,7 +278,7 @@ (block (call $abort (i32.const 0) - (i32.const 4) + (i32.const 8) (i32.const 32) (i32.const 0) )