From d90cd085e509c6cdf3233c6d75fad6a864202f2f Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Thu, 13 Sep 2018 23:10:49 +0200 Subject: [PATCH] Update Binaryen --- dist/asc.js.map | 2 +- dist/assemblyscript.js | 4 +- dist/assemblyscript.js.map | 2 +- package-lock.json | 366 +- package.json | 4 +- src/builtins.ts | 8 +- src/compiler.ts | 4 +- src/glue/binaryen.d.ts | 2 - src/module.ts | 14 +- tests/compiler/binary.optimized.wat | 3321 +---------------- tests/compiler/builtins.ts | 2 +- tests/compiler/call-inferred.optimized.wat | 34 +- .../compiler/class-overloading.optimized.wat | 7 +- tests/compiler/class.optimized.wat | 66 +- tests/compiler/exports.optimized.wat | 9 +- tests/compiler/function-types.optimized.wat | 27 +- tests/compiler/function.optimized.wat | 119 +- tests/compiler/getter-call.optimized.wat | 15 +- tests/compiler/if.optimized.wat | 6 +- tests/compiler/import.optimized.wat | 56 +- tests/compiler/instanceof.optimized.wat | 24 +- tests/compiler/mandelbrot.optimized.wat | 10 +- .../new-without-allocator.optimized.wat | 8 +- tests/compiler/object-literal.optimized.wat | 81 +- tests/compiler/rereexport.optimized.wat | 26 +- tests/compiler/retain-i32.optimized.wat | 179 +- tests/compiler/scoped.optimized.wat | 8 +- .../std/allocator_arena.optimized.wat | 295 +- tests/compiler/std/array-access.optimized.wat | 74 +- .../compiler/std/array-literal.optimized.wat | 303 +- tests/compiler/std/array.optimized.wat | 1631 ++++---- tests/compiler/std/arraybuffer.optimized.wat | 220 +- tests/compiler/std/constructor.optimized.wat | 111 +- tests/compiler/std/gc-array.optimized.wat | 173 +- tests/compiler/std/gc-basics.optimized.wat | 39 +- .../compiler/std/gc-integration.optimized.wat | 15 +- tests/compiler/std/gc-object.optimized.wat | 43 +- tests/compiler/std/libm.optimized.wat | 7 +- tests/compiler/std/map.optimized.wat | 363 +- tests/compiler/std/math.optimized.wat | 1694 +-------- tests/compiler/std/new.optimized.wat | 46 +- .../std/operator-overloading.optimized.wat | 118 +- tests/compiler/std/pointer.optimized.wat | 8 +- tests/compiler/std/polyfills.optimized.wat | 251 +- tests/compiler/std/set.optimized.wat | 364 +- tests/compiler/std/static-array.optimized.wat | 501 +-- tests/compiler/std/string-utf8.optimized.wat | 8 +- tests/compiler/std/string.optimized.wat | 230 +- tests/compiler/std/symbol.optimized.wat | 350 +- tests/compiler/std/typedarray.optimized.wat | 682 ++-- tests/compiler/switch.optimized.wat | 15 +- 51 files changed, 2786 insertions(+), 9159 deletions(-) diff --git a/dist/asc.js.map b/dist/asc.js.map index 812f76f9..8e48da63 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/path-browserify/index.js","webpack://asc/../node_modules/webpack/buildin/global.js","webpack://asc/./asc.js","webpack://asc/../node_modules/@protobufjs/utf8/index.js","webpack://asc/./util/colors.js","webpack://asc/./util/options.js","webpack://asc/./util/mkdirp.js","webpack://asc/external \"assemblyscript\"","webpack://asc/. sync","webpack://asc/../node_modules/browser-process-hrtime/index.js"],"names":["root","factory","exports","module","require","e","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__10__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","nextTick","fn","setTimeout","platform","arch","execPath","title","pid","browser","env","argv","binding","Error","path","cwd","chdir","dir","resolve","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","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","g","Function","eval","window","global","fs","utf8","colorsUtil","optionsUtil","mkdirp","EOL","removeAllListeners","assemblyscript","isDev","code","register","project","e_ts","stack","isBundle","version","options","sourceMapRoot","libraryPrefix","LIBRARY_PREFIX","defaultOptimizeLevel","defaultShrinkLevel","libraryFiles","allocator/arena","allocator/buddy","allocator/emscripten","allocator/system","allocator/tlsf","array","arraybuffer","builtins","collector/itcm","diagnostics","error","gc","internal/allocator","internal/array","internal/arraybuffer","internal/hash","internal/itoa","internal/memory","internal/string","internal/typedarray","iterator","map","math","memory","polyfills","regexp","set","string","symbol","table","typedarray","libDir","bundled","sync","forEach","file","replace","readFileSync","definitionFiles","assembly","portable","stdDir","compileString","sources","input.ts","output","stdout","createMemoryStream","stderr","binary","text","keys","val","isArray","String","main","readFile","writeFile","contents","listFiles","callback","readFileNode","writeFileNode","listFilesNode","stats","createStats","opts","parse","args","noColors","supported","unknown","arg","write","yellow","trailing","err","red","help","out","color","white","cyan","baseDir","transforms","transform","parser","noLib","parseCount","parseTime","measure","parseFile","libPath","indexOf","customLibDirs","lib","apply","k","libFiles","endsWith","j","libText","sourcePath","sourceText","nextFile","startsWith","plainName","substring","indexName","checkDiagnostics","applyTransform","program","finishParsing","optimizeLevel","shrinkLevel","optimize","max","compilerOptions","createOptions","setTarget","setNoTreeShaking","noTreeShaking","setNoAssert","noAssert","setImportMemory","importMemory","setImportTable","importTable","setMemoryBase","memoryBase","setSourceMap","sourceMap","setOptimizeLevelHints","setGlobalAlias","use","aliases","part","alias","enable","flag","toUpperCase","enableFeature","compileCount","compileTime","compileProgram","dispose","validate","validateCount","validateTime","trapMode","optimizeCount","optimizeTime","runPasses","setOptimizeLevel","setShrinkLevel","setDebugInfo","noDebug","pass","noEmit","hasStdout","hasOutput","outFile","test","textFile","asmjsFile","binaryFile","wasm","sourceMapURL","emitCount","emitTime","toBinary","writeStdout","JSON","sourceRoot","stdName","sourceContents","stringify","asm","toAsmjs","idlFile","idl","buildIDL","tsdFile","tsd","buildTSD","wat","toText","printStats","readCount","readTime","encoding","writeCount","writeTime","writeFileSync","files","readdirSync","used","argumentSubstitutions","-O","-Os","-Oz","-O0","-O0s","-O0z","-O1","-O1s","-O1z","-O2","-O2s","-O2z","-O3","-O3s","-O3z","emitter","diagnostic","hasErrors","nextDiagnostic","formatDiagnostic","isTTY","isError","hrtime","times","formatTime","time","toFixed","format","count","allocBuffer","Buffer","allocUnsafe","Uint8Array","stream","chunk","buffer","reset","toBuffer","offset","toString","read","tscOptions","alwaysStrict","noImplicitAny","noImplicitReturns","noImplicitThis","noEmitOnError","strictNullChecks","experimentalDecorators","target","types","allowJs","charCodeAt","fromCharCode","c1","c2","proc","isCI","base","colors","gray","GRAY","RESET","RED","green","GREEN","YELLOW","blue","BLUE","magenta","MAGENTA","CYAN","WHITE","config","option","default","match","type","parseInt","parseFloat","indent","padding","eol","sb","description","line","_0777","made","undefined","mkdirSync","err0","stat","statSync","err1","isDirectory","webpackEmptyContext","req","id","previousTimestamp","clocktime","performanceNow","performance","seconds","floor","nanoseconds","now","mozNow","msNow","oNow","webkitNow","Date","getTime"],"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__10__) {\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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = 4);\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","// 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","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 * 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 cli/asc\r\n */\r\n\r\n// Use \".\" instead of \"/\" as cwd in browsers\r\nif (process.browser) process.cwd = function() { return \".\"; };\r\n\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst utf8 = require(\"@protobufjs/utf8\");\r\nconst colorsUtil = require(\"./util/colors\");\r\nconst optionsUtil = require(\"./util/options\");\r\nconst mkdirp = require(\"./util/mkdirp\");\r\nconst EOL = process.platform === \"win32\" ? \"\\r\\n\" : \"\\n\";\r\n\r\n// Emscripten adds an `uncaughtException` listener to Binaryen that results in an additional\r\n// useless code fragment on top of an actual error. suppress this:\r\nif (process.removeAllListeners) process.removeAllListeners(\"uncaughtException\");\r\n\r\n// Use distribution files if present, otherwise run the sources directly\r\nvar assemblyscript, isDev = false;\r\n(() => {\r\n try { // `asc` on the command line\r\n assemblyscript = require(\"../dist/assemblyscript.js\");\r\n } catch (e) {\r\n try { // `asc` on the command line without dist files\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_ts) {\r\n try { // `require(\"dist/asc.js\")` in explicit browser tests\r\n assemblyscript = eval(\"require('./assemblyscript')\");\r\n } catch (e) {\r\n // combine both errors that lead us here\r\n e.stack = e_ts.stack + \"\\n---\\n\" + e.stack;\r\n throw e;\r\n }\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 version. */\r\nexports.version = exports.isBundle ? BUNDLE_VERSION : require(\"../package.json\").version;\r\n\r\n/** Available CLI 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(\"**/!(*.d).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\", \"index.d.ts\"), \"utf8\"),\r\n \"portable\": fs.readFileSync(path.join(stdDir, \"portable\", \"index.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 var argv = [\r\n \"--binaryFile\", \"binary\",\r\n \"--textFile\", \"text\",\r\n ];\r\n Object.keys(options || {}).forEach(key => {\r\n var val = options[key];\r\n if (Array.isArray(val)) val.forEach(val => argv.push(\"--\" + key, String(val)));\r\n else argv.push(\"--\" + key, String(val));\r\n });\r\n exports.main(argv.concat(Object.keys(sources)), {\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 // Output must be specified if not present in the environment\r\n if (!stdout) throw Error(\"'options.stdout' must be specified\");\r\n if (!stderr) throw Error(\"'options.stderr' must be specified\");\r\n\r\n const opts = optionsUtil.parse(argv, exports.options);\r\n const args = opts.options;\r\n argv = opts.arguments;\r\n if (args.noColors) {\r\n colorsUtil.stdout.supported =\r\n colorsUtil.stderr.supported = false;\r\n } else {\r\n colorsUtil.stdout = colorsUtil.from(stdout);\r\n colorsUtil.stderr = colorsUtil.from(stderr);\r\n }\r\n\r\n // Check for unknown arguments\r\n if (opts.unknown.length) {\r\n opts.unknown.forEach(arg => {\r\n stderr.write(colorsUtil.stderr.yellow(\"WARN: \") + \"Unknown option '\" + arg + \"'\" + EOL);\r\n });\r\n }\r\n\r\n // Check for trailing arguments\r\n if (opts.trailing.length) {\r\n stderr.write(colorsUtil.stderr.yellow(\"WARN: \") + \"Unsupported trailing arguments: \" + opts.trailing.join(\" \") + EOL);\r\n }\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(colorsUtil.stderr.red(\"ERROR: \") + err.stack.replace(/^ERROR: /i, \"\") + 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 || !argv.length) {\r\n var out = args.help ? stdout : stderr;\r\n var color = args.help ? colorsUtil.stdout : colorsUtil.stderr;\r\n out.write([\r\n color.white(\"SYNTAX\"),\r\n \" \" + color.cyan(\"asc\") + \" [entryFile ...] [options]\",\r\n \"\",\r\n color.white(\"EXAMPLES\"),\r\n \" \" + color.cyan(\"asc\") + \" hello.ts\",\r\n \" \" + color.cyan(\"asc\") + \" hello.ts -b hello.wasm -t hello.wat\",\r\n \" \" + color.cyan(\"asc\") + \" hello1.ts hello2.ts -b -O > hello.wasm\",\r\n \"\",\r\n color.white(\"OPTIONS\"),\r\n ].concat(\r\n optionsUtil.help(exports.options, 24, EOL)\r\n ).join(EOL) + EOL);\r\n return callback(null);\r\n }\r\n\r\n // I/O must be specified if not present in the environment\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 // Set up base directory\r\n const baseDir = args.baseDir ? path.resolve(args.baseDir) : \".\";\r\n\r\n // Set up transforms\r\n const transforms = [];\r\n if (args.transform) {\r\n args.transform.forEach(transform =>\r\n transforms.push(\r\n require(\r\n path.isAbsolute(transform = transform.trim())\r\n ? transform\r\n : path.join(process.cwd(), transform)\r\n )\r\n )\r\n );\r\n }\r\n function applyTransform(name, ...args) {\r\n transforms.forEach(transform => {\r\n if (typeof transform[name] === \"function\") transform[name](...args);\r\n });\r\n }\r\n\r\n // Begin parsing\r\n var parser = null;\r\n\r\n // Include library files\r\n if (!args.noLib) {\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 } else { // always include builtins\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n exports.libraryFiles[\"builtins\"],\r\n exports.libraryPrefix + \"builtins.ts\",\r\n false,\r\n parser\r\n );\r\n });\r\n }\r\n const customLibDirs = [];\r\n if (args.lib) {\r\n let lib = args.lib;\r\n if (typeof lib === \"string\") lib = lib.split(\",\");\r\n Array.prototype.push.apply(customLibDirs, 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 = argv.length; i < k; ++i) {\r\n const filename = argv[i];\r\n\r\n let sourcePath = String(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 applyTransform(\"afterParse\", parser);\r\n\r\n // Finish parsing\r\n const program = assemblyscript.finishParsing(parser);\r\n\r\n // Set up optimization levels\r\n var optimizeLevel = 0;\r\n var shrinkLevel = 0;\r\n if (args.optimize) {\r\n optimizeLevel = exports.defaultOptimizeLevel;\r\n shrinkLevel = exports.defaultShrinkLevel;\r\n }\r\n if (typeof args.optimizeLevel === \"number\") {\r\n optimizeLevel = args.optimizeLevel;\r\n }\r\n if (typeof args.shrinkLevel === \"number\") {\r\n shrinkLevel = args.shrinkLevel;\r\n }\r\n optimizeLevel = Math.min(Math.max(optimizeLevel, 0), 3);\r\n shrinkLevel = Math.min(Math.max(shrinkLevel, 0), 2);\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.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 assemblyscript.setOptimizeLevelHints(compilerOptions, optimizeLevel, shrinkLevel);\r\n\r\n if (!args.noLib) {\r\n // Initialize default aliases\r\n assemblyscript.setGlobalAlias(compilerOptions, \"Math\", \"NativeMath\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"Mathf\", \"NativeMathf\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"abort\", \"~lib/env/abort\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"trace\", \"~lib/env/trace\");\r\n }\r\n\r\n // Add or override aliases if specified\r\n if (args.use) {\r\n let aliases = args.use;\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) 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 // Implicitly run costly non-LLVM optimizations on -O3 or -Oz\r\n // see: https://github.com/WebAssembly/binaryen/pull/1596\r\n if (optimizeLevel >= 3 || shrinkLevel >= 2) optimizeLevel = 4;\r\n\r\n module.setOptimizeLevel(optimizeLevel);\r\n module.setShrinkLevel(shrinkLevel);\r\n module.setDebugInfo(!args.noDebug);\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 || shrinkLevel > 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 mkdirp(path.dirname(filename));\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 = fs.readdirSync(dirname).filter(file => /^(?!.*\\.d\\.ts$).*\\.ts$/.test(file));\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\nvar argumentSubstitutions = {\r\n \"-O\" : [ \"--optimize\" ],\r\n \"-Os\" : [ \"--optimize\", \"--shrinkLevel\", \"1\" ],\r\n \"-Oz\" : [ \"--optimize\", \"--shrinkLevel\", \"2\" ],\r\n \"-O0\" : [ \"--optimizeLevel\", \"0\", \"--shrinkLevel\", \"0\" ],\r\n \"-O0s\": [ \"--optimizeLevel\", \"0\", \"--shrinkLevel\", \"1\" ],\r\n \"-O0z\": [ \"--optimizeLevel\", \"0\", \"--shrinkLevel\", \"2\" ],\r\n \"-O1\" : [ \"--optimizeLevel\", \"1\", \"--shrinkLevel\", \"0\" ],\r\n \"-O1s\": [ \"--optimizeLevel\", \"1\", \"--shrinkLevel\", \"1\" ],\r\n \"-O1z\": [ \"--optimizeLevel\", \"1\", \"--shrinkLevel\", \"2\" ],\r\n \"-O2\" : [ \"--optimizeLevel\", \"2\", \"--shrinkLevel\", \"0\" ],\r\n \"-O2s\": [ \"--optimizeLevel\", \"2\", \"--shrinkLevel\", \"1\" ],\r\n \"-O2z\": [ \"--optimizeLevel\", \"2\", \"--shrinkLevel\", \"2\" ],\r\n \"-O3\" : [ \"--optimizeLevel\", \"3\", \"--shrinkLevel\", \"0\" ],\r\n \"-O3s\": [ \"--optimizeLevel\", \"3\", \"--shrinkLevel\", \"1\" ],\r\n \"-O3z\": [ \"--optimizeLevel\", \"3\", \"--shrinkLevel\", \"2\" ],\r\n};\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 if (stderr) {\r\n stderr.write(\r\n assemblyscript.formatDiagnostic(diagnostic, stderr.isTTY, true) +\r\n EOL + EOL\r\n );\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\n/** Formats a high resolution time to a human readable string. */\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.reset = function() {\r\n stream.length = 0;\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 for syntax highlighting etc. */\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","\"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","var proc = typeof process !== \"undefined\" && process || {};\r\nvar isCI = proc.env && \"CI\" in proc.env; // doesn't work when bundled because 'process' is a mock\r\n\r\nfunction from(stream, base) {\r\n var colors = base || {};\r\n colors.supported = (stream && !!stream.isTTY) || isCI;\r\n colors.gray = text => colors.supported ? exports.GRAY + text + exports.RESET : text;\r\n colors.red = text => colors.supported ? exports.RED + text + exports.RESET : text;\r\n colors.green = text => colors.supported ? exports.GREEN + text + exports.RESET : text;\r\n colors.yellow = text => colors.supported ? exports.YELLOW + text + exports.RESET : text;\r\n colors.blue = text => colors.supported ? exports.BLUE + text + exports.RESET : text;\r\n colors.magenta = text => colors.supported ? exports.MAGENTA + text + exports.RESET : text;\r\n colors.cyan = text => colors.supported ? exports.CYAN + text + exports.RESET : text;\r\n colors.white = text => colors.supported ? exports.WHITE + text + exports.RESET : text;\r\n return colors;\r\n}\r\n\r\nexports.stdout = from(proc.stdout, exports);\r\nexports.stderr = from(proc.stderr);\r\nexports.from = from;\r\n\r\nexports.GRAY = \"\\u001b[90m\";\r\nexports.RED = \"\\u001b[91m\";\r\nexports.GREEN = \"\\u001b[92m\";\r\nexports.YELLOW = \"\\u001b[93m\";\r\nexports.BLUE = \"\\u001b[94m\";\r\nexports.MAGENTA = \"\\u001b[95m\";\r\nexports.CYAN = \"\\u001b[96m\";\r\nexports.WHITE = \"\\u001b[97m\";\r\nexports.RESET = \"\\u001b[0m\";\r\n","// type | meaning\r\n// -----|---------------\r\n// b | boolean\r\n// i | integer\r\n// f | float\r\n// s | string\r\n// I | integer array\r\n// F | float array\r\n// S | string array\r\n\r\n/** Parses the specified command line arguments according to the given configuration. */\r\nfunction parse(argv, config) {\r\n var options = {};\r\n var unknown = [];\r\n var arguments = [];\r\n var trailing = [];\r\n\r\n // make an alias map and initialize defaults\r\n var aliases = {};\r\n Object.keys(config).forEach(key => {\r\n var option = config[key];\r\n if (option.alias != null) {\r\n if (typeof option.alias === \"string\") aliases[option.alias] = key;\r\n else if (Array.isArray(option.alias)) option.alias.forEach(alias => aliases[alias] = key);\r\n }\r\n if (option.default != null) options[key] = option.default;\r\n });\r\n\r\n // iterate over argv\r\n for (var i = 0, k = (argv = argv.slice()).length; i < k; ++i) {\r\n let arg = argv[i];\r\n if (arg == \"--\") { ++i; break; }\r\n let match = /^(?:(\\-\\w)(?:=(.*))?|(\\-\\-\\w{2,})(?:=(.*))?)$/.exec(arg), option, key;\r\n if (match) {\r\n if (config[arg]) option = config[key = arg]; // exact\r\n else if (match[1] != null) { // alias\r\n option = config[key = aliases[match[1].substring(1)]];\r\n if (option && match[2] != null) argv[i--] = match[2];\r\n } else if (match[3] != null) { // full\r\n option = config[key = match[3].substring(2)];\r\n if (option && match[4] != null) argv[i--] = match[4];\r\n }\r\n } else {\r\n if (arg.charCodeAt(0) == 45) option = config[key = arg]; // exact\r\n else { arguments.push(arg); continue; } // argument\r\n }\r\n if (option) {\r\n if (option.type == null || option.type === \"b\") options[key] = true; // flag\r\n else {\r\n if (i + 1 < argv.length && argv[i + 1].charCodeAt(0) != 45) { // present\r\n switch (option.type) {\r\n case \"i\": options[key] = parseInt(argv[++i], 10); break;\r\n case \"I\": options[key] = (options[key] || []).concat(parseInt(argv[++i], 10)); break;\r\n case \"f\": options[key] = parseFloat(argv[++i]); break;\r\n case \"F\": options[key] = (options[key] || []).concat(parseFloat(argv[++i])); break;\r\n case \"s\": options[key] = String(argv[++i]); break;\r\n case \"S\": options[key] = (options[key] || []).concat(argv[++i].split(\",\")); break;\r\n default: unknown.push(arg); --i;\r\n }\r\n } else { // omitted\r\n switch (option.type) {\r\n case \"i\":\r\n case \"f\": options[key] = option.default || 0; break;\r\n case \"s\": options[key] = option.default || \"\"; break;\r\n case \"I\":\r\n case \"F\":\r\n case \"S\": options[key] = options.default || []; break;\r\n default: unknown.push(arg);\r\n }\r\n }\r\n }\r\n if (option.value) Object.keys(option.value).forEach(k => options[k] = option.value[k]);\r\n } else unknown.push(arg);\r\n }\r\n while (i < k) trailing.push(argv[i++]); // trailing\r\n\r\n return { options, unknown, arguments, trailing };\r\n}\r\n\r\nexports.parse = parse;\r\n\r\n/** Generates the help text for the specified configuration. */\r\nfunction help(config, options) {\r\n if (!options) options = {};\r\n var indent = options.indent || 2;\r\n var padding = options.padding || 24;\r\n var eol = options.eol || \"\\n\";\r\n var sb = [];\r\n Object.keys(config).forEach(key => {\r\n var option = config[key];\r\n if (option.description == null) return;\r\n var text = \"\";\r\n while (text.length < indent) text += \" \";\r\n text += \"--\" + key;\r\n if (option.alias) text += \", -\" + option.alias;\r\n while (text.length < padding) text += \" \";\r\n if (Array.isArray(option.description)) {\r\n sb.push(text + option.description[0] + option.description.slice(1).map(line => {\r\n for (let i = 0; i < padding; ++i) line = \" \" + line;\r\n return eol + line;\r\n }).join(\"\"));\r\n } else sb.push(text + option.description);\r\n });\r\n return sb.join(eol);\r\n}\r\n\r\nexports.help = help;\r\n","/*\r\nCopyright 2010 James Halliday (mail@substack.net)\r\n\r\nThis project is free software released under the MIT/X11 license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n*/\r\n\r\nvar path = require(\"path\");\r\nvar fs = require(\"fs\");\r\nvar _0777 = parseInt(\"0777\", 8);\r\n\r\nmodule.exports = function mkdirp(p, opts, made) {\r\n if (!opts || typeof opts !== \"object\") {\r\n opts = { mode: opts };\r\n }\r\n var mode = opts.mode;\r\n if (mode === undefined) {\r\n mode = _0777 & (~process.umask());\r\n }\r\n if (!made) made = null;\r\n p = path.resolve(p);\r\n try {\r\n fs.mkdirSync(p, mode);\r\n made = made || p;\r\n } catch (err0) {\r\n switch (err0.code) {\r\n case \"ENOENT\":\r\n made = mkdirp(path.dirname(p), opts, made);\r\n mkdirp(p, opts, made);\r\n break;\r\n default:\r\n var stat;\r\n try {\r\n stat = fs.statSync(p);\r\n } catch (err1) {\r\n throw err0;\r\n }\r\n if (!stat.isDirectory()) throw err0;\r\n break;\r\n }\r\n }\r\n return made;\r\n};\r\n","if(typeof __WEBPACK_EXTERNAL_MODULE__10__ === 'undefined') {var e = new Error(\"Cannot find module 'assemblyscript'\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__10__;","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 12;","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}"],"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/path-browserify/index.js","webpack://asc/../node_modules/webpack/buildin/global.js","webpack://asc/./asc.js","webpack://asc/../node_modules/@protobufjs/utf8/index.js","webpack://asc/./util/colors.js","webpack://asc/./util/options.js","webpack://asc/./util/mkdirp.js","webpack://asc/external \"assemblyscript\"","webpack://asc/. sync","webpack://asc/../node_modules/browser-process-hrtime/index.js"],"names":["root","factory","exports","module","require","e","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__10__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","nextTick","fn","setTimeout","platform","arch","execPath","title","pid","browser","env","argv","binding","Error","path","cwd","chdir","dir","resolve","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","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","g","Function","eval","window","global","fs","utf8","colorsUtil","optionsUtil","mkdirp","EOL","removeAllListeners","assemblyscript","isDev","code","register","project","e_ts","stack","isBundle","version","options","sourceMapRoot","libraryPrefix","LIBRARY_PREFIX","defaultOptimizeLevel","defaultShrinkLevel","libraryFiles","allocator/arena","allocator/buddy","allocator/emscripten","allocator/system","allocator/tlsf","array","arraybuffer","builtins","collector/itcm","diagnostics","error","gc","internal/allocator","internal/array","internal/arraybuffer","internal/hash","internal/itoa","internal/memory","internal/string","internal/typedarray","iterator","map","math","memory","polyfills","regexp","set","string","symbol","table","typedarray","libDir","bundled","sync","forEach","file","replace","readFileSync","definitionFiles","assembly","portable","stdDir","compileString","sources","input.ts","output","stdout","createMemoryStream","stderr","binary","text","keys","val","isArray","String","main","readFile","writeFile","contents","listFiles","callback","readFileNode","writeFileNode","listFilesNode","stats","createStats","opts","parse","args","noColors","supported","unknown","arg","write","yellow","trailing","err","red","help","out","color","white","cyan","baseDir","transforms","transform","parser","noLib","parseCount","parseTime","measure","parseFile","libPath","indexOf","customLibDirs","lib","apply","k","libFiles","endsWith","j","libText","sourcePath","sourceText","nextFile","startsWith","plainName","substring","indexName","checkDiagnostics","applyTransform","program","finishParsing","optimizeLevel","shrinkLevel","optimize","max","compilerOptions","createOptions","setTarget","setNoTreeShaking","noTreeShaking","setNoAssert","noAssert","setImportMemory","importMemory","setImportTable","importTable","setMemoryBase","memoryBase","setSourceMap","sourceMap","setOptimizeLevelHints","setGlobalAlias","use","aliases","part","alias","enable","flag","toUpperCase","enableFeature","compileCount","compileTime","compileProgram","dispose","validate","validateCount","validateTime","trapMode","optimizeCount","optimizeTime","runPasses","setOptimizeLevel","setShrinkLevel","setDebugInfo","noDebug","pass","noEmit","hasStdout","hasOutput","outFile","test","textFile","asmjsFile","binaryFile","wasm","sourceMapURL","emitCount","emitTime","toBinary","writeStdout","JSON","sourceRoot","stdName","sourceContents","stringify","asm","toAsmjs","idlFile","idl","buildIDL","tsdFile","tsd","buildTSD","wat","toText","printStats","readCount","readTime","encoding","writeCount","writeTime","writeFileSync","files","readdirSync","used","argumentSubstitutions","-O","-Os","-Oz","-O0","-O0s","-O0z","-O1","-O1s","-O1z","-O2","-O2s","-O2z","-O3","-O3s","-O3z","emitter","diagnostic","hasErrors","nextDiagnostic","formatDiagnostic","isTTY","isError","hrtime","times","formatTime","time","toFixed","format","count","allocBuffer","Buffer","allocUnsafe","Uint8Array","stream","chunk","buffer","reset","toBuffer","offset","toString","read","tscOptions","alwaysStrict","noImplicitAny","noImplicitReturns","noImplicitThis","noEmitOnError","strictNullChecks","experimentalDecorators","target","types","allowJs","charCodeAt","fromCharCode","c1","c2","proc","isCI","base","colors","gray","GRAY","RESET","RED","green","GREEN","YELLOW","blue","BLUE","magenta","MAGENTA","CYAN","WHITE","config","option","default","match","type","parseInt","parseFloat","indent","padding","eol","sb","description","line","_0777","made","undefined","mkdirSync","err0","stat","statSync","err1","isDirectory","webpackEmptyContext","req","id","previousTimestamp","clocktime","performanceNow","performance","seconds","floor","nanoseconds","now","mozNow","msNow","oNow","webkitNow","Date","getTime"],"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__10__) {\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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = 4);\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","// 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","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 * 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 cli/asc\r\n */\r\n\r\n// Use \".\" instead of \"/\" as cwd in browsers\r\nif (process.browser) process.cwd = function() { return \".\"; };\r\n\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst utf8 = require(\"@protobufjs/utf8\");\r\nconst colorsUtil = require(\"./util/colors\");\r\nconst optionsUtil = require(\"./util/options\");\r\nconst mkdirp = require(\"./util/mkdirp\");\r\nconst EOL = process.platform === \"win32\" ? \"\\r\\n\" : \"\\n\";\r\n\r\n// Emscripten adds an `uncaughtException` listener to Binaryen that results in an additional\r\n// useless code fragment on top of an actual error. suppress this:\r\nif (process.removeAllListeners) process.removeAllListeners(\"uncaughtException\");\r\n\r\n// Use distribution files if present, otherwise run the sources directly\r\nvar assemblyscript, isDev = false;\r\n(() => {\r\n try { // `asc` on the command line\r\n assemblyscript = require(\"../dist/assemblyscript.js\");\r\n } catch (e) {\r\n try { // `asc` on the command line without dist files\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_ts) {\r\n try { // `require(\"dist/asc.js\")` in explicit browser tests\r\n assemblyscript = eval(\"require('./assemblyscript')\");\r\n } catch (e) {\r\n // combine both errors that lead us here\r\n e.stack = e_ts.stack + \"\\n---\\n\" + e.stack;\r\n throw e;\r\n }\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 version. */\r\nexports.version = exports.isBundle ? BUNDLE_VERSION : require(\"../package.json\").version;\r\n\r\n/** Available CLI 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(\"**/!(*.d).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\", \"index.d.ts\"), \"utf8\"),\r\n \"portable\": fs.readFileSync(path.join(stdDir, \"portable\", \"index.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 var argv = [\r\n \"--binaryFile\", \"binary\",\r\n \"--textFile\", \"text\",\r\n ];\r\n Object.keys(options || {}).forEach(key => {\r\n var val = options[key];\r\n if (Array.isArray(val)) val.forEach(val => argv.push(\"--\" + key, String(val)));\r\n else argv.push(\"--\" + key, String(val));\r\n });\r\n exports.main(argv.concat(Object.keys(sources)), {\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 // Output must be specified if not present in the environment\r\n if (!stdout) throw Error(\"'options.stdout' must be specified\");\r\n if (!stderr) throw Error(\"'options.stderr' must be specified\");\r\n\r\n const opts = optionsUtil.parse(argv, exports.options);\r\n const args = opts.options;\r\n argv = opts.arguments;\r\n if (args.noColors) {\r\n colorsUtil.stdout.supported =\r\n colorsUtil.stderr.supported = false;\r\n } else {\r\n colorsUtil.stdout = colorsUtil.from(stdout);\r\n colorsUtil.stderr = colorsUtil.from(stderr);\r\n }\r\n\r\n // Check for unknown arguments\r\n if (opts.unknown.length) {\r\n opts.unknown.forEach(arg => {\r\n stderr.write(colorsUtil.stderr.yellow(\"WARN: \") + \"Unknown option '\" + arg + \"'\" + EOL);\r\n });\r\n }\r\n\r\n // Check for trailing arguments\r\n if (opts.trailing.length) {\r\n stderr.write(colorsUtil.stderr.yellow(\"WARN: \") + \"Unsupported trailing arguments: \" + opts.trailing.join(\" \") + EOL);\r\n }\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(colorsUtil.stderr.red(\"ERROR: \") + err.stack.replace(/^ERROR: /i, \"\") + 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 || !argv.length) {\r\n var out = args.help ? stdout : stderr;\r\n var color = args.help ? colorsUtil.stdout : colorsUtil.stderr;\r\n out.write([\r\n color.white(\"SYNTAX\"),\r\n \" \" + color.cyan(\"asc\") + \" [entryFile ...] [options]\",\r\n \"\",\r\n color.white(\"EXAMPLES\"),\r\n \" \" + color.cyan(\"asc\") + \" hello.ts\",\r\n \" \" + color.cyan(\"asc\") + \" hello.ts -b hello.wasm -t hello.wat\",\r\n \" \" + color.cyan(\"asc\") + \" hello1.ts hello2.ts -b -O > hello.wasm\",\r\n \"\",\r\n color.white(\"OPTIONS\"),\r\n ].concat(\r\n optionsUtil.help(exports.options, 24, EOL)\r\n ).join(EOL) + EOL);\r\n return callback(null);\r\n }\r\n\r\n // I/O must be specified if not present in the environment\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 // Set up base directory\r\n const baseDir = args.baseDir ? path.resolve(args.baseDir) : \".\";\r\n\r\n // Set up transforms\r\n const transforms = [];\r\n if (args.transform) {\r\n args.transform.forEach(transform =>\r\n transforms.push(\r\n require(\r\n path.isAbsolute(transform = transform.trim())\r\n ? transform\r\n : path.join(process.cwd(), transform)\r\n )\r\n )\r\n );\r\n }\r\n function applyTransform(name, ...args) {\r\n transforms.forEach(transform => {\r\n if (typeof transform[name] === \"function\") transform[name](...args);\r\n });\r\n }\r\n\r\n // Begin parsing\r\n var parser = null;\r\n\r\n // Include library files\r\n if (!args.noLib) {\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 } else { // always include builtins\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n exports.libraryFiles[\"builtins\"],\r\n exports.libraryPrefix + \"builtins.ts\",\r\n false,\r\n parser\r\n );\r\n });\r\n }\r\n const customLibDirs = [];\r\n if (args.lib) {\r\n let lib = args.lib;\r\n if (typeof lib === \"string\") lib = lib.split(\",\");\r\n Array.prototype.push.apply(customLibDirs, 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 = argv.length; i < k; ++i) {\r\n const filename = argv[i];\r\n\r\n let sourcePath = String(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 applyTransform(\"afterParse\", parser);\r\n\r\n // Finish parsing\r\n const program = assemblyscript.finishParsing(parser);\r\n\r\n // Set up optimization levels\r\n var optimizeLevel = 0;\r\n var shrinkLevel = 0;\r\n if (args.optimize) {\r\n optimizeLevel = exports.defaultOptimizeLevel;\r\n shrinkLevel = exports.defaultShrinkLevel;\r\n }\r\n if (typeof args.optimizeLevel === \"number\") {\r\n optimizeLevel = args.optimizeLevel;\r\n }\r\n if (typeof args.shrinkLevel === \"number\") {\r\n shrinkLevel = args.shrinkLevel;\r\n }\r\n optimizeLevel = Math.min(Math.max(optimizeLevel, 0), 3);\r\n shrinkLevel = Math.min(Math.max(shrinkLevel, 0), 2);\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.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 assemblyscript.setOptimizeLevelHints(compilerOptions, optimizeLevel, shrinkLevel);\r\n\r\n if (!args.noLib) {\r\n // Initialize default aliases\r\n assemblyscript.setGlobalAlias(compilerOptions, \"Math\", \"NativeMath\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"Mathf\", \"NativeMathf\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"abort\", \"~lib/env/abort\");\r\n assemblyscript.setGlobalAlias(compilerOptions, \"trace\", \"~lib/env/trace\");\r\n }\r\n\r\n // Add or override aliases if specified\r\n if (args.use) {\r\n let aliases = args.use;\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) 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 // Implicitly run costly non-LLVM optimizations on -O3 or -Oz\r\n // see: https://github.com/WebAssembly/binaryen/pull/1596\r\n if (optimizeLevel >= 3 || shrinkLevel >= 2) optimizeLevel = 4;\r\n\r\n module.setOptimizeLevel(optimizeLevel);\r\n module.setShrinkLevel(shrinkLevel);\r\n module.setDebugInfo(!args.noDebug);\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 || shrinkLevel > 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 mkdirp(path.dirname(filename));\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 = fs.readdirSync(dirname).filter(file => /^(?!.*\\.d\\.ts$).*\\.ts$/.test(file));\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\nvar argumentSubstitutions = {\r\n \"-O\" : [ \"--optimize\" ],\r\n \"-Os\" : [ \"--optimize\", \"--shrinkLevel\", \"1\" ],\r\n \"-Oz\" : [ \"--optimize\", \"--shrinkLevel\", \"2\" ],\r\n \"-O0\" : [ \"--optimizeLevel\", \"0\", \"--shrinkLevel\", \"0\" ],\r\n \"-O0s\": [ \"--optimizeLevel\", \"0\", \"--shrinkLevel\", \"1\" ],\r\n \"-O0z\": [ \"--optimizeLevel\", \"0\", \"--shrinkLevel\", \"2\" ],\r\n \"-O1\" : [ \"--optimizeLevel\", \"1\", \"--shrinkLevel\", \"0\" ],\r\n \"-O1s\": [ \"--optimizeLevel\", \"1\", \"--shrinkLevel\", \"1\" ],\r\n \"-O1z\": [ \"--optimizeLevel\", \"1\", \"--shrinkLevel\", \"2\" ],\r\n \"-O2\" : [ \"--optimizeLevel\", \"2\", \"--shrinkLevel\", \"0\" ],\r\n \"-O2s\": [ \"--optimizeLevel\", \"2\", \"--shrinkLevel\", \"1\" ],\r\n \"-O2z\": [ \"--optimizeLevel\", \"2\", \"--shrinkLevel\", \"2\" ],\r\n \"-O3\" : [ \"--optimizeLevel\", \"3\", \"--shrinkLevel\", \"0\" ],\r\n \"-O3s\": [ \"--optimizeLevel\", \"3\", \"--shrinkLevel\", \"1\" ],\r\n \"-O3z\": [ \"--optimizeLevel\", \"3\", \"--shrinkLevel\", \"2\" ],\r\n};\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 if (stderr) {\r\n stderr.write(\r\n assemblyscript.formatDiagnostic(diagnostic, stderr.isTTY, true) +\r\n EOL + EOL\r\n );\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\n/** Formats a high resolution time to a human readable string. */\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.reset = function() {\r\n stream.length = 0;\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 for syntax highlighting etc. */\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","\"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","var proc = typeof process !== \"undefined\" && process || {};\r\nvar isCI = proc.env && \"CI\" in proc.env; // doesn't work when bundled because 'process' is a mock\r\n\r\nfunction from(stream, base) {\r\n var colors = base || {};\r\n colors.supported = (stream && !!stream.isTTY) || isCI;\r\n colors.gray = text => colors.supported ? exports.GRAY + text + exports.RESET : text;\r\n colors.red = text => colors.supported ? exports.RED + text + exports.RESET : text;\r\n colors.green = text => colors.supported ? exports.GREEN + text + exports.RESET : text;\r\n colors.yellow = text => colors.supported ? exports.YELLOW + text + exports.RESET : text;\r\n colors.blue = text => colors.supported ? exports.BLUE + text + exports.RESET : text;\r\n colors.magenta = text => colors.supported ? exports.MAGENTA + text + exports.RESET : text;\r\n colors.cyan = text => colors.supported ? exports.CYAN + text + exports.RESET : text;\r\n colors.white = text => colors.supported ? exports.WHITE + text + exports.RESET : text;\r\n return colors;\r\n}\r\n\r\nexports.stdout = from(proc.stdout, exports);\r\nexports.stderr = from(proc.stderr);\r\nexports.from = from;\r\n\r\nexports.GRAY = \"\\u001b[90m\";\r\nexports.RED = \"\\u001b[91m\";\r\nexports.GREEN = \"\\u001b[92m\";\r\nexports.YELLOW = \"\\u001b[93m\";\r\nexports.BLUE = \"\\u001b[94m\";\r\nexports.MAGENTA = \"\\u001b[95m\";\r\nexports.CYAN = \"\\u001b[96m\";\r\nexports.WHITE = \"\\u001b[97m\";\r\nexports.RESET = \"\\u001b[0m\";\r\n","// type | meaning\r\n// -----|---------------\r\n// b | boolean\r\n// i | integer\r\n// f | float\r\n// s | string\r\n// I | integer array\r\n// F | float array\r\n// S | string array\r\n\r\n/** Parses the specified command line arguments according to the given configuration. */\r\nfunction parse(argv, config) {\r\n var options = {};\r\n var unknown = [];\r\n var arguments = [];\r\n var trailing = [];\r\n\r\n // make an alias map and initialize defaults\r\n var aliases = {};\r\n Object.keys(config).forEach(key => {\r\n var option = config[key];\r\n if (option.alias != null) {\r\n if (typeof option.alias === \"string\") aliases[option.alias] = key;\r\n else if (Array.isArray(option.alias)) option.alias.forEach(alias => aliases[alias] = key);\r\n }\r\n if (option.default != null) options[key] = option.default;\r\n });\r\n\r\n // iterate over argv\r\n for (var i = 0, k = (argv = argv.slice()).length; i < k; ++i) {\r\n let arg = argv[i];\r\n if (arg == \"--\") { ++i; break; }\r\n let match = /^(?:(\\-\\w)(?:=(.*))?|(\\-\\-\\w{2,})(?:=(.*))?)$/.exec(arg), option, key;\r\n if (match) {\r\n if (config[arg]) option = config[key = arg]; // exact\r\n else if (match[1] != null) { // alias\r\n option = config[key = aliases[match[1].substring(1)]];\r\n if (option && match[2] != null) argv[i--] = match[2];\r\n } else if (match[3] != null) { // full\r\n option = config[key = match[3].substring(2)];\r\n if (option && match[4] != null) argv[i--] = match[4];\r\n }\r\n } else {\r\n if (arg.charCodeAt(0) == 45) option = config[key = arg]; // exact\r\n else { arguments.push(arg); continue; } // argument\r\n }\r\n if (option) {\r\n if (option.type == null || option.type === \"b\") options[key] = true; // flag\r\n else {\r\n if (i + 1 < argv.length && argv[i + 1].charCodeAt(0) != 45) { // present\r\n switch (option.type) {\r\n case \"i\": options[key] = parseInt(argv[++i], 10); break;\r\n case \"I\": options[key] = (options[key] || []).concat(parseInt(argv[++i], 10)); break;\r\n case \"f\": options[key] = parseFloat(argv[++i]); break;\r\n case \"F\": options[key] = (options[key] || []).concat(parseFloat(argv[++i])); break;\r\n case \"s\": options[key] = String(argv[++i]); break;\r\n case \"S\": options[key] = (options[key] || []).concat(argv[++i].split(\",\")); break;\r\n default: unknown.push(arg); --i;\r\n }\r\n } else { // omitted\r\n switch (option.type) {\r\n case \"i\":\r\n case \"f\": options[key] = option.default || 0; break;\r\n case \"s\": options[key] = option.default || \"\"; break;\r\n case \"I\":\r\n case \"F\":\r\n case \"S\": options[key] = options.default || []; break;\r\n default: unknown.push(arg);\r\n }\r\n }\r\n }\r\n if (option.value) Object.keys(option.value).forEach(k => options[k] = option.value[k]);\r\n } else unknown.push(arg);\r\n }\r\n while (i < k) trailing.push(argv[i++]); // trailing\r\n\r\n return { options, unknown, arguments, trailing };\r\n}\r\n\r\nexports.parse = parse;\r\n\r\n/** Generates the help text for the specified configuration. */\r\nfunction help(config, options) {\r\n if (!options) options = {};\r\n var indent = options.indent || 2;\r\n var padding = options.padding || 24;\r\n var eol = options.eol || \"\\n\";\r\n var sb = [];\r\n Object.keys(config).forEach(key => {\r\n var option = config[key];\r\n if (option.description == null) return;\r\n var text = \"\";\r\n while (text.length < indent) text += \" \";\r\n text += \"--\" + key;\r\n if (option.alias) text += \", -\" + option.alias;\r\n while (text.length < padding) text += \" \";\r\n if (Array.isArray(option.description)) {\r\n sb.push(text + option.description[0] + option.description.slice(1).map(line => {\r\n for (let i = 0; i < padding; ++i) line = \" \" + line;\r\n return eol + line;\r\n }).join(\"\"));\r\n } else sb.push(text + option.description);\r\n });\r\n return sb.join(eol);\r\n}\r\n\r\nexports.help = help;\r\n","/*\r\nCopyright 2010 James Halliday (mail@substack.net)\r\n\r\nThis project is free software released under the MIT/X11 license:\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n*/\r\n\r\nvar path = require(\"path\");\r\nvar fs = require(\"fs\");\r\nvar _0777 = parseInt(\"0777\", 8);\r\n\r\nmodule.exports = function mkdirp(p, opts, made) {\r\n if (!opts || typeof opts !== \"object\") {\r\n opts = { mode: opts };\r\n }\r\n var mode = opts.mode;\r\n if (mode === undefined) {\r\n mode = _0777 & (~process.umask());\r\n }\r\n if (!made) made = null;\r\n p = path.resolve(p);\r\n try {\r\n fs.mkdirSync(p, mode);\r\n made = made || p;\r\n } catch (err0) {\r\n switch (err0.code) {\r\n case \"ENOENT\":\r\n made = mkdirp(path.dirname(p), opts, made);\r\n mkdirp(p, opts, made);\r\n break;\r\n default:\r\n var stat;\r\n try {\r\n stat = fs.statSync(p);\r\n } catch (err1) {\r\n throw err0;\r\n }\r\n if (!stat.isDirectory()) throw err0;\r\n break;\r\n }\r\n }\r\n return made;\r\n};\r\n","if(typeof __WEBPACK_EXTERNAL_MODULE__10__ === 'undefined') {var e = new Error(\"Cannot find module 'assemblyscript'\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__10__;","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 12;","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}"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 1006e8ef..39f4c2ff 100644 --- a/dist/assemblyscript.js +++ b/dist/assemblyscript.js @@ -1,3 +1,3 @@ -!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,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},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=12)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.COMPILED=2097152]="COMPILED",e[e.INLINED=4194304]="INLINED",e[e.SCOPED=8388608]="SCOPED",e[e.TRAMPOLINE=16777216]="TRAMPOLINE",e[e.VIRTUAL=33554432]="VIRTUAL",e[e.MAIN=67108864]="MAIN",e[e.QUOTED=134217728]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),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,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(2),s=r(10);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 l=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 p(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?c.substring(l+1):c,o.statements=new Array,o.range=new a.Range(o,0,r.length),o.text=r,o}return n(t,e),Object.defineProperty(t.prototype,"isEntry",{get:function(){return this.sourceKind==q.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==q.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=Z;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.decorators=null,t.cachedProgramLevelInternalName=null,t.cachedFileLevelInternalName=null,t}return n(t,e),Object.defineProperty(t.prototype,"programLevelInternalName",{get:function(){return this.cachedProgramLevelInternalName||(this.cachedProgramLevelInternalName=Re(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=Re(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(j);t.DeclarationStatement=J;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(J);t.VariableLikeDeclarationStatement=$;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(j);t.BlockStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(j);t.BreakStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CLASSDECLARATION,t}return n(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.ClassDeclaration=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(j);t.ContinueStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(j);t.DoStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(j);t.EmptyStatement=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(J);t.EnumDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(J);t.EnumValueDeclaration=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return n(t,e),t}(c);t.ExportImportStatement=ce;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return n(t,e),t}(c);t.ExportMember=le;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(j);t.ExportStatement=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(j);t.ExpressionStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return n(t,e),t}($);t.FieldDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(j);t.ForStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return n(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=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(j);t.IfStatement=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return n(t,e),t}(J);t.ImportDeclaration=ge;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return n(t,e),t}(j);t.ImportStatement=ye;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(re);t.InterfaceDeclaration=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(_e);t.MethodDeclaration=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return n(t,e),t}(J);t.NamespaceDeclaration=Te;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(j);t.ReturnStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return n(t,e),t}(c);t.SwitchCase=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(j);t.SwitchStatement=Ae;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(j);t.ThrowStatement=Ce;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(j);t.TryStatement=Ne;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(J);t.TypeDeclaration=Oe;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return n(t,e),t}($);t.VariableDeclaration=Se;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(j);t.VariableStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(j);t.VoidStatement=be;var ke=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(j);function Re(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=s.VARIABLEDECLARATION||n.kind!=s.VARIABLE||(n=n.parent))?n.kind==s.CLASSDECLARATION?Re(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?Re(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function xe(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function Fe(e,t){for(var r=0,n=e.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),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 s,o=r(0),c=r(1),l=r(7),p=r(3),u=r(5),h=r(11),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function g(e,t){switch(assert(t.length),e){case p.DecoratorKind.OPERATOR:case p.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return s.INDEXED_GET;if("[]="==t)return s.INDEXED_SET;break;case 123:if("{}"==t)return s.UNCHECKED_INDEXED_GET;if("{}="==t)return s.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return s.ADD;break;case 45:if("-"==t)return s.SUB;break;case 42:if("*"==t)return s.MUL;if("**"==t)return s.POW;break;case 47:if("/"==t)return s.DIV;break;case 37:if("%"==t)return s.REM;break;case 38:if("&"==t)return s.BITWISE_AND;break;case 124:if("|"==t)return s.BITWISE_OR;break;case 94:if("^"==t)return s.BITWISE_XOR;break;case 61:if("=="==t)return s.EQ;break;case 33:if("!="==t)return s.NE;break;case 62:if(">"==t)return s.GT;if(">="==t)return s.GE;if(">>"==t)return s.BITWISE_SHR;if(">>>"==t)return s.BITWISE_SHR_U;break;case 60:if("<"==t)return s.LT;if("<="==t)return s.LE;if("<<"==t)return s.BITWISE_SHL}break;case p.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return s.PLUS;if("++"==t)return s.PREFIX_INC;break;case 45:if("-"==t)return s.MINUS;if("--"==t)return s.PREFIX_DEC;break;case 33:if("!"==t)return s.NOT;break;case 126:if("~"==t)return s.BITWISE_NOT}break;case p.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return s.POSTFIX_INC;break;case 45:if("--"==t)return s.POSTFIX_DEC}}return s.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.BITWISE_AND=11]="BITWISE_AND",e[e.BITWISE_OR=12]="BITWISE_OR",e[e.BITWISE_XOR=13]="BITWISE_XOR",e[e.BITWISE_SHL=14]="BITWISE_SHL",e[e.BITWISE_SHR=15]="BITWISE_SHR",e[e.BITWISE_SHR_U=16]="BITWISE_SHR_U",e[e.EQ=17]="EQ",e[e.NE=18]="NE",e[e.GT=19]="GT",e[e.GE=20]="GE",e[e.LT=21]="LT",e[e.LE=22]="LE",e[e.PLUS=23]="PLUS",e[e.MINUS=24]="MINUS",e[e.NOT=25]="NOT",e[e.BITWISE_NOT=26]="BITWISE_NOT",e[e.PREFIX_INC=27]="PREFIX_INC",e[e.PREFIX_DEC=28]="PREFIX_DEC",e[e.POSTFIX_INC=29]="POSTFIX_INC",e[e.POSTFIX_DEC=30]="POSTFIX_DEC"}(s=t.OperatorKind||(t.OperatorKind={}));var y,E,f=new Map,T=function(e){function t(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=f,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayBufferInstance=null,r.arrayPrototype=null,r.stringInstance=null,r.mainFunction=null,r.abortInstance=null,r.memoryAllocateInstance=null,r.hasGC=!1,r.gcAllocateInstance=null,r.gcLinkInstance=null,r.gcMarkInstance=null,r.gcHeaderSize=0,r.gcHookOffset=0,r.resolver=new h.Resolver(r),r.sources=[],r}return n(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r=0),assert(null!=e.type),e.type.toNativeType()){case 1:t=this.tempI32s||(this.tempI32s=[]);break;case 2:t=this.tempI64s||(this.tempI64s=[]);break;case 3:t=this.tempF32s||(this.tempF32s=[]);break;case 4: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 1:r=this.tempI32s||(this.tempI32s=[]);break;case 2:r=this.tempI64s||(this.tempI64s=[]);break;case 3:r=this.tempF32s||(this.tempF32s=[]);break;case 4: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=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|=2047&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritConditional=function(e){e.is(1)&&this.set(64),e.is(4)&&this.set(128),e.is(8)&&e.breakLabel==this.breakLabel&&this.set(256),e.is(16)&&e.continueLabel==this.continueLabel&&this.set(512),e.is(32)&&this.set(1024)},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&63,this.flags|=1984&e.flags,this.flags|=1984&t.flags,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(u.getBinaryLeft(e),t)&&!(u.getExpressionId(r=u.getBinaryRight(e))==u.ExpressionId.Const&&u.getConstValueI32(r)>=a);case u.BinaryOp.DivU32:case u.BinaryOp.RemI32:case u.BinaryOp.RemU32:return this.canOverflow(u.getBinaryLeft(e),t)||this.canOverflow(u.getBinaryRight(e),t)}break;case u.ExpressionId.Unary:switch(u.getUnaryOp(e)){case u.UnaryOp.EqzI32:case u.UnaryOp.EqzI64:return!1;case u.UnaryOp.ClzI32:case u.UnaryOp.CtzI32:case u.UnaryOp.PopcntI32:return t.size<7}break;case u.ExpressionId.Const:var s=0;switch(u.getExpressionType(e)){case 1:s=u.getConstValueI32(e);break;case 2:s=u.getConstValueI64Low(e);break;case 3:s=i32(u.getConstValueF32(e));break;case 4:s=i32(u.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 u.ExpressionId.Load:var o=void 0;switch(u.getLoadBytes(e)){case 1:o=u.isLoadSigned(e)?l.Type.i8:l.Type.u8;break;case 2:o=u.isLoadSigned(e)?l.Type.i16:l.Type.u16;break;default:o=u.isLoadSigned(e)?l.Type.i32:l.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),p=u.getBlockChild(e,c-1);return this.canOverflow(p,t)}break;case u.ExpressionId.If:return this.canOverflow(u.getIfTrue(e),t)||this.canOverflow(assert(u.getIfFalse(e)),t);case u.ExpressionId.Select:return this.canOverflow(u.getSelectThen(e),t)||this.canOverflow(u.getSelectElse(e),t);case u.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(u.getCallTarget(e))));assert(d.kind==y.FUNCTION);var _=d.signature.returnType;return!d.flow.is(2)||z(_,t);case u.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 z(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=K},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(9);!function(e){e[e.None=0]="None",e[e.I32=1]="I32",e[e.I64=2]="I64",e[e.F32=3]="F32",e[e.F64=4]="F64",e[e.Unreachable=5]="Unreachable",e[e.Auto=-1]="Auto"}(t.NativeType||(t.NativeType={})),function(e){e[e.Invalid=_BinaryenInvalidId()]="Invalid",e[e.Block=_BinaryenBlockId()]="Block",e[e.If=_BinaryenIfId()]="If",e[e.Loop=_BinaryenLoopId()]="Loop",e[e.Break=_BinaryenBreakId()]="Break",e[e.Switch=_BinaryenSwitchId()]="Switch",e[e.Call=_BinaryenCallId()]="Call",e[e.CallImport=_BinaryenCallImportId()]="CallImport",e[e.CallIndirect=_BinaryenCallIndirectId()]="CallIndirect",e[e.GetLocal=_BinaryenGetLocalId()]="GetLocal",e[e.SetLocal=_BinaryenSetLocalId()]="SetLocal",e[e.GetGlobal=_BinaryenGetGlobalId()]="GetGlobal",e[e.SetGlobal=_BinaryenSetGlobalId()]="SetGlobal",e[e.Load=_BinaryenLoadId()]="Load",e[e.Store=_BinaryenStoreId()]="Store",e[e.Const=_BinaryenConstId()]="Const",e[e.Unary=_BinaryenUnaryId()]="Unary",e[e.Binary=_BinaryenBinaryId()]="Binary",e[e.Select=_BinaryenSelectId()]="Select",e[e.Drop=_BinaryenDropId()]="Drop",e[e.Return=_BinaryenReturnId()]="Return",e[e.Host=_BinaryenHostId()]="Host",e[e.Nop=_BinaryenNopId()]="Nop",e[e.Unreachable=_BinaryenUnreachableId()]="Unreachable",e[e.AtomicCmpxchg=_BinaryenAtomicCmpxchgId()]="AtomicCmpxchg",e[e.AtomicRMW=_BinaryenAtomicRMWId()]="AtomicRMW",e[e.AtomicWait=_BinaryenAtomicWaitId()]="AtomicWait",e[e.AtomicWake=_BinaryenAtomicWakeId()]="AtomicWake"}(n=t.ExpressionId||(t.ExpressionId={})),function(e){e[e.ClzI32=_BinaryenClzInt32()]="ClzI32",e[e.CtzI32=_BinaryenCtzInt32()]="CtzI32",e[e.PopcntI32=_BinaryenPopcntInt32()]="PopcntI32",e[e.NegF32=_BinaryenNegFloat32()]="NegF32",e[e.AbsF32=_BinaryenAbsFloat32()]="AbsF32",e[e.CeilF32=_BinaryenCeilFloat32()]="CeilF32",e[e.FloorF32=_BinaryenFloorFloat32()]="FloorF32",e[e.TruncF32=_BinaryenTruncFloat32()]="TruncF32",e[e.NearestF32=_BinaryenNearestFloat32()]="NearestF32",e[e.SqrtF32=_BinaryenSqrtFloat32()]="SqrtF32",e[e.EqzI32=_BinaryenEqZInt32()]="EqzI32",e[e.ClzI64=_BinaryenClzInt64()]="ClzI64",e[e.CtzI64=_BinaryenCtzInt64()]="CtzI64",e[e.PopcntI64=_BinaryenPopcntInt64()]="PopcntI64",e[e.NegF64=_BinaryenNegFloat64()]="NegF64",e[e.AbsF64=_BinaryenAbsFloat64()]="AbsF64",e[e.CeilF64=_BinaryenCeilFloat64()]="CeilF64",e[e.FloorF64=_BinaryenFloorFloat64()]="FloorF64",e[e.TruncF64=_BinaryenTruncFloat64()]="TruncF64",e[e.NearestF64=_BinaryenNearestFloat64()]="NearestF64",e[e.SqrtF64=_BinaryenSqrtFloat64()]="SqrtF64",e[e.EqzI64=_BinaryenEqZInt64()]="EqzI64",e[e.ExtendI32=_BinaryenExtendSInt32()]="ExtendI32",e[e.ExtendU32=_BinaryenExtendUInt32()]="ExtendU32",e[e.WrapI64=_BinaryenWrapInt64()]="WrapI64",e[e.TruncF32ToI32=_BinaryenTruncSFloat32ToInt32()]="TruncF32ToI32",e[e.TruncF32ToI64=_BinaryenTruncSFloat32ToInt64()]="TruncF32ToI64",e[e.TruncF32ToU32=_BinaryenTruncUFloat32ToInt32()]="TruncF32ToU32",e[e.TruncF32ToU64=_BinaryenTruncUFloat32ToInt64()]="TruncF32ToU64",e[e.TruncF64ToI32=_BinaryenTruncSFloat64ToInt32()]="TruncF64ToI32",e[e.TruncF64ToI64=_BinaryenTruncSFloat64ToInt64()]="TruncF64ToI64",e[e.TruncF64ToU32=_BinaryenTruncUFloat64ToInt32()]="TruncF64ToU32",e[e.TruncF64ToU64=_BinaryenTruncUFloat64ToInt64()]="TruncF64ToU64",e[e.ReinterpretF32=_BinaryenReinterpretFloat32()]="ReinterpretF32",e[e.ReinterpretF64=_BinaryenReinterpretFloat64()]="ReinterpretF64",e[e.ConvertI32ToF32=_BinaryenConvertSInt32ToFloat32()]="ConvertI32ToF32",e[e.ConvertI32ToF64=_BinaryenConvertSInt32ToFloat64()]="ConvertI32ToF64",e[e.ConvertU32ToF32=_BinaryenConvertUInt32ToFloat32()]="ConvertU32ToF32",e[e.ConvertU32ToF64=_BinaryenConvertUInt32ToFloat64()]="ConvertU32ToF64",e[e.ConvertI64ToF32=_BinaryenConvertSInt64ToFloat32()]="ConvertI64ToF32",e[e.ConvertI64ToF64=_BinaryenConvertSInt64ToFloat64()]="ConvertI64ToF64",e[e.ConvertU64ToF32=_BinaryenConvertUInt64ToFloat32()]="ConvertU64ToF32",e[e.ConvertU64ToF64=_BinaryenConvertUInt64ToFloat64()]="ConvertU64ToF64",e[e.PromoteF32=_BinaryenPromoteFloat32()]="PromoteF32",e[e.DemoteF64=_BinaryenDemoteFloat64()]="DemoteF64",e[e.ReinterpretI32=_BinaryenReinterpretInt32()]="ReinterpretI32",e[e.ReinterpretI64=_BinaryenReinterpretInt64()]="ReinterpretI64",e[e.ExtendI8ToI32=_BinaryenExtendS8Int32()]="ExtendI8ToI32",e[e.ExtendI16ToI32=_BinaryenExtendS16Int32()]="ExtendI16ToI32",e[e.ExtendI8ToI64=_BinaryenExtendS8Int64()]="ExtendI8ToI64",e[e.ExtendI16ToI64=_BinaryenExtendS16Int64()]="ExtendI16ToI64",e[e.ExtendI32ToI64=_BinaryenExtendS32Int64()]="ExtendI32ToI64"}(t.UnaryOp||(t.UnaryOp={})),function(e){e[e.AddI32=_BinaryenAddInt32()]="AddI32",e[e.SubI32=_BinaryenSubInt32()]="SubI32",e[e.MulI32=_BinaryenMulInt32()]="MulI32",e[e.DivI32=_BinaryenDivSInt32()]="DivI32",e[e.DivU32=_BinaryenDivUInt32()]="DivU32",e[e.RemI32=_BinaryenRemSInt32()]="RemI32",e[e.RemU32=_BinaryenRemUInt32()]="RemU32",e[e.AndI32=_BinaryenAndInt32()]="AndI32",e[e.OrI32=_BinaryenOrInt32()]="OrI32",e[e.XorI32=_BinaryenXorInt32()]="XorI32",e[e.ShlI32=_BinaryenShlInt32()]="ShlI32",e[e.ShrU32=_BinaryenShrUInt32()]="ShrU32",e[e.ShrI32=_BinaryenShrSInt32()]="ShrI32",e[e.RotlI32=_BinaryenRotLInt32()]="RotlI32",e[e.RotrI32=_BinaryenRotRInt32()]="RotrI32",e[e.EqI32=_BinaryenEqInt32()]="EqI32",e[e.NeI32=_BinaryenNeInt32()]="NeI32",e[e.LtI32=_BinaryenLtSInt32()]="LtI32",e[e.LtU32=_BinaryenLtUInt32()]="LtU32",e[e.LeI32=_BinaryenLeSInt32()]="LeI32",e[e.LeU32=_BinaryenLeUInt32()]="LeU32",e[e.GtI32=_BinaryenGtSInt32()]="GtI32",e[e.GtU32=_BinaryenGtUInt32()]="GtU32",e[e.GeI32=_BinaryenGeSInt32()]="GeI32",e[e.GeU32=_BinaryenGeUInt32()]="GeU32",e[e.AddI64=_BinaryenAddInt64()]="AddI64",e[e.SubI64=_BinaryenSubInt64()]="SubI64",e[e.MulI64=_BinaryenMulInt64()]="MulI64",e[e.DivI64=_BinaryenDivSInt64()]="DivI64",e[e.DivU64=_BinaryenDivUInt64()]="DivU64",e[e.RemI64=_BinaryenRemSInt64()]="RemI64",e[e.RemU64=_BinaryenRemUInt64()]="RemU64",e[e.AndI64=_BinaryenAndInt64()]="AndI64",e[e.OrI64=_BinaryenOrInt64()]="OrI64",e[e.XorI64=_BinaryenXorInt64()]="XorI64",e[e.ShlI64=_BinaryenShlInt64()]="ShlI64",e[e.ShrU64=_BinaryenShrUInt64()]="ShrU64",e[e.ShrI64=_BinaryenShrSInt64()]="ShrI64",e[e.RotlI64=_BinaryenRotLInt64()]="RotlI64",e[e.RotrI64=_BinaryenRotRInt64()]="RotrI64",e[e.EqI64=_BinaryenEqInt64()]="EqI64",e[e.NeI64=_BinaryenNeInt64()]="NeI64",e[e.LtI64=_BinaryenLtSInt64()]="LtI64",e[e.LtU64=_BinaryenLtUInt64()]="LtU64",e[e.LeI64=_BinaryenLeSInt64()]="LeI64",e[e.LeU64=_BinaryenLeUInt64()]="LeU64",e[e.GtI64=_BinaryenGtSInt64()]="GtI64",e[e.GtU64=_BinaryenGtUInt64()]="GtU64",e[e.GeI64=_BinaryenGeSInt64()]="GeI64",e[e.GeU64=_BinaryenGeUInt64()]="GeU64",e[e.AddF32=_BinaryenAddFloat32()]="AddF32",e[e.SubF32=_BinaryenSubFloat32()]="SubF32",e[e.MulF32=_BinaryenMulFloat32()]="MulF32",e[e.DivF32=_BinaryenDivFloat32()]="DivF32",e[e.CopysignF32=_BinaryenCopySignFloat32()]="CopysignF32",e[e.MinF32=_BinaryenMinFloat32()]="MinF32",e[e.MaxF32=_BinaryenMaxFloat32()]="MaxF32",e[e.EqF32=_BinaryenEqFloat32()]="EqF32",e[e.NeF32=_BinaryenNeFloat32()]="NeF32",e[e.LtF32=_BinaryenLtFloat32()]="LtF32",e[e.LeF32=_BinaryenLeFloat32()]="LeF32",e[e.GtF32=_BinaryenGtFloat32()]="GtF32",e[e.GeF32=_BinaryenGeFloat32()]="GeF32",e[e.AddF64=_BinaryenAddFloat64()]="AddF64",e[e.SubF64=_BinaryenSubFloat64()]="SubF64",e[e.MulF64=_BinaryenMulFloat64()]="MulF64",e[e.DivF64=_BinaryenDivFloat64()]="DivF64",e[e.CopysignF64=_BinaryenCopySignFloat64()]="CopysignF64",e[e.MinF64=_BinaryenMinFloat64()]="MinF64",e[e.MaxF64=_BinaryenMaxFloat64()]="MaxF64",e[e.EqF64=_BinaryenEqFloat64()]="EqF64",e[e.NeF64=_BinaryenNeFloat64()]="NeF64",e[e.LtF64=_BinaryenLtFloat64()]="LtF64",e[e.LeF64=_BinaryenLeFloat64()]="LeF64",e[e.GtF64=_BinaryenGtFloat64()]="GtF64",e[e.GeF64=_BinaryenGeFloat64()]="GeF64"}(t.BinaryOp||(t.BinaryOp={})),function(e){e[e.PageSize=_BinaryenPageSize()]="PageSize",e[e.CurrentMemory=_BinaryenCurrentMemory()]="CurrentMemory",e[e.GrowMemory=_BinaryenGrowMemory()]="GrowMemory",e[e.HasFeature=_BinaryenHasFeature()]="HasFeature"}(t.HostOp||(t.HostOp={})),function(e){e[e.Add=_BinaryenAtomicRMWAdd()]="Add",e[e.Sub=_BinaryenAtomicRMWSub()]="Sub",e[e.And=_BinaryenAtomicRMWAnd()]="And",e[e.Or=_BinaryenAtomicRMWOr()]="Or",e[e.Xor=_BinaryenAtomicRMWXor()]="Xor",e[e.Xchg=_BinaryenAtomicRMWXchg()]="Xchg"}(t.AtomicRMWOp||(t.AtomicRMWOp={}));var a=function(){function e(){}return e.create=function(t,r){var n=new e;return n.buffer=t,n.offset=r,n},e}();t.MemorySegment=a;var s=function(){function e(){this.cachedTemporaryName=0,this.hasTemporaryFunction=!1,this.cachedPrecomputeName=0,this.cachedPrecomputeNames=0}return e.create=function(){var t=new e;return t.ref=_BinaryenModuleCreate(),t.cachedByValue=memory.allocate(16),t},e.createFrom=function(t){var r=c(t);try{var n=new e;return n.ref=_BinaryenModuleRead(r,t.length),n.cachedByValue=memory.allocate(24),n}finally{memory.free(changetype(r))}},e.prototype.addFunctionType=function(e,t,r){var n=u(e),i=l(r);try{return _BinaryenAddFunctionType(this.ref,n,t,i,r?r.length:0)}finally{memory.free(i),memory.free(n)}},e.prototype.getFunctionTypeBySignature=function(e,t){var r=l(t);try{return _BinaryenGetFunctionTypeBySignature(this.ref,e,r,t?t.length:0)}finally{memory.free(r)}},e.prototype.removeFunctionType=function(e){var t=u(e);try{_BinaryenRemoveFunctionType(this.ref,t)}finally{memory.free(t)}},e.prototype.createI32=function(e){var t=this.cachedByValue;return _BinaryenLiteralInt32(t,e),_BinaryenConst(this.ref,t)},e.prototype.createI64=function(e,t){void 0===t&&(t=0);var r=this.cachedByValue;return _BinaryenLiteralInt64(r,e,t),_BinaryenConst(this.ref,r)},e.prototype.createF32=function(e){var t=this.cachedByValue;return _BinaryenLiteralFloat32(t,e),_BinaryenConst(this.ref,t)},e.prototype.createF64=function(e){var t=this.cachedByValue;return _BinaryenLiteralFloat64(t,e),_BinaryenConst(this.ref,t)},e.prototype.createUnary=function(e,t){return _BinaryenUnary(this.ref,e,t)},e.prototype.createBinary=function(e,t,r){return _BinaryenBinary(this.ref,e,t,r)},e.prototype.createHost=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=null);var n=u(t),i=p(r);try{return _BinaryenHost(this.ref,e,n,i,r?r.length:0)}finally{memory.free(i),memory.free(n)}},e.prototype.createGetLocal=function(e,t){return _BinaryenGetLocal(this.ref,e,t)},e.prototype.createTeeLocal=function(e,t){return _BinaryenTeeLocal(this.ref,e,t)},e.prototype.createGetGlobal=function(e,t){var r=u(e);try{return _BinaryenGetGlobal(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createLoad=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenLoad(this.ref,e,t?1:0,i,e,n,r)},e.prototype.createStore=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenStore(this.ref,e,i,e,t,r,n)},e.prototype.createAtomicLoad=function(e,t,r,n){return void 0===n&&(n=0),_BinaryenAtomicLoad(this.ref,e,n,r,t)},e.prototype.createAtomicStore=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenAtomicStore(this.ref,e,i,t,r,n)},e.prototype.createAtomicRMW=function(e,t,r,n,i,a){return _BinaryenAtomicRMW(this.ref,e,t,r,n,i,a)},e.prototype.createAtomicCmpxchg=function(e,t,r,n,i,a){return _BinaryenAtomicCmpxchg(this.ref,e,t,r,n,i,a)},e.prototype.createAtomicWait=function(e,t,r,n){return _BinaryenAtomicWait(this.ref,e,t,r,n)},e.prototype.createAtomicWake=function(e,t){return _BinaryenAtomicWake(this.ref,e,t)},e.prototype.createSetLocal=function(e,t){return _BinaryenSetLocal(this.ref,e,t)},e.prototype.createSetGlobal=function(e,t){var r=u(e);try{return _BinaryenSetGlobal(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createBlock=function(e,t,r){void 0===r&&(r=0);var n=u(e),i=p(t);try{return _BinaryenBlock(this.ref,n,i,t.length,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createBreak=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=0);var n=u(e);try{return _BinaryenBreak(this.ref,n,t,r)}finally{memory.free(n)}},e.prototype.createDrop=function(e){return _BinaryenDrop(this.ref,e)},e.prototype.createLoop=function(e,t){var r=u(e);try{return _BinaryenLoop(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createIf=function(e,t,r){return void 0===r&&(r=0),_BinaryenIf(this.ref,e,t,r)},e.prototype.createNop=function(){return _BinaryenNop(this.ref)},e.prototype.createReturn=function(e){return void 0===e&&(e=0),_BinaryenReturn(this.ref,e)},e.prototype.createSelect=function(e,t,r){return _BinaryenSelect(this.ref,r,e,t)},e.prototype.createSwitch=function(e,t,r,n){void 0===n&&(n=0);for(var i=e.length,a=new Array(i),s=0;s=0;--s)memory.free(a[s])}},e.prototype.createCall=function(e,t,r){var n=u(e),i=p(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createCallImport=function(e,t,r){var n=u(e),i=p(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=p(t),i=u(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{memory.free(i),memory.free(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=u(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{memory.free(i)}},e.prototype.addFunction=function(e,t,r,n){var i=u(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{memory.free(a),memory.free(i)}},e.prototype.removeFunction=function(e){var t=u(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{memory.free(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=u(""));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{memory.free(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=u(e),n=u(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addTableExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addMemoryExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addGlobalExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.removeExport=function(e){var t=u(e);try{_BinaryenRemoveExport(this.ref,t)}finally{memory.free(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=u(e),a=u(t),s=u(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.addTableImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{memory.free(a),memory.free(i),memory.free(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{memory.free(a),memory.free(i),memory.free(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=u(e),a=u(t),s=u(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.removeImport=function(e){var t=u(e);try{_BinaryenRemoveImport(this.ref,t)}finally{memory.free(t)}},e.prototype.setMemory=function(e,t,r,n,a){void 0===a&&(a=null);for(var s=u(a),o=r.length,p=new Array(o),h=new Array(o),d=new Array(o),_=0;_=0;--_)memory.free(p[_]);memory.free(s)}},e.prototype.setFunctionTable=function(e){var t=p(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{memory.free(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.getOptimizeLevel=function(){return _BinaryenGetOptimizeLevel()},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.getShrinkLevel=function(){return _BinaryenGetShrinkLevel()},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)memory.free(n[i])}},e.prototype.precomputeExpression=function(e){var t=_BinaryenGetOptimizeLevel(),r=_BinaryenGetShrinkLevel(),n=_BinaryenGetDebugInfo();_BinaryenSetOptimizeLevel(4),_BinaryenSetShrinkLevel(0),_BinaryenSetDebugInfo(!1);var i=_BinaryenExpressionGetType(e),a=this.addTemporaryFunction(i,null,e),s=this.cachedPrecomputeNames;if(!s){var o=u("precompute");this.cachedPrecomputeName=o,this.cachedPrecomputeNames=s=l([o])}return _BinaryenFunctionRunPasses(a,this.ref,s,1),e=_BinaryenFunctionGetBody(a),this.removeTemporaryFunction(),_BinaryenSetOptimizeLevel(t),_BinaryenSetShrinkLevel(r),_BinaryenSetDebugInfo(n),e},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=u(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=h(t);var a=h(t+4);i=h(t+8);var s=new _;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 p(e){return l(e)}function u(e){if(null==e)return 0;for(var t=memory.allocate(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function h(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function d(e){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=o,t.readString=d;var _=function(){return function(){}}();t.BinaryModule=_,t.needsExplicitUnreachable=function e(t){switch(_BinaryenExpressionGetType(t)){case 1:case 2:case 3:case 4:return!1}switch(_BinaryenExpressionGetId(t)){case n.Unreachable:case n.Return:return!1;case n.Break:return 0!=_BinaryenBreakGetCondition(t);case n.Block:if(!_BinaryenBlockGetName(t)){var r=_BinaryenBlockGetNumChildren(t);return r>0&&e(_BinaryenBlockGetChild(t,r-1))}}return!0}},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);!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:return e.i8;case 1:return e.i16;case 11:case 2:return e.i32;case 12:case 3:return e.i64;case 4:return 64==this.size?e.isize64:e.isize32;case 5:return e.u8;case 6:return e.u16;case 7:return e.u32;case 8:return e.u64;case 9:return 64==this.size?e.usize64:e.usize32;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.isManaged=function(e){if(e.hasGC){var t=this.classReference;return null!==t&&!t.hasDecorator(n.DecoratorFlags.UNMANAGED)}return!1},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.nonNullableType=this,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)&&(!this.is(512)||e.is(512)))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){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return 1;case 3:case 8:return 2;case 4:case 9:return 64==this.size?2:1;case 11:return 3;case 12:return 4;case 13:return 0}},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=l&&u!=p?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";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a,s=r(1),o=r(3),c=r(2);function l(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return i.ABSTRACT;case"as":return i.AS;case"async":return i.ASYNC;case"await":return i.AWAIT}break;case 98:switch(e){case"break":return i.BREAK}break;case 99:switch(e){case"case":return i.CASE;case"catch":return i.CATCH;case"class":return i.CLASS;case"continue":return i.CONTINUE;case"const":return i.CONST;case"constructor":return i.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return i.DEBUGGER;case"declare":return i.DECLARE;case"default":return i.DEFAULT;case"delete":return i.DELETE;case"do":return i.DO}break;case 101:switch(e){case"else":return i.ELSE;case"enum":return i.ENUM;case"export":return i.EXPORT;case"extends":return i.EXTENDS}break;case 102:switch(e){case"false":return i.FALSE;case"finally":return i.FINALLY;case"for":return i.FOR;case"from":return i.FROM;case"function":return i.FUNCTION}break;case 103:switch(e){case"get":return i.GET}break;case 105:switch(e){case"if":return i.IF;case"implements":return i.IMPLEMENTS;case"import":return i.IMPORT;case"in":return i.IN;case"instanceof":return i.INSTANCEOF;case"interface":return i.INTERFACE;case"is":return i.IS}break;case 107:switch(e){case"keyof":return i.KEYOF}break;case 108:switch(e){case"let":return i.LET}break;case 109:switch(e){case"module":return i.MODULE}break;case 110:switch(e){case"namespace":return i.NAMESPACE;case"new":return i.NEW;case"null":return i.NULL}break;case 111:switch(e){case"of":return i.OF}break;case 112:switch(e){case"package":return i.PACKAGE;case"private":return i.PRIVATE;case"protected":return i.PROTECTED;case"public":return i.PUBLIC}break;case 114:switch(e){case"readonly":return i.READONLY;case"return":return i.RETURN}break;case 115:switch(e){case"set":return i.SET;case"static":return i.STATIC;case"super":return i.SUPER;case"switch":return i.SWITCH}break;case 116:switch(e){case"this":return i.THIS;case"throw":return i.THROW;case"true":return i.TRUE;case"try":return i.TRY;case"type":return i.TYPE;case"typeof":return i.TYPEOF}break;case 118:switch(e){case"var":return i.VAR;case"void":return i.VOID}break;case 119:switch(e){case"while":return i.WHILE;case"with":return i.WITH}break;case 121:switch(e){case"yield":return i.YIELD}}return i.INVALID}function p(e){switch(e){case i.ABSTRACT:case i.AS:case i.CONSTRUCTOR:case i.DECLARE:case i.DELETE:case i.FROM:case i.FOR:case i.GET:case i.IS:case i.KEYOF:case i.MODULE:case i.NAMESPACE:case i.READONLY:case i.SET:case i.TYPE:return!0;default:return!1}}!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(a=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=l,t.tokenIsAlsoIdentifier=p,t.operatorTokenToString=function(e){switch(e){case i.DELETE:return"delete";case i.IN:return"in";case i.INSTANCEOF:return"instanceof";case i.NEW:return"new";case i.TYPEOF:return"typeof";case i.VOID:return"void";case i.YIELD:return"yield";case i.DOT_DOT_DOT:return"...";case i.COMMA:return",";case i.LESSTHAN:return"<";case i.GREATERTHAN:return">";case i.LESSTHAN_EQUALS:return"<=";case i.GREATERTHAN_EQUALS:return">=";case i.EQUALS_EQUALS:return"==";case i.EXCLAMATION_EQUALS:return"!=";case i.EQUALS_EQUALS_EQUALS:return"===";case i.EXCLAMATION_EQUALS_EQUALS:return"!==";case i.PLUS:return"+";case i.MINUS:return"-";case i.ASTERISK_ASTERISK:return"**";case i.ASTERISK:return"*";case i.SLASH:return"/";case i.PERCENT:return"%";case i.PLUS_PLUS:return"++";case i.MINUS_MINUS:return"--";case i.LESSTHAN_LESSTHAN:return"<<";case i.GREATERTHAN_GREATERTHAN:return">>";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case i.AMPERSAND:return"&";case i.BAR:return"|";case i.CARET:return"^";case i.EXCLAMATION:return"!";case i.TILDE:return"~";case i.AMPERSAND_AMPERSAND:return"&&";case i.BAR_BAR:return"||";case i.EQUALS:return"=";case i.PLUS_EQUALS:return"+=";case i.MINUS_EQUALS:return"-=";case i.ASTERISK_EQUALS:return"*=";case i.ASTERISK_ASTERISK_EQUALS:return"**=";case i.SLASH_EQUALS:return"/=";case i.PERCENT_EQUALS:return"%=";case i.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case i.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case i.AMPERSAND_EQUALS:return"&=";case i.BAR_EQUALS:return"|=";case i.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.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)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),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),a=t;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";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=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}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),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 s,o=r(20),c=r(1),l=r(5),p=r(0),u=r(4),h=r(8),d=r(3),_=r(7),m=r(2);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var g=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.importMemory=!1,this.importTable=!1,this.sourceMap=!1,this.memoryBase=0,this.globalAliases=null,this.features=0,this.optimizeLevelHint=0,this.shrinkLevelHint=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?_.Type.usize64:_.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?_.Type.isize64:_.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?2:1},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=g,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 y,E,f=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentInlineFunctions=[],n.currentEnum=null,n.currentType=_.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.needsIterateRoots=!1,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new g),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=l.Module.create(),n}return n(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e,t,r=this.options,n=this.module,s=this.program;s.initialize(r);var c=new u.Function(s.startFunction,"start",new _.Signature([],_.Type.void));this.startFunctionInstance=c;var p=new Array;this.startFunctionBody=p,this.currentFunction=c;for(var h=s.sources,d=0,m=h.length;d"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT)&&e.hasDecorator(u.DecoratorFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.is(p.CommonFlags.CONST)||e.is(p.CommonFlags.STATIC|p.CommonFlags.READONLY);if(e.is(p.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(p.CommonFlags.MODULE_IMPORT),r?T(e,r,e.parent):(y="env",E=e.simpleName),t.addGlobalImport(e.internalName,y,E,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;if(null!==r&&null!==r.initializer){if(n||(n=this.compileExpression(r.initializer,e.type,1,1)),l.getExpressionId(n)!=l.ExpressionId.Const&&(s?(n=t.precomputeExpression(n),l.getExpressionId(n)!=l.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0),e.hasDecorator(u.DecoratorFlags.INLINE)&&!o){switch(assert(l.getExpressionId(n)==l.ExpressionId.Const),l.getExpressionType(n)){case 1:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI32(n),0);break;case 2:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI64Low(n),l.getConstValueI64High(n));break;case 3:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF32(n);break;case 4:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED)}}else n=e.type.toNativeZero(t);var h=e.internalName;return o?(t.addGlobal(h,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(h,n))):t.addGlobal(h,a,!s,n),!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(p.CommonFlags.COMPILED))return!0;e.set(p.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var a=null,s=!1;if(e.members)try{for(var o=i(e.members.values()),h=o.next();!h.done;h=o.next()){var d=h.value;if(d.kind==u.ElementKind.ENUMVALUE){var m=!1,g=d,y=g.declaration;g.set(p.CommonFlags.COMPILED);var E=void 0;y.value?(E=this.compileExpression(y.value,_.Type.i32,1,0),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)?(E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,y.value.range),m=!0)):m=!0)):null==a?E=n.createI32(0):(s&&this.error(c.DiagnosticCode.Enum_member_must_have_initializer,y.range),E=n.createBinary(l.BinaryOp.AddI32,n.createGetGlobal(a.internalName,1),n.createI32(1)),E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,y.range),m=!0)),m?(n.addGlobal(g.internalName,1,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(g.internalName,E)),s=!0):(n.addGlobal(g.internalName,1,!e.is(p.CommonFlags.CONST),E),s=!1),a=g}}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=this.resolver.resolveFunctionInclTypeArguments(e,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(p.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+h.toString(10):"break")+"|"+a);var g=t.createBlock("case0|"+a,p,0),y=!0,E=!0,f=!0,T=!0;for(d=0;d=0&&(y&&s.set(1),E&&s.set(2),f&&s.set(4),T&&s.set(32)),g},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(4),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.startFunctionInstance&&e.parent&&e.parent.kind==d.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var T=!1;if(g.is(p.CommonFlags.CONST))if(f)if(f=this.module.precomputeExpression(f),l.getExpressionId(f)==l.ExpressionId.Const){var I=new u.Local(r,y,-1,E);switch(l.getExpressionType(f)){case 1:I=I.withConstantIntegerValue(i64_new(l.getConstValueI32(f),0));break;case 2:I=I.withConstantIntegerValue(i64_new(l.getConstValueI64Low(f),l.getConstValueI64High(f)));break;case 3:I=I.withConstantFloatValue(l.getConstValueF32(f));break;case 4:I=I.withConstantFloatValue(l.getConstValueF64(f));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,g.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=v=new Map;v.set(y,I),T=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,g.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,g.range);if(!T){I=void 0;I=g.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||h.is(2048)?h.addScopedLocal(E,y,!1,g):n.addLocal(E,y,g),f?(o.push(this.compileAssignmentWithValue(g.name,f)),I.type.is(36)&&h.setLocalWrapped(I.index,!h.canOverflow(f,E))):I.type.is(36)&&h.setLocalWrapped(I.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,0):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=t.precomputeExpression(r);if(l.getExpressionId(n)==l.ExpressionId.Const&&1==l.getExpressionType(n)){if(!l.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var c="break|"+a;o.breakLabel=c;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),d=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(c,[t.createLoop(u,t.createIf(r,d?h:t.createBlock(null,[h,t.createBreak(u)],0)))])},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(p.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(_.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.hasDecorator(u.DecoratorFlags.BUILTIN)||t!=_.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=_.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 d.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case d.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case d.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case d.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case d.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case d.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case d.NodeKind.IDENTIFIER:case d.NodeKind.FALSE:case d.NodeKind.NULL:case d.NodeKind.THIS:case d.NodeKind.SUPER:case d.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case d.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case d.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case d.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case d.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case d.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case d.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case d.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case d.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(c.DiagnosticCode.Operation_not_supported,e.range),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==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.module.precomputeExpression(this.compileExpression(e,t,r,n))},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):(t.isAssignableTo(r)||1==n&&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(l.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(l.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToI64,e):s.createUnary(l.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToU64,e):s.createUnary(l.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToI64,e):s.createUnary(l.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToU64,e):s.createUnary(l.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)?l.UnaryOp.ConvertI64ToF32:l.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF32:l.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF64:l.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF64:l.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(l.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(t.is(1)?l.UnaryOp.ExtendI32:l.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GtI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GtU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GtU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GtF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GtF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.LE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.LeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeI64:l.BinaryOp.LeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.LeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeU64:l.BinaryOp.LeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.LeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.LeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.LeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.GE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeI64:l.BinaryOp.GeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeU64:l.BinaryOp.GeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS_EQUALS_EQUALS:case h.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,y==h.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.EQ)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.EqI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.EqI64:l.BinaryOp.EqI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.EqI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.EqF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.EqF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EXCLAMATION_EQUALS_EQUALS:case h.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,y==h.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.NE)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.NeI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.NeI64:l.BinaryOp.NeI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.NeI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.NeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.NeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS:return this.compileAssignment(d,m,t);case h.Token.PLUS_EQUALS:g=!0;case h.Token.PLUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.ADD)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.AddI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AddI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.AddF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.AddF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.MINUS_EQUALS:g=!0;case h.Token.MINUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.SUB)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.SubI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.SubI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.SubF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.SubF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_EQUALS:g=!0;case h.Token.ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.MUL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.MulI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.MulI64:l.BinaryOp.MulI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.MulI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.MulF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.MulF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_ASTERISK_EQUALS:g=!0;case h.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.POW)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,_.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(T,null)}}else if(r=this.convertExpression(r,this.currentType,_.Type.f64,1,0,d),n=this.currentType,i=this.compileExpression(m,_.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case h.Token.SLASH_EQUALS:g=!0;case h.Token.SLASH:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.DIV)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.DivI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivI64:l.BinaryOp.DivI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.DivU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivU64:l.BinaryOp.DivU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.DivU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.DivF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.DivF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.PERCENT_EQUALS:g=!0;case h.Token.PERCENT:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.REM)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.RemI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemI64:l.BinaryOp.RemI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.RemU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemU64:l.BinaryOp.RemU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var f,T;if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.LESSTHAN_LESSTHAN_EQUALS:g=!0;case h.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShlI64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case h.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.ShrI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.ShrI64,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrI64:l.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR_U)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_EQUALS:g=!0;case h.Token.AMPERSAND:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_AND)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.AndI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AndI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AndI64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.BAR_EQUALS:g=!0;case h.Token.BAR:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_OR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.OrI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.OrI64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.CARET_EQUALS:g=!0;case h.Token.CARET:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_XOR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.XorI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=p.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=p.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),i,p.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case h.Token.BAR_BAR:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,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,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),p.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return g?this.compileAssignmentWithValue(d,o,t!=_.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(p.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(p.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==u.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program.resolver,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=_.Type.void);case u.ElementKind.LOCAL:case u.ElementKind.FIELD:n=s.type;break;case u.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var l=this.resolver.resolveFunction(o,null);if(!l)return this.module.createUnreachable();assert(1==l.signature.parameterTypes.length),n=l.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 u.ElementKind.CLASS:if(i.currentElementExpression){var p=a.flow.is(4096),h=s.lookupOverload(u.OperatorKind.INDEXED_SET,p);if(!h)return s.lookupOverload(u.OperatorKind.INDEXED_GET,p)?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()}assert(n!=_.Type.void);var d=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,d,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case u.ElementKind.LOCAL:var a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.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 u.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.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(),l=i.internalName;return n.createBlock(null,[n.createSetGlobal(l,t),n.createGetGlobal(l,o)],o)}return n.createSetGlobal(i.internalName,t);case u.ElementKind.FIELD:var h=i.declaration;if(i.is(p.CommonFlags.READONLY)&&!this.currentFunction.is(p.CommonFlags.CONSTRUCTOR)&&null!=h&&null==h.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 d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var g=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(g,t),n.createStore(a.byteSize,m,n.createGetLocal(g,o),o,i.memoryOffset),n.createGetLocal(g,o)],o)}return n.createStore(a.byteSize,m,t,o,i.memoryOffset);case u.ElementKind.PROPERTY:var y=i.setterPrototype;if(y){var E=this.resolver.resolveFunction(y,null);if(!E)return n.createUnreachable();if(!r){if(E.is(p.CommonFlags.INSTANCE)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var f=i.getterPrototype;assert(null!=f);var T=this.resolver.resolveFunction(f,null);if(!T)return n.createUnreachable();var I=(R=T.signature.returnType).toNativeType();if(E.is(p.CommonFlags.INSTANCE)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),g=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(E,[n.createTeeLocal(g,m),t]),this.makeCallDirect(T,[n.createGetLocal(g,I)])],I)}return n.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(T)],I)}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 u.ElementKind.CLASS:var v=this.resolver.currentElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(u.OperatorKind.INDEXED_GET,A);if(!C)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(u.OperatorKind.INDEXED_SET,A);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:_.Type.void,n.createUnreachable();var O=i.type,S=(d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),this.compileExpression(v,_.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(O,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=C.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,S),t]),this.makeCallDirect(C,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(N,[m,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.resolver.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var o=s,l=e.typeArguments;if(o.hasDecorator(u.DecoratorFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var h=null;if(l){if(!o.is(p.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();h=this.resolver.resolveFunctionInclTypeArguments(o,l,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(p.CommonFlags.GENERIC)){for(var m=new Map,g=assert(o.declaration.typeParameters),y=g.length,E=0;Es&&!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){if(assert(!e.is(p.CommonFlags.TRAMPOLINE)),!this.currentInlineFunctions.includes(e)){this.currentInlineFunctions.push(e);var o=this.compileCallInlineUnchecked(e,t,r,n);return this.currentInlineFunctions.pop(),o}this.warning(c.DiagnosticCode.Function_0_cannot_be_inlined_into_itself,r.range,e.internalName)}var l=n?a+1:a,u=new Array(l),h=0;n&&(u[0]=n,h=1);for(var d=s.parameterTypes,_=0;_=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,l=e.is(p.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=E,this.module.createGetLocal(f,E.toNativeType());case u.ElementKind.GLOBAL:if(!this.compileGlobal(y))return this.module.createUnreachable();var T=y.type;return assert(T!=_.Type.void),y.is(p.CommonFlags.INLINED)?this.compileInlineConstant(y,t,r):(this.currentType=T,this.module.createGetGlobal(y.internalName,T.toNativeType()));case u.ElementKind.ENUMVALUE:return y.is(p.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,y.is(p.CommonFlags.INLINED)?this.module.createI32(y.constantValue):this.module.createGetGlobal(y.internalName,1)):(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=_.Type.i32,this.module.createUnreachable());case u.ElementKind.FUNCTION_PROTOTYPE:var I=this.resolver.resolveFunction(y,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.compileInstanceOfExpression=function(e,t){var r=this.module,n=this.compileExpressionRetainType(e.expression,this.options.usizeType,0),i=this.currentType,a=this.resolver.resolveType(e.isType);return this.currentType=_.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?l.BinaryOp.NeI64:l.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case d.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,!1,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case d.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case d.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:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(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:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(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=_.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=_.Type.u32,n.createI32(i64_low(s))):(this.currentType=_.Type.i64,n.createI64(i64_low(s),i64_high(s)));case d.LiteralKind.STRING:return assert(!r),this.compileStringLiteral(e);case d.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.ensureStaticString=function(e){var t,r=this.program,n=r.hasGC,i=r.gcHeaderSize,a=assert(r.stringInstance),s=this.stringSegments;if(s.has(e))t=s.get(e);else{var c=e.length,l=a.currentMemoryOffset+1&-2,p=l+2*c,u=void 0,h=void 0;n?(u=new Uint8Array(i+p),h=i,m.writeI32(o.ensureGCHook(this,a),u,r.gcHookOffset)):(u=new Uint8Array(p),h=0),m.writeI32(c,u,h+a.offsetof("length")),h+=l;for(var d=0;d",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(c.DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PRIVATE))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PROTECTED))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,s=a.length,l=e.values,h=n.members,d=!1,_=new Array(s+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(s==l.length);for(var g=0,y=s;g=0);var l=this.compileExpressionRetainType(o,this.options.usizeType,0);return this.currentType=i.type,n.createLoad(i.type.byteSize,i.type.is(5),l,i.type.toNativeType(),i.memoryOffset);case u.ElementKind.PROPERTY:return this.compileGetter(i,e);case u.ElementKind.FUNCTION_PROTOTYPE:return this.error(c.DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set,e.range,i.simpleName),n.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileGetter=function(e,t){var r=e.getterPrototype;if(r){var n=this.resolver.resolveFunction(r,null);if(!n)return this.module.createUnreachable();var i=n.signature;if(!this.checkCallSignature(i,0,n.is(p.CommonFlags.INSTANCE),t))return this.module.createUnreachable();var a=0!=(n.decoratorFlags&u.DecoratorFlags.INLINE);if(n.is(p.CommonFlags.INSTANCE)){var s=assert(n.parent);assert(s.kind==u.ElementKind.CLASS);var o=assert(this.resolver.currentThisExpression),l=this.compileExpressionRetainType(o,this.options.usizeType,0);//!!! -return this.currentType=i.returnType,this.compileCallDirect(n,[],t,l,a)}return this.currentType=i.returnType,this.compileCallDirect(n,[],t,0,a)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,t.range,e.simpleName,e.parent.toString()),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=e.ifThen,n=e.ifElse,i=this.currentFunction,a=i.flow,s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var o=this.module.precomputeExpression(s);if(l.getExpressionId(o)==l.ExpressionId.Const&&1==l.getExpressionType(o))return l.getConstValueI32(o)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),d=this.currentType;u.free();var m=a.fork();i.flow=m;var g=this.compileExpressionRetainType(n,t,0),y=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=_.Type.commonCompatible(d,y,!1);return E?(h=this.convertExpression(h,d,E,1,0,r),g=this.convertExpression(g,y,E,1,0,n),this.currentType=E,this.module.createIf(s,h,g)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,d.toString(),y.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==_.Type.void?_.Type.i32:t,0,0);if(l.getExpressionId(i)==l.ExpressionId.Unreachable)return i;var a,s,o,p=this.currentType;switch(e.operator){case h.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.AddI32,s=1,o=r.createI32(1);break;case 9:case 4:a=(u=this.options).isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.AddI64,s=2,o=r.createI64(1);break;case 11:a=l.BinaryOp.AddF32,s=3,o=r.createF32(1);break;case 12:a=l.BinaryOp.AddF64,s=4,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case h.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.SubI32,s=1,o=r.createI32(1);break;case 9:case 4:var u;a=(u=this.options).isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.SubI64,s=2,o=r.createI64(1);break;case 11:a=l.BinaryOp.SubF32,s=3,o=r.createF32(1);break;case 12:a=l.BinaryOp.SubF64,s=4,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==_.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var d=n.getTempLocal(p,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(d.index,s),o),!1);this.currentType=assert(d).type,n.freeTempLocal(d);var g=d.index;return r.createBlock(null,[r.createSetLocal(g,i),m,r.createGetLocal(g,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case h.Token.PLUS:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case h.Token.MINUS:if(e.operand.kind==d.NodeKind.LITERAL&&(e.operand.literalKind==d.LiteralKind.INTEGER||e.operand.literalKind==d.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(l.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(l.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=_.Type.bool;break;case h.Token.TILDE:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case h.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!=_.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(l.UnaryOp.ExtendI8ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI16ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(l.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(l.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(l.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,e);case 11:return r.createBinary(l.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(l.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(l.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(l.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,s=this.currentFunction,c=this.options.nativeSizeType,l=s.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(l.index,o.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==u.ElementKind.FIELD){var g=m,y=g.type,E=y.toNativeType(),f=g.prototype.declaration;if(assert(!g.isAny(p.CommonFlags.CONST)),f.initializer)h.push(a.createStore(y.byteSize,a.createGetLocal(l.index,c),this.compileExpression(f.initializer,y,1,0),E,g.memoryOffset));else{var T=g.prototype.declaration.parameterIndex;h.push(a.createStore(y.byteSize,a.createGetLocal(l.index,c),T>=0?a.createGetLocal(1+T,E):y.toNativeZero(a),E,g.memoryOffset))}}}}catch(e){r={error:e}}finally{try{_&&!_.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}return h.push(a.createGetLocal(l.index,c)),s.freeTempLocal(l),this.currentType=e.type,a.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(2==n?r.createBinary(l.BinaryOp.NeI64,r.createGetLocal(0,2),r.createI64(0)):r.createGetLocal(0,1),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 T(e,t,r){if(void 0===r&&(r=null),y=r?r.simpleName:t.range.source.simplePath,E=e.simpleName,e.hasDecorator(u.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(d.findDecorator(d.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(E=s.value,a.length>=2&&((s=a[1]).kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(y=E,E=s.value,a.length>2&&n.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(c.DiagnosticCode.String_literal_expected,s.range))):n.error(c.DiagnosticCode.String_literal_expected,s.range)}else n.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=f},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.User_defined_0=102]="User_defined_0",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.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Constructor_of_class_0_must_not_require_any_arguments=216]="Constructor_of_class_0_must_not_require_any_arguments",e[e.Function_0_cannot_be_inlined_into_itself=217]="Function_0_cannot_be_inlined_into_itself",e[e.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set=218]="Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set",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.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.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",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.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",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.In_const_enum_declarations_member_initializer_must_be_constant_expression=2474]="In_const_enum_declarations_member_initializer_must_be_constant_expression",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.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",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",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 102:return"User-defined: {0}";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 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 217:return"Function '{0}' cannot be inlined into itself.";case 218:return"Cannot access method '{0}' without calling it as it requires 'this' to be set.";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 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 1061:return"Enum member must have initializer.";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 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";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 2474:return"In 'const' enum declarations member initializer must be constant expression.";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 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=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}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),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 s,o=r(1),c=r(4),l=r(3),p=r(7),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s=t.ReportMode||(t.ReportMode={}));var h=function(e){function t(t){var r=e.call(this,t.diagnostics)||this;return r.currentThisExpression=null,r.currentElementExpression=null,r.program=t,r}return n(t,e),t.prototype.resolveType=function(e,t,r){if(void 0===t&&(t=null),void 0===r&&(r=s.REPORT),e.kind==l.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==l.NodeKind.TYPE);var i=e,a=i.name.text,h=a,d=i.range.source.internalPath+u.PATH_DELIMITER+a,_=this.program.elementsLookup,m=void 0;if((m=_.get(d))||(m=_.get(h)))switch(m.kind){case c.ElementKind.ENUM:return null!==i.typeArguments&&i.typeArguments.length?(r==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,e.range,m.internalName),null):p.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var g=this.resolveClassInclTypeArguments(m,i.typeArguments,t,e);return g?e.isNullable?g.type.asNullable():g.type:null}var y=this.program.typeAliases.get(a);if(y)return this.resolveType(y.type,t,r);var E=i.typeArguments;if(E){for(var f=E.length,T=new Array(f),I=0;I",h+="<"+A+">")}else if(t){var C=t.get(h);if(C)return C}}var N=this.program.typesLookup,O=void 0;return(O=N.get(d))||(O=N.get(h))?O:(r==s.REPORT&&this.error(o.DiagnosticCode.Cannot_find_name_0,i.name.range,h),null)},t.prototype.resolveSignature=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=s.REPORT);var n=e.explicitThisType,i=null;if(n&&!(i=this.resolveType(n,t,r)))return null;for(var a=e.parameters,o=a.length,c=new Array(o),u=new Array(o),h=0,d=!1,_=0;_"),_=new c.Function(e,V,H,R||y,r),e.instances.set(d,_),this.program.instancesLookup.set(V,_),_},t.prototype.resolveFunctionPartially=function(e,t,r){void 0===r&&(r=s.REPORT),assert(e.is(u.CommonFlags.INSTANCE));var n=assert(e.classPrototype);if(!t||!t.length)return e;var i=e.simpleName,a=p.typesToString(t),o=new c.FunctionPrototype(this.program,i,n.internalName+"<"+a+">"+u.INSTANCE_DELIMITER+i,e.declaration,n,e.decoratorFlags);return o.flags=e.flags,o.operatorKind=e.operatorKind,o.classTypeArguments=t,o},t.prototype.resolveFunctionInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;return!e.is(u.CommonFlags.GENERIC)||(assert(null!=t&&0!=t.length),a=this.resolveTypeArguments(assert(e.declaration.typeParameters),t,r,n,i))?this.resolveFunction(e,a,r,i):null},t.prototype.resolveClass=function(e,t,r,n){var h,d,_,m,g,y,E,f;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var T=t?p.typesToString(t):"",I=e.instances.get(T);if(I)return I;var v=r;if(r=new Map,v)try{for(var A=i(v),C=A.next();!C.done;C=A.next()){var N=a(C.value,2),O=N[0],S=N[1];r.set(O,S)}}catch(e){h={error:e}}finally{try{C&&!C.done&&(d=A.return)&&d.call(A)}finally{if(h)throw h.error}}var L=e.declaration;if(t){var b=L.typeParameters,k=b.length,R=t.length;assert(R==k);for(var x=0;x",U+="<"+T+">"),(I=new c.Class(e,B,U,t,F)).contextualTypeArguments=r,e.instances.set(T,I),this.program.instancesLookup.set(U,I);var P=0;if(F){if(F.members){I.members||(I.members=new Map);try{for(var w=i(F.members.values()),M=w.next();!M.done;M=w.next()){var G=M.value;I.members.set(G.simpleName,G)}}catch(e){_={error:e}}finally{try{M&&!M.done&&(m=w.return)&&m.call(w)}finally{if(_)throw _.error}}}P=F.currentMemoryOffset}if(e.constructorPrototype){var K=this.resolveFunctionPartially(e.constructorPrototype,t,n);if(!K)return null;I.constructorInstance=this.resolveFunction(K,null,null,n)}if(e.instanceMembers)try{for(var z=i(e.instanceMembers.values()),H=z.next();!H.done;H=z.next()){var V=H.value;switch(V.kind){case c.ElementKind.FIELD_PROTOTYPE:I.members||(I.members=new Map);var X=V.declaration,W=null;if(X.type)W=this.resolveType(X.type,I.contextualTypeArguments,n);else{if(null!==F&&null!==F.members){var Y=F.members.get(V.simpleName);Y&&!Y.is(u.CommonFlags.PRIVATE)&&(assert(Y.kind==c.ElementKind.FIELD),W=Y.type)}W||n==s.REPORT&&this.error(o.DiagnosticCode.Type_expected,X.name.range.atEnd)}if(!W)break;var Q=new c.Field(V,U+u.INSTANCE_DELIMITER+V.simpleName,W,X,I);switch(W.byteSize){case 1:break;case 2:1&P&&++P;break;case 4:3&P&&(P=1+(3|P));break;case 8:7&P&&(P=1+(7|P));break;default:assert(!1)}Q.memoryOffset=P,P+=W.byteSize,I.members.set(V.simpleName,Q);break;case c.ElementKind.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=this.resolveFunctionPartially(V,t,n);if(!q)return null;q.internalName=U+u.INSTANCE_DELIMITER+q.simpleName,I.members.set(V.simpleName,q);break;case c.ElementKind.PROPERTY:I.members||(I.members=new Map);var j=assert(V.getterPrototype),Z=V.setterPrototype,J=new c.Property(this.program,V.simpleName,U+u.INSTANCE_DELIMITER+V.simpleName,e),$=this.resolveFunctionPartially(j,t,n);if(!$)return null;if($.internalName=U+u.INSTANCE_DELIMITER+$.simpleName,J.getterPrototype=$,Z){var ee=this.resolveFunctionPartially(Z,t,n);if(!ee)return null;ee.internalName=U+u.INSTANCE_DELIMITER+ee.simpleName,J.setterPrototype=ee}I.members.set(V.simpleName,J);break;default:assert(!1)}}}catch(e){g={error:e}}finally{try{H&&!H.done&&(y=z.return)&&y.call(z)}finally{if(g)throw g.error}}I.currentMemoryOffset=P;try{for(var te=i(e.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=a(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=c.OperatorKind.INVALID);var se=void 0;if(ae.is(u.CommonFlags.INSTANCE)){var oe=this.resolveFunctionPartially(ae,t,n);if(!oe)continue;se=this.resolveFunction(oe,null,null,n)}else se=this.resolveFunction(ae,null,null,n);if(se){var ce=I.overloads;ce||(I.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){E={error:e}}finally{try{re&&!re.done&&(f=te.return)&&f.call(te)}finally{if(E)throw E.error}}return I},t.prototype.resolveClassInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;if(e.is(u.CommonFlags.GENERIC)){var c=e.declaration.typeParameters,l=c.length;assert(l>0);var p=null!==t?t.length:0;if(l!=p)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,l.toString(10),p.toString(10)),null;if(!(a=this.resolveTypeArguments(c,t,r,n,i)))return null}else if(null!==t&&t.length)return i==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,n.range,e.internalName),null;return this.resolveClass(e,a,r,i)},t}(o.DiagnosticEmitter);t.Resolver=h},function(e,t,r){r(13),e.exports=r(25)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(14),r(16),r(17),r(18);var n=r(5);n.Module.prototype.toText=function(){return new binaryen.Module(this.ref).emitText()},n.Module.prototype.toAsmjs=function(){return new binaryen.Module(this.ref).emitAsmjs()}},function(e,t,r){(function(e){const t=e.Binaryen||r(15);for(var n in e.binaryen=t,t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.__memory_allocate=t._malloc,e.__memory_free=t._free,e.__memory_copy=t._memmove,e.__store=function(e,r){t.HEAPU8[e]=r},e.__load=function(e){return t.HEAPU8[e]}}).call(this,r(6))},function(t,r){t.exports=e},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function r(){Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function n(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}t.ASC_TARGET=0,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},r.prototype=Object.create(Error.prototype),r.prototype.name="UnreachableError",r.prototype.message="unreachable",t.unreachable=function(){throw new r},n.prototype=Object.create(Error.prototype),n.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new n(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},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)},t.JSMath=Math,t.memory=(()=>{var e=new Uint8Array(0),r=0;return{allocate:t.__memory_allocate||function(t){if(!(t>>>=0))return 0;if(r+t>e.length){var n=e;(e=new Uint8Array(Math.max(65536,e.length+t,2*e.length))).set(n)}var i=r;return 7&(r+=t)&&(r=1+(7|r)),i},free:t.__memory_free||function(e){},copy:t.__memory_copy||function(t,r,n){e.copyWithin(t,r,r+n)}}})(),t.store=t.__store||function(e,t,r){HEAP[e+(0|r)]=t},t.load=t.__load||function(e,t){return HEAP[e+(0|t)]}}).call(this,r(6))},function(e,t,r){(function(e){const t=new Float64Array(1),r=new Float32Array(t.buffer),n=new Int32Array(t.buffer);e.f32_as_i32=function(e){return r[0]=e,n[0]},e.i32_as_f32=function(e){return n[0]=e,r[0]},e.f64_as_i64=function(e){return t[0]=e,i64_new(n[0],n[1])},e.i64_as_f64=function(e){return n[0]=i64_low(e),n[1]=i64_high(e),t[0]}}).call(this,r(6))},function(e,t,r){(function(e){const t=e.Long||r(19);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(6))},function(e,t){e.exports=n;var r=null;try{r=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([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])),{}).exports}catch(e){}function n(e,t,r){this.low=0|e,this.high=0|t,this.unsigned=!!r}function i(e){return!0===(e&&e.__isLong__)}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0}),n.isLong=i;var a={},s={};function o(e,t){var r,n,i;return t?(i=0<=(e>>>=0)&&e<256)&&(n=s[e])?n:(r=l(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=l(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E:y;if(t){if(e<0)return E;if(e>=_)return A}else{if(e<=-m)return C;if(e+1>=m)return v}return e<0?c(-e,t).neg():l(e%d|0,e/d|0,t)}function l(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=l;var p=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 y;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(p(r,8)),a=y,s=0;s>>0:this.low},N.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},N.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return l+s;for(;l.length<6;)l="0"+l;s=""+l+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.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)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.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},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(f)},N.neg=N.negate,N.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,p=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,p+=(u+=r+o)>>>16,p+=t+s,l((d&=65535)<<16|(_&=65535),(p&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return y;if(i(e)||(e=h(e)),r)return l(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return y;if(this.eq(C))return e.isOdd()?C:y;if(e.eq(C))return this.isOdd()?C:y;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(g)&&e.lt(g))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,p=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,E=0,f=0;return E+=(f+=s*d)>>>16,m+=(E+=a*d)>>>16,E&=65535,m+=(E+=s*u)>>>16,_+=(m+=n*d)>>>16,m&=65535,_+=(m+=a*u)>>>16,m&=65535,_+=(m+=s*p)>>>16,_+=t*d+n*u+a*p+s*o,l((E&=65535)<<16|(f&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},N.mul=N.multiply,N.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?l((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?E:y;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return T;a=E}else{if(this.eq(C))return e.eq(f)||e.eq(I)?C:e.eq(C)?f:(t=this.shr(1).div(e).shl(1)).eq(y)?e.isNegative()?f:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?E:y;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=y}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:p(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=f),a=a.add(u),n=n.sub(d)}return a},N.div=N.divide,N.modulo=function(e){return i(e)||(e=h(e)),r?l((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))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return l(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),l(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),l(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),l(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?l(this.low<>>32-e,this.unsigned):l(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):l(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?l(this.low>>>e|t<<32-e,t>>>e,this.unsigned):l(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?l(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:l(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.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]},N.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){"use strict";var n=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 i=r(1),a=r(3),s=r(7),o=r(5),c=r(4),l=r(11),p=r(0);function u(e,t,r,n,p,u){var g,y,E,f,T=e.module;switch(t.internalName){case"isInteger":var I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(4)&&!I.is(256)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isFloat":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(8)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isSigned":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(1)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isReference":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?(e.currentType=s.Type.bool,I.is(256)?T.createI32(1):T.createI32(0)):T.createUnreachable();case"isString":I=d(e,r,n,u);if(e.currentType=s.Type.bool,!I)return T.createUnreachable();if(R=I.classReference){var v=e.program.stringInstance;if(v&&R.isAssignableTo(v))return T.createI32(1)}return T.createI32(0);case"isArray":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null!==(R=I.classReference)&&null!==R.lookupOverload(c.OperatorKind.INDEXED_GET)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isDefined":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var A=e.resolver.resolveExpression(n[0],e.currentFunction,l.ReportMode.SWALLOW);return T.createI32(A?1:0);case"isConstant":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var C=e.compileExpressionRetainType(n[0],s.Type.i32,0);return e.currentType=s.Type.bool,T.createI32(o.getExpressionId(C)==o.ExpressionId.Const?1:0);case"isManaged":if(!e.program.hasGC)return e.currentType=s.Type.bool,T.createI32(0);I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null===(R=I.classReference)||R.hasDecorator(c.DecoratorFlags.UNMANAGED)?T.createI32(0):T.createI32(1):T.createUnreachable();case"clz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.ClzI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.ClzI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.ClzI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"ctz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],0,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.CtzI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.CtzI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.CtzI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"popcnt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.PopcntI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.PopcntI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.PopcntI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"rotl":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=e.ensureSmallIntegerWrap(T.createBinary(o.BinaryOp.RotlI32,g,y),e.currentType);case 2:case 7:f=T.createBinary(o.BinaryOp.RotlI32,g,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,g,y);break;case 3:case 8:f=T.createBinary(o.BinaryOp.RotlI64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"rotr":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=e.ensureSmallIntegerWrap(T.createBinary(o.BinaryOp.RotrI32,g,y),e.currentType);break;case 2:case 7:f=T.createBinary(o.BinaryOp.RotrI32,g,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,g,y);break;case 3:case 8:f=T.createBinary(o.BinaryOp.RotrI64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"abs":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(e.currentType.kind){case 0:case 1:case 2:var N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(o.BinaryOp.SubI32,T.createI32(0),T.createGetLocal(N.index,1)),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(N.index,1),T.createI32(0)));break;case 4:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(T),T.createGetLocal(N.index,e.options.nativeSizeType)),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(N.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(T)));break;case 3:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(o.BinaryOp.SubI64,T.createI64(0,0),T.createGetLocal(N.index,2)),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(N.index,2),T.createI64(0,0)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:f=g;break;case 11:f=T.createUnary(o.UnaryOp.AbsF32,g);break;case 12:f=T.createUnary(o.UnaryOp.AbsF64,g);break;case 13:f=T.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"max":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:var O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtU32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtU64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:f=T.createBinary(o.BinaryOp.MaxF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.MaxF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"min":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtI32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtU32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtI64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtU64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:f=T.createBinary(o.BinaryOp.MinF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.MinF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"ceil":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.CeilF32,g);break;case 12:f=T.createUnary(o.UnaryOp.CeilF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"floor":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.FloorF32,g);break;case 12:f=T.createUnary(o.UnaryOp.FloorF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"copysign":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 11:f=T.createBinary(o.BinaryOp.CopysignF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.CopysignF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"nearest":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.NearestF32,g);break;case 12:f=T.createUnary(o.UnaryOp.NearestF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"reinterpret":if(1!=n.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();switch(r[0].kind){case 2:case 7:g=e.compileExpression(n[0],s.Type.f32,1,0),f=T.createUnary(o.UnaryOp.ReinterpretF32,g);break;case 3:case 8:g=e.compileExpression(n[0],s.Type.f64,1,0),f=T.createUnary(o.UnaryOp.ReinterpretF64,g);break;case 9:if(r[0].is(256))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),e.currentType=r[0],T.createUnreachable();case 4:g=e.compileExpression(n[0],e.options.isWasm64?s.Type.f64:s.Type.f32,1,0),f=T.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,g);break;case 11:g=e.compileExpression(n[0],s.Type.i32,1,0),f=T.createUnary(o.UnaryOp.ReinterpretI32,g);break;case 12:g=e.compileExpression(n[0],s.Type.i64,1,0),f=T.createUnary(o.UnaryOp.ReinterpretI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return e.currentType=r[0],f;case"sqrt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 11:f=T.createUnary(o.UnaryOp.SqrtF32,g);break;case 12:f=T.createUnary(o.UnaryOp.SqrtF64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"trunc":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.TruncF32,g);break;case 12:f=T.createUnary(o.UnaryOp.TruncF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"load":return n.length<1||n.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable()):r&&1==r.length?(g=e.compileExpression(n[0],e.options.usizeType,1,0),(x=2==n.length?_(e,n[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.createLoad(r[0].byteSize,r[0].is(5),g,r[0].is(4)&&p.is(4)&&p.size>r[0].size?(e.currentType=p).toNativeType():(e.currentType=r[0]).toNativeType(),x))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"store":if(e.currentType=s.Type.void,n.length<2||n.length>3)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"2",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],r[0],r[0].is(4)?0:1,0);I=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();var R;if(!(R=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable();var x=void 0;if(n.length){if(n[0].kind!=a.NodeKind.LITERAL||n[0].literalKind!=a.LiteralKind.STRING)return e.error(i.DiagnosticCode.String_literal_expected,n[0].range),T.createUnreachable();var F=n[0].value,D=R.members?R.members.get(F):null;if(!D||D.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,n[0].range,R.internalName,F),T.createUnreachable();x=D.memoryOffset}else x=R.currentMemoryOffset;return e.options.isWasm64?p.is(4)&&p.size<=32?(e.currentType=s.Type.u32,T.createI32(x)):T.createI64(x):p.is(4)&&64==p.size?(e.currentType=s.Type.u64,T.createI64(x)):T.createI32(x);case"select":if(3!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpressionRetainType(n[0],s.Type.i32,0);I=e.currentType;switch(y=e.compileExpression(n[1],I,1,0),E=e.makeIsTrueish(e.compileExpressionRetainType(n[2],s.Type.bool,0),e.currentType),e.currentType=I,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:f=T.createSelect(g,y,E);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"unreachable":return 0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createUnreachable();case"memory.size":return e.currentType=s.Type.i32,0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createHost(o.HostOp.CurrentMemory);case"memory.grow":return e.currentType=s.Type.i32,1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),g=T.createUnreachable()):g=e.compileExpression(n[0],s.Type.i32,1,0),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createHost(o.HostOp.GrowMemory,null,[g]);case"memory.copy":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,T.createUnreachable();throw g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],e.options.usizeType,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"memory.fill":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,T.createUnreachable();throw g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],s.Type.u32,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),e.currentType=r[0],T.createUnreachable()):(g=e.compileExpressionRetainType(n[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable()):g):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"assert":if(n.length<1||n.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):n.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpressionRetainType(n[0],s.Type.bool,1);I=e.currentType;if(e.currentType=I.nonNullableType,e.options.noAssert)return p==s.Type.void?(e.currentType=s.Type.void,T.createNop()):g;var B=m(e,2==n.length?n[1]:null,u);if(e.currentType=I.nonNullableType,p==s.Type.void){switch(e.currentType.kind){default:f=T.createIf(T.createUnary(o.UnaryOp.EqzI32,g),B);break;case 3:case 8:f=T.createIf(T.createUnary(o.UnaryOp.EqzI64,g),B);break;case 4:case 9:f=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,g),B);break;case 11:f=T.createIf(T.createBinary(o.BinaryOp.EqF32,g,T.createF32(0)),B);break;case 12:f=T.createIf(T.createBinary(o.BinaryOp.EqF64,g,T.createF64(0)),B);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=B}e.currentType=s.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:O=e.currentFunction.flow,N=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));f=T.createIf(T.createTeeLocal(N.index,g),T.createGetLocal(N.index,1),B);break;case 2:case 7:default:N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);f=T.createIf(T.createTeeLocal(N.index,g),T.createGetLocal(N.index,1),B);break;case 3:case 8:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);f=T.createIf(T.createUnary(o.UnaryOp.EqzI64,T.createTeeLocal(N.index,g)),B,T.createGetLocal(N.index,2));break;case 4:case 9:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,T.createTeeLocal(N.index,g)),B,T.createGetLocal(N.index,e.options.nativeSizeType));break;case 11:N=e.currentFunction.getAndFreeTempLocal(s.Type.f32,!1);f=T.createIf(T.createBinary(o.BinaryOp.EqF32,T.createTeeLocal(N.index,g),T.createF32(0)),B,T.createGetLocal(N.index,3));break;case 12:N=e.currentFunction.getAndFreeTempLocal(s.Type.f64,!1);f=T.createIf(T.createBinary(o.BinaryOp.EqF64,T.createTeeLocal(N.index,g),T.createF64(0)),B,T.createGetLocal(N.index,4));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=B}return f;case"unchecked":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable()):((O=e.currentFunction.flow).set(4096),f=e.compileExpressionRetainType(n[0],p,0),O.unset(4096),f);case"call_indirect":if(n.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var U=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();U=r[0]}else U=p;if(g=e.compileExpressionRetainType(n[0],s.Type.u32,0),7!=e.currentType.kind)return e.error(i.DiagnosticCode.Operation_not_supported,n[0].range),T.createUnreachable();for(var P=n.length-1,w=new Array(P),M=new Array(P+1),G=U.toNativeType(),K=new Array(P),z=0;z void"),T.createUnreachable())}var Q=function(e,t,r,n,i){switch(t.internalName){case"i32.clz":return h("clz",e,s.Type.i32,r,s.Type.i32,i);case"i64.clz":return h("clz",e,s.Type.i64,r,s.Type.i64,i);case"i32.ctz":return h("ctz",e,s.Type.i32,r,s.Type.i32,i);case"i64.ctz":return h("ctz",e,s.Type.i64,r,s.Type.i64,i);case"i32.popcnt":return h("popcnt",e,s.Type.i32,r,s.Type.i32,i);case"i64.popcnt":return h("popcnt",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotl":return h("rotl",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotl":return h("rotl",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotr":return h("rotr",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotr":return h("rotr",e,s.Type.i64,r,s.Type.i64,i);case"f32.abs":return h("abs",e,s.Type.f32,r,s.Type.f32,i);case"f64.abs":return h("abs",e,s.Type.f64,r,s.Type.f64,i);case"f32.max":return h("max",e,s.Type.f32,r,s.Type.f32,i);case"f64.max":return h("max",e,s.Type.f64,r,s.Type.f64,i);case"f32.min":return h("min",e,s.Type.f32,r,s.Type.f32,i);case"f64.min":return h("min",e,s.Type.f64,r,s.Type.f64,i);case"f32.ceil":return h("ceil",e,s.Type.f32,r,s.Type.f32,i);case"f64.ceil":return h("ceil",e,s.Type.f64,r,s.Type.f64,i);case"f32.floor":return h("floor",e,s.Type.f32,r,s.Type.f32,i);case"f64.floor":return h("floor",e,s.Type.f64,r,s.Type.f64,i);case"f32.copysign":return h("copysign",e,s.Type.f32,r,s.Type.f32,i);case"f64.copysign":return h("copysign",e,s.Type.f64,r,s.Type.f64,i);case"f32.nearest":return h("nearest",e,s.Type.f32,r,s.Type.f32,i);case"f64.nearest":return h("nearest",e,s.Type.f64,r,s.Type.f64,i);case"i32.reinterpret_f32":return h("reinterpret",e,s.Type.i32,r,s.Type.f32,i);case"i64.reinterpret_f64":return h("reinterpret",e,s.Type.i64,r,s.Type.f64,i);case"f32.reinterpret_i32":return h("reinterpret",e,s.Type.f32,r,s.Type.i32,i);case"f64.reinterpret_i64":return h("reinterpret",e,s.Type.f64,r,s.Type.i64,i);case"f32.sqrt":return h("sqrt",e,s.Type.f32,r,s.Type.f32,i);case"f64.sqrt":return h("sqrt",e,s.Type.f64,r,s.Type.f64,i);case"f32.trunc":return h("trunc",e,s.Type.f32,r,s.Type.f32,i);case"f64.trunc":return h("trunc",e,s.Type.f64,r,s.Type.f64,i);case"i32.load8_s":return h("load",e,s.Type.i8,r,s.Type.i32,i);case"i32.load8_u":return h("load",e,s.Type.u8,r,s.Type.u32,i);case"i32.load16_s":return h("load",e,s.Type.i16,r,s.Type.i32,i);case"i32.load16_u":return h("load",e,s.Type.u16,r,s.Type.u32,i);case"i32.load":return h("load",e,s.Type.i32,r,s.Type.i32,i);case"i64.load8_s":return h("load",e,s.Type.i8,r,s.Type.i64,i);case"i64.load8_u":return h("load",e,s.Type.u8,r,s.Type.u64,i);case"i64.load16_s":return h("load",e,s.Type.i16,r,s.Type.i64,i);case"i64.load16_u":return h("load",e,s.Type.u16,r,s.Type.u64,i);case"i64.load32_s":return h("load",e,s.Type.i32,r,s.Type.i64,i);case"i64.load32_u":return h("load",e,s.Type.u32,r,s.Type.u64,i);case"i64.load":return h("load",e,s.Type.i64,r,s.Type.i64,i);case"f32.load":return h("load",e,s.Type.f32,r,s.Type.f32,i);case"f64.load":return h("load",e,s.Type.f64,r,s.Type.f64,i);case"i32.store8":return h("store",e,s.Type.i8,r,s.Type.i32,i);case"i32.store16":return h("store",e,s.Type.i16,r,s.Type.i32,i);case"i32.store":return h("store",e,s.Type.i32,r,s.Type.i32,i);case"i64.store8":return h("store",e,s.Type.i8,r,s.Type.i64,i);case"i64.store16":return h("store",e,s.Type.i16,r,s.Type.i64,i);case"i64.store32":return h("store",e,s.Type.i32,r,s.Type.i64,i);case"i64.store":return h("store",e,s.Type.i64,r,s.Type.i64,i);case"f32.store":return h("store",e,s.Type.f32,r,s.Type.f32,i);case"f64.store":return h("store",e,s.Type.f64,r,s.Type.f64,i)}return 0}(e,t,n,0,u);return Q?(r&&r.length&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),Q):(e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable())}function h(e,t,r,n,i,a){var s=assert(t.program.elementsLookup.get(e));return assert(s.kind==c.ElementKind.FUNCTION_PROTOTYPE),u(t,s,[r],n,i,a)}function d(e,t,r,n){if(0==r.length)return t&&1==t.length?t[0]:(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.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(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),null;e.compileExpressionRetainType(r[0],s.Type.i32,0)}else e.compileExpressionRetainType(r[0],s.Type.i32,0);return e.currentType}return t&&t.length>1&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"1",r.length.toString(10)),null}function _(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,s.Type.usize64,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||2!=o.getExpressionType(r)||0!=o.getConstValueI64High(r)||(n=o.getConstValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,s.Type.usize32,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||1!=o.getExpressionType(r)||(n=o.getConstValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function m(e,t,r){var n=e.program,i=e.module,a=n.typesLookup.get("string");if(!a)return i.createUnreachable();var o=n.abortInstance;if(!o||!e.compileFunction(o))return i.createUnreachable();var c=null!=t?e.compileExpression(t,a,1,0):a.toNativeZero(i),l=e.ensureStaticString(r.range.source.normalizedPath);return e.currentType=s.Type.void,i.createBlock(null,[i.createCallImport(o.internalName,[c,l,i.createI32(r.range.line),i.createI32(r.range.column)],0),i.createUnreachable()])}function g(e,t){var r,i,a=e.program;assert(t.type.isManaged(a));var l=t.gcHookIndex;if(-1!=l)return l;var u=t.members;if(t.prototype.declaration.range.source.isLibrary&&null!==u&&u.has("__gc")){var h=assert(u.get("__gc"));assert(h.kind==c.ElementKind.FUNCTION_PROTOTYPE);var d=assert(a.resolver.resolveFunction(h,null));assert(d.is(p.CommonFlags.PRIVATE|p.CommonFlags.INSTANCE)),assert(!d.isAny(p.CommonFlags.AMBIENT|p.CommonFlags.VIRTUAL)),assert(0==d.signature.parameterTypes.length),assert(d.signature.returnType==s.Type.void),d.internalName=t.internalName+"~gc",assert(e.compileFunction(d));var _=e.ensureFunctionTableEntry(d);return t.gcHookIndex=_,_}var m=e.module,y=e.options,E=y.nativeSizeType,f=y.usizeType.byteSize,T=new Array;T.push(m.createIf(m.createUnary(y.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,m.createGetLocal(0,E)),m.createReturn()));var I=e.functionTable,v=I.length;I.push(0),t.gcHookIndex=v;var A=t.base;if(A?(assert(A.type.isManaged(a)),T.push(m.createCallIndirect(m.createI32(g(e,A.type.classReference)),[m.createGetLocal(0,E)],2==E?"Iv":"iv"))):T.push(m.createCall(assert(a.gcMarkInstance).internalName,[m.createGetLocal(0,E)],0)),u)try{for(var C=n(u.values()),N=C.next();!N.done;N=C.next()){var O=N.value;if(O.kind==c.ElementKind.FIELD)if(O.parent===t)if(O.type.isManaged(a)){var S=O.memoryOffset;assert(S>=0),T.push(m.createCall(assert(a.gcMarkInstance).internalName,[m.createLoad(f,!1,m.createGetLocal(0,E),E,S)],0))}}}catch(e){r={error:e}}finally{try{N&&!N.done&&(i=C.return)&&i.call(C)}finally{if(r)throw r.error}}return I[v]=m.addFunction(t.internalName+"~gc",e.ensureFunctionType(null,s.Type.void,y.usizeType),null,m.createBlock(null,T)),v}t.compileCall=u,t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,s=e.options;if(n.hasGC&&t.type.isManaged(n)){var o=assert(n.gcAllocateInstance);return e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset),a.createI32(g(e,t))],s.nativeSizeType)):a.createUnreachable()}return(o=n.memoryAllocateInstance)?e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable():(n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,"memory.allocate"),a.createUnreachable())},t.compileAbort=m,t.compileIterateRoots=function(e){var t,r,i=e.module,a=new Array;try{for(var o=n(e.program.elementsLookup.values()),l=o.next();!l.done;l=o.next()){var u=l.value;if(u.kind==c.ElementKind.GLOBAL){var h=u,d=h.type.classReference;if(h.is(p.CommonFlags.COMPILED)&&null!==d&&!d.hasDecorator(c.DecoratorFlags.UNMANAGED))if(h.is(p.CommonFlags.INLINED)){var _=h.constantIntegerValue;a.push(i.createCallIndirect(i.createGetLocal(0,1),[e.options.isWasm64?i.createI64(i64_low(_),i64_high(_)):i.createI32(i64_low(_))],"iv"))}else a.push(i.createCallIndirect(i.createGetLocal(0,1),[i.createGetGlobal(h.internalName,e.options.nativeSizeType)],"iv"))}}}catch(e){t={error:e}}finally{try{l&&!l.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}var m=e.ensureFunctionType([s.Type.i32],s.Type.void);i.addFunction("~iterateRoots",m,[],a.length?i.createBlock(null,a):i.createNop())},t.ensureGCHook=g},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&&function(e){return!(e<0||e>65535)&&a(e,n)}(e)},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&&function(e){return!(e<0||e>65535)&&a(e,i)}(e)};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(e0||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});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";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.readI8=function(e,t){return e[t]},t.writeI8=function(e,t,r){t[r]=e},t.readI16=function(e,t){return e[t]|e[t+1]<<8},t.writeI16=function(e,t,r){t[r]=e,t[r+1]=e>>>8},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=r(9),i=r(26),a=r(27),s=r(1);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(28);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.diagnosticsOffset0&&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 1:return void this.push(n.getConstValueI32(e).toString(10));case 2:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case 3:return void this.push(n.getConstValueF32(e).toString(10));case 4: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("memory.size()");case n.HostOp.GrowMemory:return this.push("memory.grow("),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 0:return"void";case 1:return"i32";case 2:return"i64";case 3:return"f32";case 4:return"f64";case 5:throw new Error("unreachable type");case-1:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=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}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),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 s=r(0),o=r(4),c=r(2),l=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(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a.element)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;0"),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=l.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var g=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var y=e.range(g,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=l.Node.createType(l.Node.createIdentifierExpression("Array",y),[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 p=l.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),p=l.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!=l.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=l.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),p==l.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):p=l.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 l.ParameterNode;_.parameterKind=p,_.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 c?this.error(o.DiagnosticCode._0_expected,e.range(),")"):e.reset(r),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,l.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=l.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=l.Node.createPropertyAccessExpression(n,l.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return l.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return l.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(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=l.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=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var p=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(p=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.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 l.Node.createVariableDeclaration(n,c,p,r,a,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 a=l.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 p=this.parseEnumValue(e,i.CommonFlags.NONE);if(!p)return null;if(c.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=l.Node.createEnumDeclaration(a,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=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:l.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=l.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=l.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!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return l.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);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==l.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var p=this.parseParameter(e,t);if(!p)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),p.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,p.name.range);break;case l.ParameterKind.OPTIONAL:i=!0;break;case l.ParameterKind.REST:n=p}if(r.push(p),!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,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var p=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(p),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(p)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=l.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=l.Node.createParameter(u,h,d,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,p=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(p=this.parseTypeParameters(e)))return null;t|=i.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=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=l.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=l.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),g=null;if(e.skip(s.Token.OPENBRACE)){if(t&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(g=this.parseBlockStatement(e,!1)))return null}else t&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var y=l.Node.createFunctionDeclaration(a,p,m,g,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),y},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.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=l.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,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var p=null;if(e.skip(s.Token.COLON)){if(!(p=this.parseType(e)))return null}else p=l.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,p.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=l.Node.createSignature(r,p,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=l.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return l.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var a=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,p=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=i.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!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){a&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;a||(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 m,g=new Array;if(a?(assert(!d),m=l.Node.createInterfaceDeclaration(p,c,u,g,r,t,e.range(n,e.pos))):m=l.Node.createClassDeclaration(p,c,u,d,g,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var y=this.parseClassMember(e,m);if(!y)return null;y.parent=m,g.push(y)}while(!e.skip(s.Token.CLOSEBRACE));return m},t.prototype.parseClassExpression=function(e){var t,r=e.tokenPos;if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;var n=new Array,a=l.Node.createClassDeclaration(t,[],null,null,n,null,i.CommonFlags.NONE,e.range(r,e.pos));if(!e.skip(s.Token.CLOSEBRACE))do{var c=this.parseClassMember(e,a);if(!c)return null;c.parent=a,n.push(c)}while(!e.skip(s.Token.CLOSEBRACE));return l.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==l.NodeKind.INTERFACEDECLARATION,a=new Array;e.skip(s.Token.AT);){var c=this.parseDecorator(e);if(!c)break;n&&this.error(o.DiagnosticCode.Decorators_are_not_valid_here,c.range),a.push(c)}var p=t.flags&i.CommonFlags.AMBIENT;n&&(p|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),p|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),p|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),p|=i.CommonFlags.PROTECTED);var u=0,h=0,d=0,_=0;e.skip(s.Token.STATIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"static"),p|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(p|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),p|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(p|=i.CommonFlags.GENERIC_CONTEXT));var m=0,g=0;e.skip(s.Token.READONLY)&&(p|=i.CommonFlags.READONLY,m=e.tokenPos,g=e.pos);var y=e.mark(),E=!1,f=!1,T=!1,I=0,v=0;if(n||(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(p|=i.CommonFlags.GET,f=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(p|=i.CommonFlags.SET|i.CommonFlags.SET,T=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(p|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),p&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?l.Node.createConstructorExpression(e.range()):l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),C=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(C=this.parseTypeParameters(e)))return null;E?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):f||T?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):p|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var O=e.tokenPos,S=this.parseParameters(e,E);if(!S)return null;var L=this.parseParametersThis;if(E)for(var b=0,k=S.length;b"),null):null;case s.Token.IDENTIFIER:return l.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return l.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return l.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return l.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return l.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return l.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return l.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var f=e.readRegexpPattern();return e.skip(s.Token.SLASH)?l.Node.createRegexpLiteralExpression(f,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);case s.Token.CLASS:return this.parseClassExpression(e);default:return t==s.Token.ENDOFFILE?this.error(o.DiagnosticCode.Unexpected_end_of_text,e.range(r)):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,2);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=1),assert(0!=t);var r=this.parseExpressionStart(e);if(!r)return null;var n,i=r.range.start;if(l.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||l.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=l.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var p,d=null;(p=u(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=l.Node.createAssertionExpression(l.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=l.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(d=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,d,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.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=l.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var g=this.parseExpression(e);if(!g)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var y=this.parseExpression(e,t>1?2:1);if(!y)return null;r=l.Node.createTernaryExpression(r,g,y,e.range(i,e.pos));break;case s.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,2)))return null;E.push(r)}while(e.skip(s.Token.COMMA));r=l.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(d=this.parseExpression(e,h(n)?p:p+1)))return null;if(n==s.Token.DOT)if(d.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,d,e.range(i,e.pos));else{if(d.kind!=l.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,d.range),null;var f=d;if(f.expression.kind!=l.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=l.Node.createPropertyAccessExpression(r,f.expression,e.range(i,e.pos)),r=f}else r=l.Node.createBinaryExpression(n,r,d,e.range(i,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.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;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()}}while(r)},t}(o.DiagnosticEmitter);function u(e){switch(e){case s.Token.COMMA:return 1;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 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;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 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function h(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=p,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("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,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},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=12)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.COMPILED=2097152]="COMPILED",e[e.INLINED=4194304]="INLINED",e[e.SCOPED=8388608]="SCOPED",e[e.TRAMPOLINE=16777216]="TRAMPOLINE",e[e.VIRTUAL=33554432]="VIRTUAL",e[e.MAIN=67108864]="MAIN",e[e.QUOTED=134217728]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),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,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(2),s=r(10);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 l=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 p(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?c.substring(l+1):c,o.statements=new Array,o.range=new a.Range(o,0,r.length),o.text=r,o}return n(t,e),Object.defineProperty(t.prototype,"isEntry",{get:function(){return this.sourceKind==q.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==q.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=Z;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.decorators=null,t.cachedProgramLevelInternalName=null,t.cachedFileLevelInternalName=null,t}return n(t,e),Object.defineProperty(t.prototype,"programLevelInternalName",{get:function(){return this.cachedProgramLevelInternalName||(this.cachedProgramLevelInternalName=Re(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=Re(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(j);t.DeclarationStatement=J;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(J);t.VariableLikeDeclarationStatement=$;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(j);t.BlockStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(j);t.BreakStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CLASSDECLARATION,t}return n(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.ClassDeclaration=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(j);t.ContinueStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(j);t.DoStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(j);t.EmptyStatement=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(J);t.EnumDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(J);t.EnumValueDeclaration=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return n(t,e),t}(c);t.ExportImportStatement=ce;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return n(t,e),t}(c);t.ExportMember=le;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(j);t.ExportStatement=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(j);t.ExpressionStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return n(t,e),t}($);t.FieldDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(j);t.ForStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return n(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=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(j);t.IfStatement=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return n(t,e),t}(J);t.ImportDeclaration=ge;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return n(t,e),t}(j);t.ImportStatement=ye;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(re);t.InterfaceDeclaration=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(_e);t.MethodDeclaration=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return n(t,e),t}(J);t.NamespaceDeclaration=Te;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(j);t.ReturnStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return n(t,e),t}(c);t.SwitchCase=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(j);t.SwitchStatement=Ae;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(j);t.ThrowStatement=Ce;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(j);t.TryStatement=Ne;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(J);t.TypeDeclaration=Oe;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return n(t,e),t}($);t.VariableDeclaration=Se;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(j);t.VariableStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(j);t.VoidStatement=be;var ke=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(j);function Re(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=s.VARIABLEDECLARATION||n.kind!=s.VARIABLE||(n=n.parent))?n.kind==s.CLASSDECLARATION?Re(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?Re(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function xe(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function Fe(e,t){for(var r=0,n=e.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),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 s,o=r(0),c=r(1),l=r(7),p=r(3),u=r(5),h=r(11),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function g(e,t){switch(assert(t.length),e){case p.DecoratorKind.OPERATOR:case p.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return s.INDEXED_GET;if("[]="==t)return s.INDEXED_SET;break;case 123:if("{}"==t)return s.UNCHECKED_INDEXED_GET;if("{}="==t)return s.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return s.ADD;break;case 45:if("-"==t)return s.SUB;break;case 42:if("*"==t)return s.MUL;if("**"==t)return s.POW;break;case 47:if("/"==t)return s.DIV;break;case 37:if("%"==t)return s.REM;break;case 38:if("&"==t)return s.BITWISE_AND;break;case 124:if("|"==t)return s.BITWISE_OR;break;case 94:if("^"==t)return s.BITWISE_XOR;break;case 61:if("=="==t)return s.EQ;break;case 33:if("!="==t)return s.NE;break;case 62:if(">"==t)return s.GT;if(">="==t)return s.GE;if(">>"==t)return s.BITWISE_SHR;if(">>>"==t)return s.BITWISE_SHR_U;break;case 60:if("<"==t)return s.LT;if("<="==t)return s.LE;if("<<"==t)return s.BITWISE_SHL}break;case p.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return s.PLUS;if("++"==t)return s.PREFIX_INC;break;case 45:if("-"==t)return s.MINUS;if("--"==t)return s.PREFIX_DEC;break;case 33:if("!"==t)return s.NOT;break;case 126:if("~"==t)return s.BITWISE_NOT}break;case p.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return s.POSTFIX_INC;break;case 45:if("--"==t)return s.POSTFIX_DEC}}return s.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.BITWISE_AND=11]="BITWISE_AND",e[e.BITWISE_OR=12]="BITWISE_OR",e[e.BITWISE_XOR=13]="BITWISE_XOR",e[e.BITWISE_SHL=14]="BITWISE_SHL",e[e.BITWISE_SHR=15]="BITWISE_SHR",e[e.BITWISE_SHR_U=16]="BITWISE_SHR_U",e[e.EQ=17]="EQ",e[e.NE=18]="NE",e[e.GT=19]="GT",e[e.GE=20]="GE",e[e.LT=21]="LT",e[e.LE=22]="LE",e[e.PLUS=23]="PLUS",e[e.MINUS=24]="MINUS",e[e.NOT=25]="NOT",e[e.BITWISE_NOT=26]="BITWISE_NOT",e[e.PREFIX_INC=27]="PREFIX_INC",e[e.PREFIX_DEC=28]="PREFIX_DEC",e[e.POSTFIX_INC=29]="POSTFIX_INC",e[e.POSTFIX_DEC=30]="POSTFIX_DEC"}(s=t.OperatorKind||(t.OperatorKind={}));var y,E,f=new Map,T=function(e){function t(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=f,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayBufferInstance=null,r.arrayPrototype=null,r.stringInstance=null,r.mainFunction=null,r.abortInstance=null,r.memoryAllocateInstance=null,r.hasGC=!1,r.gcAllocateInstance=null,r.gcLinkInstance=null,r.gcMarkInstance=null,r.gcHeaderSize=0,r.gcHookOffset=0,r.resolver=new h.Resolver(r),r.sources=[],r}return n(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r=0),assert(null!=e.type),e.type.toNativeType()){case 1:t=this.tempI32s||(this.tempI32s=[]);break;case 2:t=this.tempI64s||(this.tempI64s=[]);break;case 3:t=this.tempF32s||(this.tempF32s=[]);break;case 4: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 1:r=this.tempI32s||(this.tempI32s=[]);break;case 2:r=this.tempI64s||(this.tempI64s=[]);break;case 3:r=this.tempF32s||(this.tempF32s=[]);break;case 4: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=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|=2047&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritConditional=function(e){e.is(1)&&this.set(64),e.is(4)&&this.set(128),e.is(8)&&e.breakLabel==this.breakLabel&&this.set(256),e.is(16)&&e.continueLabel==this.continueLabel&&this.set(512),e.is(32)&&this.set(1024)},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&63,this.flags|=1984&e.flags,this.flags|=1984&t.flags,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(u.getBinaryLeft(e),t)&&!(u.getExpressionId(r=u.getBinaryRight(e))==u.ExpressionId.Const&&u.getConstValueI32(r)>=a);case u.BinaryOp.DivU32:case u.BinaryOp.RemI32:case u.BinaryOp.RemU32:return this.canOverflow(u.getBinaryLeft(e),t)||this.canOverflow(u.getBinaryRight(e),t)}break;case u.ExpressionId.Unary:switch(u.getUnaryOp(e)){case u.UnaryOp.EqzI32:case u.UnaryOp.EqzI64:return!1;case u.UnaryOp.ClzI32:case u.UnaryOp.CtzI32:case u.UnaryOp.PopcntI32:return t.size<7}break;case u.ExpressionId.Const:var s=0;switch(u.getExpressionType(e)){case 1:s=u.getConstValueI32(e);break;case 2:s=u.getConstValueI64Low(e);break;case 3:s=i32(u.getConstValueF32(e));break;case 4:s=i32(u.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 u.ExpressionId.Load:var o=void 0;switch(u.getLoadBytes(e)){case 1:o=u.isLoadSigned(e)?l.Type.i8:l.Type.u8;break;case 2:o=u.isLoadSigned(e)?l.Type.i16:l.Type.u16;break;default:o=u.isLoadSigned(e)?l.Type.i32:l.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),p=u.getBlockChild(e,c-1);return this.canOverflow(p,t)}break;case u.ExpressionId.If:return this.canOverflow(u.getIfTrue(e),t)||this.canOverflow(assert(u.getIfFalse(e)),t);case u.ExpressionId.Select:return this.canOverflow(u.getSelectThen(e),t)||this.canOverflow(u.getSelectElse(e),t);case u.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(u.getCallTarget(e))));assert(d.kind==y.FUNCTION);var _=d.signature.returnType;return!d.flow.is(2)||z(_,t);case u.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 z(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=K},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(9);!function(e){e[e.None=0]="None",e[e.I32=1]="I32",e[e.I64=2]="I64",e[e.F32=3]="F32",e[e.F64=4]="F64",e[e.Unreachable=5]="Unreachable",e[e.Auto=-1]="Auto"}(t.NativeType||(t.NativeType={})),function(e){e[e.Invalid=_BinaryenInvalidId()]="Invalid",e[e.Block=_BinaryenBlockId()]="Block",e[e.If=_BinaryenIfId()]="If",e[e.Loop=_BinaryenLoopId()]="Loop",e[e.Break=_BinaryenBreakId()]="Break",e[e.Switch=_BinaryenSwitchId()]="Switch",e[e.Call=_BinaryenCallId()]="Call",e[e.CallImport=_BinaryenCallImportId()]="CallImport",e[e.CallIndirect=_BinaryenCallIndirectId()]="CallIndirect",e[e.GetLocal=_BinaryenGetLocalId()]="GetLocal",e[e.SetLocal=_BinaryenSetLocalId()]="SetLocal",e[e.GetGlobal=_BinaryenGetGlobalId()]="GetGlobal",e[e.SetGlobal=_BinaryenSetGlobalId()]="SetGlobal",e[e.Load=_BinaryenLoadId()]="Load",e[e.Store=_BinaryenStoreId()]="Store",e[e.Const=_BinaryenConstId()]="Const",e[e.Unary=_BinaryenUnaryId()]="Unary",e[e.Binary=_BinaryenBinaryId()]="Binary",e[e.Select=_BinaryenSelectId()]="Select",e[e.Drop=_BinaryenDropId()]="Drop",e[e.Return=_BinaryenReturnId()]="Return",e[e.Host=_BinaryenHostId()]="Host",e[e.Nop=_BinaryenNopId()]="Nop",e[e.Unreachable=_BinaryenUnreachableId()]="Unreachable",e[e.AtomicCmpxchg=_BinaryenAtomicCmpxchgId()]="AtomicCmpxchg",e[e.AtomicRMW=_BinaryenAtomicRMWId()]="AtomicRMW",e[e.AtomicWait=_BinaryenAtomicWaitId()]="AtomicWait",e[e.AtomicWake=_BinaryenAtomicWakeId()]="AtomicWake"}(n=t.ExpressionId||(t.ExpressionId={})),function(e){e[e.ClzI32=_BinaryenClzInt32()]="ClzI32",e[e.CtzI32=_BinaryenCtzInt32()]="CtzI32",e[e.PopcntI32=_BinaryenPopcntInt32()]="PopcntI32",e[e.NegF32=_BinaryenNegFloat32()]="NegF32",e[e.AbsF32=_BinaryenAbsFloat32()]="AbsF32",e[e.CeilF32=_BinaryenCeilFloat32()]="CeilF32",e[e.FloorF32=_BinaryenFloorFloat32()]="FloorF32",e[e.TruncF32=_BinaryenTruncFloat32()]="TruncF32",e[e.NearestF32=_BinaryenNearestFloat32()]="NearestF32",e[e.SqrtF32=_BinaryenSqrtFloat32()]="SqrtF32",e[e.EqzI32=_BinaryenEqZInt32()]="EqzI32",e[e.ClzI64=_BinaryenClzInt64()]="ClzI64",e[e.CtzI64=_BinaryenCtzInt64()]="CtzI64",e[e.PopcntI64=_BinaryenPopcntInt64()]="PopcntI64",e[e.NegF64=_BinaryenNegFloat64()]="NegF64",e[e.AbsF64=_BinaryenAbsFloat64()]="AbsF64",e[e.CeilF64=_BinaryenCeilFloat64()]="CeilF64",e[e.FloorF64=_BinaryenFloorFloat64()]="FloorF64",e[e.TruncF64=_BinaryenTruncFloat64()]="TruncF64",e[e.NearestF64=_BinaryenNearestFloat64()]="NearestF64",e[e.SqrtF64=_BinaryenSqrtFloat64()]="SqrtF64",e[e.EqzI64=_BinaryenEqZInt64()]="EqzI64",e[e.ExtendI32=_BinaryenExtendSInt32()]="ExtendI32",e[e.ExtendU32=_BinaryenExtendUInt32()]="ExtendU32",e[e.WrapI64=_BinaryenWrapInt64()]="WrapI64",e[e.TruncF32ToI32=_BinaryenTruncSFloat32ToInt32()]="TruncF32ToI32",e[e.TruncF32ToI64=_BinaryenTruncSFloat32ToInt64()]="TruncF32ToI64",e[e.TruncF32ToU32=_BinaryenTruncUFloat32ToInt32()]="TruncF32ToU32",e[e.TruncF32ToU64=_BinaryenTruncUFloat32ToInt64()]="TruncF32ToU64",e[e.TruncF64ToI32=_BinaryenTruncSFloat64ToInt32()]="TruncF64ToI32",e[e.TruncF64ToI64=_BinaryenTruncSFloat64ToInt64()]="TruncF64ToI64",e[e.TruncF64ToU32=_BinaryenTruncUFloat64ToInt32()]="TruncF64ToU32",e[e.TruncF64ToU64=_BinaryenTruncUFloat64ToInt64()]="TruncF64ToU64",e[e.ReinterpretF32=_BinaryenReinterpretFloat32()]="ReinterpretF32",e[e.ReinterpretF64=_BinaryenReinterpretFloat64()]="ReinterpretF64",e[e.ConvertI32ToF32=_BinaryenConvertSInt32ToFloat32()]="ConvertI32ToF32",e[e.ConvertI32ToF64=_BinaryenConvertSInt32ToFloat64()]="ConvertI32ToF64",e[e.ConvertU32ToF32=_BinaryenConvertUInt32ToFloat32()]="ConvertU32ToF32",e[e.ConvertU32ToF64=_BinaryenConvertUInt32ToFloat64()]="ConvertU32ToF64",e[e.ConvertI64ToF32=_BinaryenConvertSInt64ToFloat32()]="ConvertI64ToF32",e[e.ConvertI64ToF64=_BinaryenConvertSInt64ToFloat64()]="ConvertI64ToF64",e[e.ConvertU64ToF32=_BinaryenConvertUInt64ToFloat32()]="ConvertU64ToF32",e[e.ConvertU64ToF64=_BinaryenConvertUInt64ToFloat64()]="ConvertU64ToF64",e[e.PromoteF32=_BinaryenPromoteFloat32()]="PromoteF32",e[e.DemoteF64=_BinaryenDemoteFloat64()]="DemoteF64",e[e.ReinterpretI32=_BinaryenReinterpretInt32()]="ReinterpretI32",e[e.ReinterpretI64=_BinaryenReinterpretInt64()]="ReinterpretI64",e[e.ExtendI8ToI32=_BinaryenExtendS8Int32()]="ExtendI8ToI32",e[e.ExtendI16ToI32=_BinaryenExtendS16Int32()]="ExtendI16ToI32",e[e.ExtendI8ToI64=_BinaryenExtendS8Int64()]="ExtendI8ToI64",e[e.ExtendI16ToI64=_BinaryenExtendS16Int64()]="ExtendI16ToI64",e[e.ExtendI32ToI64=_BinaryenExtendS32Int64()]="ExtendI32ToI64"}(t.UnaryOp||(t.UnaryOp={})),function(e){e[e.AddI32=_BinaryenAddInt32()]="AddI32",e[e.SubI32=_BinaryenSubInt32()]="SubI32",e[e.MulI32=_BinaryenMulInt32()]="MulI32",e[e.DivI32=_BinaryenDivSInt32()]="DivI32",e[e.DivU32=_BinaryenDivUInt32()]="DivU32",e[e.RemI32=_BinaryenRemSInt32()]="RemI32",e[e.RemU32=_BinaryenRemUInt32()]="RemU32",e[e.AndI32=_BinaryenAndInt32()]="AndI32",e[e.OrI32=_BinaryenOrInt32()]="OrI32",e[e.XorI32=_BinaryenXorInt32()]="XorI32",e[e.ShlI32=_BinaryenShlInt32()]="ShlI32",e[e.ShrU32=_BinaryenShrUInt32()]="ShrU32",e[e.ShrI32=_BinaryenShrSInt32()]="ShrI32",e[e.RotlI32=_BinaryenRotLInt32()]="RotlI32",e[e.RotrI32=_BinaryenRotRInt32()]="RotrI32",e[e.EqI32=_BinaryenEqInt32()]="EqI32",e[e.NeI32=_BinaryenNeInt32()]="NeI32",e[e.LtI32=_BinaryenLtSInt32()]="LtI32",e[e.LtU32=_BinaryenLtUInt32()]="LtU32",e[e.LeI32=_BinaryenLeSInt32()]="LeI32",e[e.LeU32=_BinaryenLeUInt32()]="LeU32",e[e.GtI32=_BinaryenGtSInt32()]="GtI32",e[e.GtU32=_BinaryenGtUInt32()]="GtU32",e[e.GeI32=_BinaryenGeSInt32()]="GeI32",e[e.GeU32=_BinaryenGeUInt32()]="GeU32",e[e.AddI64=_BinaryenAddInt64()]="AddI64",e[e.SubI64=_BinaryenSubInt64()]="SubI64",e[e.MulI64=_BinaryenMulInt64()]="MulI64",e[e.DivI64=_BinaryenDivSInt64()]="DivI64",e[e.DivU64=_BinaryenDivUInt64()]="DivU64",e[e.RemI64=_BinaryenRemSInt64()]="RemI64",e[e.RemU64=_BinaryenRemUInt64()]="RemU64",e[e.AndI64=_BinaryenAndInt64()]="AndI64",e[e.OrI64=_BinaryenOrInt64()]="OrI64",e[e.XorI64=_BinaryenXorInt64()]="XorI64",e[e.ShlI64=_BinaryenShlInt64()]="ShlI64",e[e.ShrU64=_BinaryenShrUInt64()]="ShrU64",e[e.ShrI64=_BinaryenShrSInt64()]="ShrI64",e[e.RotlI64=_BinaryenRotLInt64()]="RotlI64",e[e.RotrI64=_BinaryenRotRInt64()]="RotrI64",e[e.EqI64=_BinaryenEqInt64()]="EqI64",e[e.NeI64=_BinaryenNeInt64()]="NeI64",e[e.LtI64=_BinaryenLtSInt64()]="LtI64",e[e.LtU64=_BinaryenLtUInt64()]="LtU64",e[e.LeI64=_BinaryenLeSInt64()]="LeI64",e[e.LeU64=_BinaryenLeUInt64()]="LeU64",e[e.GtI64=_BinaryenGtSInt64()]="GtI64",e[e.GtU64=_BinaryenGtUInt64()]="GtU64",e[e.GeI64=_BinaryenGeSInt64()]="GeI64",e[e.GeU64=_BinaryenGeUInt64()]="GeU64",e[e.AddF32=_BinaryenAddFloat32()]="AddF32",e[e.SubF32=_BinaryenSubFloat32()]="SubF32",e[e.MulF32=_BinaryenMulFloat32()]="MulF32",e[e.DivF32=_BinaryenDivFloat32()]="DivF32",e[e.CopysignF32=_BinaryenCopySignFloat32()]="CopysignF32",e[e.MinF32=_BinaryenMinFloat32()]="MinF32",e[e.MaxF32=_BinaryenMaxFloat32()]="MaxF32",e[e.EqF32=_BinaryenEqFloat32()]="EqF32",e[e.NeF32=_BinaryenNeFloat32()]="NeF32",e[e.LtF32=_BinaryenLtFloat32()]="LtF32",e[e.LeF32=_BinaryenLeFloat32()]="LeF32",e[e.GtF32=_BinaryenGtFloat32()]="GtF32",e[e.GeF32=_BinaryenGeFloat32()]="GeF32",e[e.AddF64=_BinaryenAddFloat64()]="AddF64",e[e.SubF64=_BinaryenSubFloat64()]="SubF64",e[e.MulF64=_BinaryenMulFloat64()]="MulF64",e[e.DivF64=_BinaryenDivFloat64()]="DivF64",e[e.CopysignF64=_BinaryenCopySignFloat64()]="CopysignF64",e[e.MinF64=_BinaryenMinFloat64()]="MinF64",e[e.MaxF64=_BinaryenMaxFloat64()]="MaxF64",e[e.EqF64=_BinaryenEqFloat64()]="EqF64",e[e.NeF64=_BinaryenNeFloat64()]="NeF64",e[e.LtF64=_BinaryenLtFloat64()]="LtF64",e[e.LeF64=_BinaryenLeFloat64()]="LeF64",e[e.GtF64=_BinaryenGtFloat64()]="GtF64",e[e.GeF64=_BinaryenGeFloat64()]="GeF64"}(t.BinaryOp||(t.BinaryOp={})),function(e){e[e.CurrentMemory=_BinaryenCurrentMemory()]="CurrentMemory",e[e.GrowMemory=_BinaryenGrowMemory()]="GrowMemory"}(t.HostOp||(t.HostOp={})),function(e){e[e.Add=_BinaryenAtomicRMWAdd()]="Add",e[e.Sub=_BinaryenAtomicRMWSub()]="Sub",e[e.And=_BinaryenAtomicRMWAnd()]="And",e[e.Or=_BinaryenAtomicRMWOr()]="Or",e[e.Xor=_BinaryenAtomicRMWXor()]="Xor",e[e.Xchg=_BinaryenAtomicRMWXchg()]="Xchg"}(t.AtomicRMWOp||(t.AtomicRMWOp={}));var a=function(){function e(){}return e.create=function(t,r){var n=new e;return n.buffer=t,n.offset=r,n},e}();t.MemorySegment=a;var s=function(){function e(){this.cachedTemporaryName=0,this.hasTemporaryFunction=!1,this.cachedPrecomputeName=0,this.cachedPrecomputeNames=0}return e.create=function(){var t=new e;return t.ref=_BinaryenModuleCreate(),t.cachedByValue=memory.allocate(16),t},e.createFrom=function(t){var r=c(t);try{var n=new e;return n.ref=_BinaryenModuleRead(r,t.length),n.cachedByValue=memory.allocate(24),n}finally{memory.free(changetype(r))}},e.prototype.addFunctionType=function(e,t,r){var n=u(e),i=l(r);try{return _BinaryenAddFunctionType(this.ref,n,t,i,r?r.length:0)}finally{memory.free(i),memory.free(n)}},e.prototype.getFunctionTypeBySignature=function(e,t){var r=l(t);try{return _BinaryenGetFunctionTypeBySignature(this.ref,e,r,t?t.length:0)}finally{memory.free(r)}},e.prototype.removeFunctionType=function(e){var t=u(e);try{_BinaryenRemoveFunctionType(this.ref,t)}finally{memory.free(t)}},e.prototype.createI32=function(e){var t=this.cachedByValue;return _BinaryenLiteralInt32(t,e),_BinaryenConst(this.ref,t)},e.prototype.createI64=function(e,t){void 0===t&&(t=0);var r=this.cachedByValue;return _BinaryenLiteralInt64(r,e,t),_BinaryenConst(this.ref,r)},e.prototype.createF32=function(e){var t=this.cachedByValue;return _BinaryenLiteralFloat32(t,e),_BinaryenConst(this.ref,t)},e.prototype.createF64=function(e){var t=this.cachedByValue;return _BinaryenLiteralFloat64(t,e),_BinaryenConst(this.ref,t)},e.prototype.createUnary=function(e,t){return _BinaryenUnary(this.ref,e,t)},e.prototype.createBinary=function(e,t,r){return _BinaryenBinary(this.ref,e,t,r)},e.prototype.createHost=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=null);var n=u(t),i=p(r);try{return _BinaryenHost(this.ref,e,n,i,r?r.length:0)}finally{memory.free(i),memory.free(n)}},e.prototype.createGetLocal=function(e,t){return _BinaryenGetLocal(this.ref,e,t)},e.prototype.createTeeLocal=function(e,t){return _BinaryenTeeLocal(this.ref,e,t)},e.prototype.createGetGlobal=function(e,t){var r=u(e);try{return _BinaryenGetGlobal(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createLoad=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenLoad(this.ref,e,t?1:0,i,e,n,r)},e.prototype.createStore=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenStore(this.ref,e,i,e,t,r,n)},e.prototype.createAtomicLoad=function(e,t,r,n){return void 0===n&&(n=0),_BinaryenAtomicLoad(this.ref,e,n,r,t)},e.prototype.createAtomicStore=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenAtomicStore(this.ref,e,i,t,r,n)},e.prototype.createAtomicRMW=function(e,t,r,n,i,a){return _BinaryenAtomicRMW(this.ref,e,t,r,n,i,a)},e.prototype.createAtomicCmpxchg=function(e,t,r,n,i,a){return _BinaryenAtomicCmpxchg(this.ref,e,t,r,n,i,a)},e.prototype.createAtomicWait=function(e,t,r,n){return _BinaryenAtomicWait(this.ref,e,t,r,n)},e.prototype.createAtomicWake=function(e,t){return _BinaryenAtomicWake(this.ref,e,t)},e.prototype.createSetLocal=function(e,t){return _BinaryenSetLocal(this.ref,e,t)},e.prototype.createSetGlobal=function(e,t){var r=u(e);try{return _BinaryenSetGlobal(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createBlock=function(e,t,r){void 0===r&&(r=0);var n=u(e),i=p(t);try{return _BinaryenBlock(this.ref,n,i,t.length,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createBreak=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=0);var n=u(e);try{return _BinaryenBreak(this.ref,n,t,r)}finally{memory.free(n)}},e.prototype.createDrop=function(e){return _BinaryenDrop(this.ref,e)},e.prototype.createLoop=function(e,t){var r=u(e);try{return _BinaryenLoop(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createIf=function(e,t,r){return void 0===r&&(r=0),_BinaryenIf(this.ref,e,t,r)},e.prototype.createNop=function(){return _BinaryenNop(this.ref)},e.prototype.createReturn=function(e){return void 0===e&&(e=0),_BinaryenReturn(this.ref,e)},e.prototype.createSelect=function(e,t,r){return _BinaryenSelect(this.ref,r,e,t)},e.prototype.createSwitch=function(e,t,r,n){void 0===n&&(n=0);for(var i=e.length,a=new Array(i),s=0;s=0;--s)memory.free(a[s])}},e.prototype.createCall=function(e,t,r){var n=u(e),i=p(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createCallImport=function(e,t,r){var n=u(e),i=p(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=p(t),i=u(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{memory.free(i),memory.free(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=u(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{memory.free(i)}},e.prototype.addFunction=function(e,t,r,n){var i=u(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{memory.free(a),memory.free(i)}},e.prototype.removeFunction=function(e){var t=u(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{memory.free(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=u(""));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{memory.free(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=u(e),n=u(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addTableExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addMemoryExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addGlobalExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.removeExport=function(e){var t=u(e);try{_BinaryenRemoveExport(this.ref,t)}finally{memory.free(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=u(e),a=u(t),s=u(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.addTableImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{memory.free(a),memory.free(i),memory.free(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{memory.free(a),memory.free(i),memory.free(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=u(e),a=u(t),s=u(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.removeImport=function(e){var t=u(e);try{_BinaryenRemoveImport(this.ref,t)}finally{memory.free(t)}},e.prototype.setMemory=function(e,t,r,n,a){void 0===a&&(a=null);for(var s=u(a),o=r.length,p=new Array(o),h=new Array(o),d=new Array(o),_=0;_=0;--_)memory.free(p[_]);memory.free(s)}},e.prototype.setFunctionTable=function(e){for(var t=e.length,r=new Array(t),n=0;n=0;--n)memory.free(r[n])}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.getOptimizeLevel=function(){return _BinaryenGetOptimizeLevel()},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.getShrinkLevel=function(){return _BinaryenGetShrinkLevel()},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)memory.free(n[i])}},e.prototype.precomputeExpression=function(e){var t=_BinaryenGetOptimizeLevel(),r=_BinaryenGetShrinkLevel(),n=_BinaryenGetDebugInfo();_BinaryenSetOptimizeLevel(4),_BinaryenSetShrinkLevel(0),_BinaryenSetDebugInfo(!1);var i=_BinaryenExpressionGetType(e),a=this.addTemporaryFunction(i,null,e),s=this.cachedPrecomputeNames;if(!s){var o=u("precompute");this.cachedPrecomputeName=o,this.cachedPrecomputeNames=s=l([o])}return _BinaryenFunctionRunPasses(a,this.ref,s,1),e=_BinaryenFunctionGetBody(a),this.removeTemporaryFunction(),_BinaryenSetOptimizeLevel(t),_BinaryenSetShrinkLevel(r),_BinaryenSetDebugInfo(n),e},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=u(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=h(t);var a=h(t+4);i=h(t+8);var s=new _;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 p(e){return l(e)}function u(e){if(null==e)return 0;for(var t=memory.allocate(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function h(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function d(e){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=o,t.readString=d;var _=function(){return function(){}}();t.BinaryModule=_,t.needsExplicitUnreachable=function e(t){switch(_BinaryenExpressionGetType(t)){case 1:case 2:case 3:case 4:return!1}switch(_BinaryenExpressionGetId(t)){case n.Unreachable:case n.Return:return!1;case n.Break:return 0!=_BinaryenBreakGetCondition(t);case n.Block:if(!_BinaryenBlockGetName(t)){var r=_BinaryenBlockGetNumChildren(t);return r>0&&e(_BinaryenBlockGetChild(t,r-1))}}return!0}},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);!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:return e.i8;case 1:return e.i16;case 11:case 2:return e.i32;case 12:case 3:return e.i64;case 4:return 64==this.size?e.isize64:e.isize32;case 5:return e.u8;case 6:return e.u16;case 7:return e.u32;case 8:return e.u64;case 9:return 64==this.size?e.usize64:e.usize32;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.isManaged=function(e){if(e.hasGC){var t=this.classReference;return null!==t&&!t.hasDecorator(n.DecoratorFlags.UNMANAGED)}return!1},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.nonNullableType=this,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)&&(!this.is(512)||e.is(512)))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){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return 1;case 3:case 8:return 2;case 4:case 9:return 64==this.size?2:1;case 11:return 3;case 12:return 4;case 13:return 0}},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=l&&u!=p?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";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a,s=r(1),o=r(3),c=r(2);function l(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return i.ABSTRACT;case"as":return i.AS;case"async":return i.ASYNC;case"await":return i.AWAIT}break;case 98:switch(e){case"break":return i.BREAK}break;case 99:switch(e){case"case":return i.CASE;case"catch":return i.CATCH;case"class":return i.CLASS;case"continue":return i.CONTINUE;case"const":return i.CONST;case"constructor":return i.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return i.DEBUGGER;case"declare":return i.DECLARE;case"default":return i.DEFAULT;case"delete":return i.DELETE;case"do":return i.DO}break;case 101:switch(e){case"else":return i.ELSE;case"enum":return i.ENUM;case"export":return i.EXPORT;case"extends":return i.EXTENDS}break;case 102:switch(e){case"false":return i.FALSE;case"finally":return i.FINALLY;case"for":return i.FOR;case"from":return i.FROM;case"function":return i.FUNCTION}break;case 103:switch(e){case"get":return i.GET}break;case 105:switch(e){case"if":return i.IF;case"implements":return i.IMPLEMENTS;case"import":return i.IMPORT;case"in":return i.IN;case"instanceof":return i.INSTANCEOF;case"interface":return i.INTERFACE;case"is":return i.IS}break;case 107:switch(e){case"keyof":return i.KEYOF}break;case 108:switch(e){case"let":return i.LET}break;case 109:switch(e){case"module":return i.MODULE}break;case 110:switch(e){case"namespace":return i.NAMESPACE;case"new":return i.NEW;case"null":return i.NULL}break;case 111:switch(e){case"of":return i.OF}break;case 112:switch(e){case"package":return i.PACKAGE;case"private":return i.PRIVATE;case"protected":return i.PROTECTED;case"public":return i.PUBLIC}break;case 114:switch(e){case"readonly":return i.READONLY;case"return":return i.RETURN}break;case 115:switch(e){case"set":return i.SET;case"static":return i.STATIC;case"super":return i.SUPER;case"switch":return i.SWITCH}break;case 116:switch(e){case"this":return i.THIS;case"throw":return i.THROW;case"true":return i.TRUE;case"try":return i.TRY;case"type":return i.TYPE;case"typeof":return i.TYPEOF}break;case 118:switch(e){case"var":return i.VAR;case"void":return i.VOID}break;case 119:switch(e){case"while":return i.WHILE;case"with":return i.WITH}break;case 121:switch(e){case"yield":return i.YIELD}}return i.INVALID}function p(e){switch(e){case i.ABSTRACT:case i.AS:case i.CONSTRUCTOR:case i.DECLARE:case i.DELETE:case i.FROM:case i.FOR:case i.GET:case i.IS:case i.KEYOF:case i.MODULE:case i.NAMESPACE:case i.READONLY:case i.SET:case i.TYPE:return!0;default:return!1}}!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(a=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=l,t.tokenIsAlsoIdentifier=p,t.operatorTokenToString=function(e){switch(e){case i.DELETE:return"delete";case i.IN:return"in";case i.INSTANCEOF:return"instanceof";case i.NEW:return"new";case i.TYPEOF:return"typeof";case i.VOID:return"void";case i.YIELD:return"yield";case i.DOT_DOT_DOT:return"...";case i.COMMA:return",";case i.LESSTHAN:return"<";case i.GREATERTHAN:return">";case i.LESSTHAN_EQUALS:return"<=";case i.GREATERTHAN_EQUALS:return">=";case i.EQUALS_EQUALS:return"==";case i.EXCLAMATION_EQUALS:return"!=";case i.EQUALS_EQUALS_EQUALS:return"===";case i.EXCLAMATION_EQUALS_EQUALS:return"!==";case i.PLUS:return"+";case i.MINUS:return"-";case i.ASTERISK_ASTERISK:return"**";case i.ASTERISK:return"*";case i.SLASH:return"/";case i.PERCENT:return"%";case i.PLUS_PLUS:return"++";case i.MINUS_MINUS:return"--";case i.LESSTHAN_LESSTHAN:return"<<";case i.GREATERTHAN_GREATERTHAN:return">>";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case i.AMPERSAND:return"&";case i.BAR:return"|";case i.CARET:return"^";case i.EXCLAMATION:return"!";case i.TILDE:return"~";case i.AMPERSAND_AMPERSAND:return"&&";case i.BAR_BAR:return"||";case i.EQUALS:return"=";case i.PLUS_EQUALS:return"+=";case i.MINUS_EQUALS:return"-=";case i.ASTERISK_EQUALS:return"*=";case i.ASTERISK_ASTERISK_EQUALS:return"**=";case i.SLASH_EQUALS:return"/=";case i.PERCENT_EQUALS:return"%=";case i.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case i.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case i.AMPERSAND_EQUALS:return"&=";case i.BAR_EQUALS:return"|=";case i.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.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)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),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),a=t;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";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=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}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),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 s,o=r(20),c=r(1),l=r(5),p=r(0),u=r(4),h=r(8),d=r(3),_=r(7),m=r(2);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var g=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.importMemory=!1,this.importTable=!1,this.sourceMap=!1,this.memoryBase=0,this.globalAliases=null,this.features=0,this.optimizeLevelHint=0,this.shrinkLevelHint=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?_.Type.usize64:_.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?_.Type.isize64:_.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?2:1},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=g,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 y,E,f=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentInlineFunctions=[],n.currentEnum=null,n.currentType=_.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.needsIterateRoots=!1,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new g),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=l.Module.create(),n}return n(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e,t,r=this.options,n=this.module,s=this.program;s.initialize(r);var c=new u.Function(s.startFunction,"start",new _.Signature([],_.Type.void));this.startFunctionInstance=c;var p=new Array;this.startFunctionBody=p,this.currentFunction=c;for(var h=s.sources,d=0,m=h.length;d"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT)&&e.hasDecorator(u.DecoratorFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.is(p.CommonFlags.CONST)||e.is(p.CommonFlags.STATIC|p.CommonFlags.READONLY);if(e.is(p.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(p.CommonFlags.MODULE_IMPORT),r?T(e,r,e.parent):(y="env",E=e.simpleName),t.addGlobalImport(e.internalName,y,E,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;if(null!==r&&null!==r.initializer){if(n||(n=this.compileExpression(r.initializer,e.type,1,1)),l.getExpressionId(n)!=l.ExpressionId.Const&&(s?(n=t.precomputeExpression(n),l.getExpressionId(n)!=l.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0),e.hasDecorator(u.DecoratorFlags.INLINE)&&!o){switch(assert(l.getExpressionId(n)==l.ExpressionId.Const),l.getExpressionType(n)){case 1:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI32(n),0);break;case 2:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI64Low(n),l.getConstValueI64High(n));break;case 3:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF32(n);break;case 4:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED)}}else n=e.type.toNativeZero(t);var h=e.internalName;return o?(t.addGlobal(h,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(h,n))):t.addGlobal(h,a,!s,n),!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(p.CommonFlags.COMPILED))return!0;e.set(p.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var a=null,s=!1;if(e.members)try{for(var o=i(e.members.values()),h=o.next();!h.done;h=o.next()){var d=h.value;if(d.kind==u.ElementKind.ENUMVALUE){var m=!1,g=d,y=g.declaration;g.set(p.CommonFlags.COMPILED);var E=void 0;y.value?(E=this.compileExpression(y.value,_.Type.i32,1,0),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)?(E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,y.value.range),m=!0)):m=!0)):null==a?E=n.createI32(0):(s&&this.error(c.DiagnosticCode.Enum_member_must_have_initializer,y.range),E=n.createBinary(l.BinaryOp.AddI32,n.createGetGlobal(a.internalName,1),n.createI32(1)),E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,y.range),m=!0)),m?(n.addGlobal(g.internalName,1,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(g.internalName,E)),s=!0):(n.addGlobal(g.internalName,1,!e.is(p.CommonFlags.CONST),E),s=!1),a=g}}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=this.resolver.resolveFunctionInclTypeArguments(e,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(p.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+h.toString(10):"break")+"|"+a);var g=t.createBlock("case0|"+a,p,0),y=!0,E=!0,f=!0,T=!0;for(d=0;d=0&&(y&&s.set(1),E&&s.set(2),f&&s.set(4),T&&s.set(32)),g},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(4),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.startFunctionInstance&&e.parent&&e.parent.kind==d.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var T=!1;if(g.is(p.CommonFlags.CONST))if(f)if(f=this.module.precomputeExpression(f),l.getExpressionId(f)==l.ExpressionId.Const){var I=new u.Local(r,y,-1,E);switch(l.getExpressionType(f)){case 1:I=I.withConstantIntegerValue(i64_new(l.getConstValueI32(f),0));break;case 2:I=I.withConstantIntegerValue(i64_new(l.getConstValueI64Low(f),l.getConstValueI64High(f)));break;case 3:I=I.withConstantFloatValue(l.getConstValueF32(f));break;case 4:I=I.withConstantFloatValue(l.getConstValueF64(f));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,g.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=v=new Map;v.set(y,I),T=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,g.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,g.range);if(!T){I=void 0;I=g.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||h.is(2048)?h.addScopedLocal(E,y,!1,g):n.addLocal(E,y,g),f?(o.push(this.compileAssignmentWithValue(g.name,f)),I.type.is(36)&&h.setLocalWrapped(I.index,!h.canOverflow(f,E))):I.type.is(36)&&h.setLocalWrapped(I.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,0):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=t.precomputeExpression(r);if(l.getExpressionId(n)==l.ExpressionId.Const&&1==l.getExpressionType(n)){if(!l.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var c="break|"+a;o.breakLabel=c;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),d=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(c,[t.createLoop(u,t.createIf(r,d?h:t.createBlock(null,[h,t.createBreak(u)],0)))])},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(p.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(_.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.hasDecorator(u.DecoratorFlags.BUILTIN)||t!=_.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=_.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 d.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case d.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case d.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case d.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case d.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case d.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case d.NodeKind.IDENTIFIER:case d.NodeKind.FALSE:case d.NodeKind.NULL:case d.NodeKind.THIS:case d.NodeKind.SUPER:case d.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case d.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case d.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case d.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case d.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case d.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case d.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case d.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case d.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(c.DiagnosticCode.Operation_not_supported,e.range),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==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.module.precomputeExpression(this.compileExpression(e,t,r,n))},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):(t.isAssignableTo(r)||1==n&&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(l.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(l.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToI64,e):s.createUnary(l.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToU64,e):s.createUnary(l.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToI64,e):s.createUnary(l.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToU64,e):s.createUnary(l.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)?l.UnaryOp.ConvertI64ToF32:l.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF32:l.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF64:l.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF64:l.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(l.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(t.is(1)?l.UnaryOp.ExtendI32:l.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GtI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GtU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GtU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GtF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GtF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.LE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.LeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeI64:l.BinaryOp.LeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.LeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeU64:l.BinaryOp.LeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.LeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.LeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.LeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.GE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeI64:l.BinaryOp.GeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeU64:l.BinaryOp.GeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS_EQUALS_EQUALS:case h.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,y==h.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.EQ)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.EqI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.EqI64:l.BinaryOp.EqI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.EqI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.EqF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.EqF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EXCLAMATION_EQUALS_EQUALS:case h.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,y==h.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.NE)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.NeI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.NeI64:l.BinaryOp.NeI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.NeI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.NeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.NeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS:return this.compileAssignment(d,m,t);case h.Token.PLUS_EQUALS:g=!0;case h.Token.PLUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.ADD)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.AddI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AddI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.AddF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.AddF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.MINUS_EQUALS:g=!0;case h.Token.MINUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.SUB)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.SubI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.SubI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.SubF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.SubF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_EQUALS:g=!0;case h.Token.ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.MUL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.MulI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.MulI64:l.BinaryOp.MulI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.MulI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.MulF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.MulF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_ASTERISK_EQUALS:g=!0;case h.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.POW)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,_.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(T,null)}}else if(r=this.convertExpression(r,this.currentType,_.Type.f64,1,0,d),n=this.currentType,i=this.compileExpression(m,_.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case h.Token.SLASH_EQUALS:g=!0;case h.Token.SLASH:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.DIV)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.DivI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivI64:l.BinaryOp.DivI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.DivU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivU64:l.BinaryOp.DivU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.DivU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.DivF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.DivF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.PERCENT_EQUALS:g=!0;case h.Token.PERCENT:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.REM)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.RemI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemI64:l.BinaryOp.RemI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.RemU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemU64:l.BinaryOp.RemU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var f,T;if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.LESSTHAN_LESSTHAN_EQUALS:g=!0;case h.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShlI64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case h.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.ShrI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.ShrI64,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrI64:l.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR_U)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_EQUALS:g=!0;case h.Token.AMPERSAND:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_AND)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.AndI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AndI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AndI64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.BAR_EQUALS:g=!0;case h.Token.BAR:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_OR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.OrI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.OrI64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.CARET_EQUALS:g=!0;case h.Token.CARET:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_XOR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.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,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.XorI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.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,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=p.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=p.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),i,p.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case h.Token.BAR_BAR:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,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,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),p.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return g?this.compileAssignmentWithValue(d,o,t!=_.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(p.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(p.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==u.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program.resolver,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=_.Type.void);case u.ElementKind.LOCAL:case u.ElementKind.FIELD:n=s.type;break;case u.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var l=this.resolver.resolveFunction(o,null);if(!l)return this.module.createUnreachable();assert(1==l.signature.parameterTypes.length),n=l.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 u.ElementKind.CLASS:if(i.currentElementExpression){var p=a.flow.is(4096),h=s.lookupOverload(u.OperatorKind.INDEXED_SET,p);if(!h)return s.lookupOverload(u.OperatorKind.INDEXED_GET,p)?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()}assert(n!=_.Type.void);var d=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,d,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case u.ElementKind.LOCAL:var a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.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 u.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.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(),l=i.internalName;return n.createBlock(null,[n.createSetGlobal(l,t),n.createGetGlobal(l,o)],o)}return n.createSetGlobal(i.internalName,t);case u.ElementKind.FIELD:var h=i.declaration;if(i.is(p.CommonFlags.READONLY)&&!this.currentFunction.is(p.CommonFlags.CONSTRUCTOR)&&null!=h&&null==h.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 d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var g=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(g,t),n.createStore(a.byteSize,m,n.createGetLocal(g,o),o,i.memoryOffset),n.createGetLocal(g,o)],o)}return n.createStore(a.byteSize,m,t,o,i.memoryOffset);case u.ElementKind.PROPERTY:var y=i.setterPrototype;if(y){var E=this.resolver.resolveFunction(y,null);if(!E)return n.createUnreachable();if(!r){if(E.is(p.CommonFlags.INSTANCE)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var f=i.getterPrototype;assert(null!=f);var T=this.resolver.resolveFunction(f,null);if(!T)return n.createUnreachable();var I=(R=T.signature.returnType).toNativeType();if(E.is(p.CommonFlags.INSTANCE)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),g=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(E,[n.createTeeLocal(g,m),t]),this.makeCallDirect(T,[n.createGetLocal(g,I)])],I)}return n.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(T)],I)}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 u.ElementKind.CLASS:var v=this.resolver.currentElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(u.OperatorKind.INDEXED_GET,A);if(!C)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(u.OperatorKind.INDEXED_SET,A);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:_.Type.void,n.createUnreachable();var O=i.type,S=(d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),this.compileExpression(v,_.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(O,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=C.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,S),t]),this.makeCallDirect(C,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(N,[m,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.resolver.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var o=s,l=e.typeArguments;if(o.hasDecorator(u.DecoratorFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var h=null;if(l){if(!o.is(p.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();h=this.resolver.resolveFunctionInclTypeArguments(o,l,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(p.CommonFlags.GENERIC)){for(var m=new Map,g=assert(o.declaration.typeParameters),y=g.length,E=0;Es&&!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){if(assert(!e.is(p.CommonFlags.TRAMPOLINE)),!this.currentInlineFunctions.includes(e)){this.currentInlineFunctions.push(e);var o=this.compileCallInlineUnchecked(e,t,r,n);return this.currentInlineFunctions.pop(),o}this.warning(c.DiagnosticCode.Function_0_cannot_be_inlined_into_itself,r.range,e.internalName)}var l=n?a+1:a,u=new Array(l),h=0;n&&(u[0]=n,h=1);for(var d=s.parameterTypes,_=0;_=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,l=e.is(p.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=E,this.module.createGetLocal(f,E.toNativeType());case u.ElementKind.GLOBAL:if(!this.compileGlobal(y))return this.module.createUnreachable();var T=y.type;return assert(T!=_.Type.void),y.is(p.CommonFlags.INLINED)?this.compileInlineConstant(y,t,r):(this.currentType=T,this.module.createGetGlobal(y.internalName,T.toNativeType()));case u.ElementKind.ENUMVALUE:return y.is(p.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,y.is(p.CommonFlags.INLINED)?this.module.createI32(y.constantValue):this.module.createGetGlobal(y.internalName,1)):(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=_.Type.i32,this.module.createUnreachable());case u.ElementKind.FUNCTION_PROTOTYPE:var I=this.resolver.resolveFunction(y,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.compileInstanceOfExpression=function(e,t){var r=this.module,n=this.compileExpressionRetainType(e.expression,this.options.usizeType,0),i=this.currentType,a=this.resolver.resolveType(e.isType);return this.currentType=_.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?l.BinaryOp.NeI64:l.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case d.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,!1,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case d.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case d.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:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(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:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(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=_.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=_.Type.u32,n.createI32(i64_low(s))):(this.currentType=_.Type.i64,n.createI64(i64_low(s),i64_high(s)));case d.LiteralKind.STRING:return assert(!r),this.compileStringLiteral(e);case d.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.ensureStaticString=function(e){var t,r=this.program,n=r.hasGC,i=r.gcHeaderSize,a=assert(r.stringInstance),s=this.stringSegments;if(s.has(e))t=s.get(e);else{var c=e.length,l=a.currentMemoryOffset+1&-2,p=l+2*c,u=void 0,h=void 0;n?(u=new Uint8Array(i+p),h=i,m.writeI32(o.ensureGCHook(this,a),u,r.gcHookOffset)):(u=new Uint8Array(p),h=0),m.writeI32(c,u,h+a.offsetof("length")),h+=l;for(var d=0;d",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(c.DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PRIVATE))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PROTECTED))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,s=a.length,l=e.values,h=n.members,d=!1,_=new Array(s+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(s==l.length);for(var g=0,y=s;g=0);var l=this.compileExpressionRetainType(o,this.options.usizeType,0);return this.currentType=i.type,n.createLoad(i.type.byteSize,i.type.is(5),l,i.type.toNativeType(),i.memoryOffset);case u.ElementKind.PROPERTY:return this.compileGetter(i,e);case u.ElementKind.FUNCTION_PROTOTYPE:return this.error(c.DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set,e.range,i.simpleName),n.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileGetter=function(e,t){var r=e.getterPrototype;if(r){var n=this.resolver.resolveFunction(r,null);if(!n)return this.module.createUnreachable();var i=n.signature;if(!this.checkCallSignature(i,0,n.is(p.CommonFlags.INSTANCE),t))return this.module.createUnreachable();var a=0!=(n.decoratorFlags&u.DecoratorFlags.INLINE);if(n.is(p.CommonFlags.INSTANCE)){var s=assert(n.parent);assert(s.kind==u.ElementKind.CLASS);var o=assert(this.resolver.currentThisExpression),l=this.compileExpressionRetainType(o,this.options.usizeType,0);//!!! +return this.currentType=i.returnType,this.compileCallDirect(n,[],t,l,a)}return this.currentType=i.returnType,this.compileCallDirect(n,[],t,0,a)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,t.range,e.simpleName,e.parent.toString()),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=e.ifThen,n=e.ifElse,i=this.currentFunction,a=i.flow,s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var o=this.module.precomputeExpression(s);if(l.getExpressionId(o)==l.ExpressionId.Const&&1==l.getExpressionType(o))return l.getConstValueI32(o)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),d=this.currentType;u.free();var m=a.fork();i.flow=m;var g=this.compileExpressionRetainType(n,t,0),y=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=_.Type.commonCompatible(d,y,!1);return E?(h=this.convertExpression(h,d,E,1,0,r),g=this.convertExpression(g,y,E,1,0,n),this.currentType=E,this.module.createIf(s,h,g)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,d.toString(),y.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==_.Type.void?_.Type.i32:t,0,0);if(l.getExpressionId(i)==l.ExpressionId.Unreachable)return i;var a,s,o,p=this.currentType;switch(e.operator){case h.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.AddI32,s=1,o=r.createI32(1);break;case 9:case 4:a=(u=this.options).isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.AddI64,s=2,o=r.createI64(1);break;case 11:a=l.BinaryOp.AddF32,s=3,o=r.createF32(1);break;case 12:a=l.BinaryOp.AddF64,s=4,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case h.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.SubI32,s=1,o=r.createI32(1);break;case 9:case 4:var u;a=(u=this.options).isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.SubI64,s=2,o=r.createI64(1);break;case 11:a=l.BinaryOp.SubF32,s=3,o=r.createF32(1);break;case 12:a=l.BinaryOp.SubF64,s=4,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==_.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var d=n.getTempLocal(p,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(d.index,s),o),!1);this.currentType=assert(d).type,n.freeTempLocal(d);var g=d.index;return r.createBlock(null,[r.createSetLocal(g,i),m,r.createGetLocal(g,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case h.Token.PLUS:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case h.Token.MINUS:if(e.operand.kind==d.NodeKind.LITERAL&&(e.operand.literalKind==d.LiteralKind.INTEGER||e.operand.literalKind==d.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(l.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(l.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=_.Type.bool;break;case h.Token.TILDE:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case h.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!=_.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(l.UnaryOp.ExtendI8ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI16ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(l.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(l.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(l.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,e);case 11:return r.createBinary(l.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(l.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(l.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(l.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,s=this.currentFunction,c=this.options.nativeSizeType,l=s.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(l.index,o.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==u.ElementKind.FIELD){var g=m,y=g.type,E=y.toNativeType(),f=g.prototype.declaration;if(assert(!g.isAny(p.CommonFlags.CONST)),f.initializer)h.push(a.createStore(y.byteSize,a.createGetLocal(l.index,c),this.compileExpression(f.initializer,y,1,0),E,g.memoryOffset));else{var T=g.prototype.declaration.parameterIndex;h.push(a.createStore(y.byteSize,a.createGetLocal(l.index,c),T>=0?a.createGetLocal(1+T,E):y.toNativeZero(a),E,g.memoryOffset))}}}}catch(e){r={error:e}}finally{try{_&&!_.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}return h.push(a.createGetLocal(l.index,c)),s.freeTempLocal(l),this.currentType=e.type,a.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(2==n?r.createBinary(l.BinaryOp.NeI64,r.createGetLocal(0,2),r.createI64(0)):r.createGetLocal(0,1),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 T(e,t,r){if(void 0===r&&(r=null),y=r?r.simpleName:t.range.source.simplePath,E=e.simpleName,e.hasDecorator(u.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(d.findDecorator(d.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(E=s.value,a.length>=2&&((s=a[1]).kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(y=E,E=s.value,a.length>2&&n.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(c.DiagnosticCode.String_literal_expected,s.range))):n.error(c.DiagnosticCode.String_literal_expected,s.range)}else n.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=f},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.User_defined_0=102]="User_defined_0",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.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Constructor_of_class_0_must_not_require_any_arguments=216]="Constructor_of_class_0_must_not_require_any_arguments",e[e.Function_0_cannot_be_inlined_into_itself=217]="Function_0_cannot_be_inlined_into_itself",e[e.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set=218]="Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set",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.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.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",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.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",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.In_const_enum_declarations_member_initializer_must_be_constant_expression=2474]="In_const_enum_declarations_member_initializer_must_be_constant_expression",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.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",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",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 102:return"User-defined: {0}";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 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 217:return"Function '{0}' cannot be inlined into itself.";case 218:return"Cannot access method '{0}' without calling it as it requires 'this' to be set.";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 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 1061:return"Enum member must have initializer.";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 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";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 2474:return"In 'const' enum declarations member initializer must be constant expression.";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 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=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}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),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 s,o=r(1),c=r(4),l=r(3),p=r(7),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s=t.ReportMode||(t.ReportMode={}));var h=function(e){function t(t){var r=e.call(this,t.diagnostics)||this;return r.currentThisExpression=null,r.currentElementExpression=null,r.program=t,r}return n(t,e),t.prototype.resolveType=function(e,t,r){if(void 0===t&&(t=null),void 0===r&&(r=s.REPORT),e.kind==l.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==l.NodeKind.TYPE);var i=e,a=i.name.text,h=a,d=i.range.source.internalPath+u.PATH_DELIMITER+a,_=this.program.elementsLookup,m=void 0;if((m=_.get(d))||(m=_.get(h)))switch(m.kind){case c.ElementKind.ENUM:return null!==i.typeArguments&&i.typeArguments.length?(r==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,e.range,m.internalName),null):p.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var g=this.resolveClassInclTypeArguments(m,i.typeArguments,t,e);return g?e.isNullable?g.type.asNullable():g.type:null}var y=this.program.typeAliases.get(a);if(y)return this.resolveType(y.type,t,r);var E=i.typeArguments;if(E){for(var f=E.length,T=new Array(f),I=0;I",h+="<"+A+">")}else if(t){var C=t.get(h);if(C)return C}}var N=this.program.typesLookup,O=void 0;return(O=N.get(d))||(O=N.get(h))?O:(r==s.REPORT&&this.error(o.DiagnosticCode.Cannot_find_name_0,i.name.range,h),null)},t.prototype.resolveSignature=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=s.REPORT);var n=e.explicitThisType,i=null;if(n&&!(i=this.resolveType(n,t,r)))return null;for(var a=e.parameters,o=a.length,c=new Array(o),u=new Array(o),h=0,d=!1,_=0;_"),_=new c.Function(e,V,H,R||y,r),e.instances.set(d,_),this.program.instancesLookup.set(V,_),_},t.prototype.resolveFunctionPartially=function(e,t,r){void 0===r&&(r=s.REPORT),assert(e.is(u.CommonFlags.INSTANCE));var n=assert(e.classPrototype);if(!t||!t.length)return e;var i=e.simpleName,a=p.typesToString(t),o=new c.FunctionPrototype(this.program,i,n.internalName+"<"+a+">"+u.INSTANCE_DELIMITER+i,e.declaration,n,e.decoratorFlags);return o.flags=e.flags,o.operatorKind=e.operatorKind,o.classTypeArguments=t,o},t.prototype.resolveFunctionInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;return!e.is(u.CommonFlags.GENERIC)||(assert(null!=t&&0!=t.length),a=this.resolveTypeArguments(assert(e.declaration.typeParameters),t,r,n,i))?this.resolveFunction(e,a,r,i):null},t.prototype.resolveClass=function(e,t,r,n){var h,d,_,m,g,y,E,f;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var T=t?p.typesToString(t):"",I=e.instances.get(T);if(I)return I;var v=r;if(r=new Map,v)try{for(var A=i(v),C=A.next();!C.done;C=A.next()){var N=a(C.value,2),O=N[0],S=N[1];r.set(O,S)}}catch(e){h={error:e}}finally{try{C&&!C.done&&(d=A.return)&&d.call(A)}finally{if(h)throw h.error}}var L=e.declaration;if(t){var b=L.typeParameters,k=b.length,R=t.length;assert(R==k);for(var x=0;x",U+="<"+T+">"),(I=new c.Class(e,B,U,t,F)).contextualTypeArguments=r,e.instances.set(T,I),this.program.instancesLookup.set(U,I);var P=0;if(F){if(F.members){I.members||(I.members=new Map);try{for(var w=i(F.members.values()),M=w.next();!M.done;M=w.next()){var G=M.value;I.members.set(G.simpleName,G)}}catch(e){_={error:e}}finally{try{M&&!M.done&&(m=w.return)&&m.call(w)}finally{if(_)throw _.error}}}P=F.currentMemoryOffset}if(e.constructorPrototype){var K=this.resolveFunctionPartially(e.constructorPrototype,t,n);if(!K)return null;I.constructorInstance=this.resolveFunction(K,null,null,n)}if(e.instanceMembers)try{for(var z=i(e.instanceMembers.values()),H=z.next();!H.done;H=z.next()){var V=H.value;switch(V.kind){case c.ElementKind.FIELD_PROTOTYPE:I.members||(I.members=new Map);var X=V.declaration,W=null;if(X.type)W=this.resolveType(X.type,I.contextualTypeArguments,n);else{if(null!==F&&null!==F.members){var Y=F.members.get(V.simpleName);Y&&!Y.is(u.CommonFlags.PRIVATE)&&(assert(Y.kind==c.ElementKind.FIELD),W=Y.type)}W||n==s.REPORT&&this.error(o.DiagnosticCode.Type_expected,X.name.range.atEnd)}if(!W)break;var Q=new c.Field(V,U+u.INSTANCE_DELIMITER+V.simpleName,W,X,I);switch(W.byteSize){case 1:break;case 2:1&P&&++P;break;case 4:3&P&&(P=1+(3|P));break;case 8:7&P&&(P=1+(7|P));break;default:assert(!1)}Q.memoryOffset=P,P+=W.byteSize,I.members.set(V.simpleName,Q);break;case c.ElementKind.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=this.resolveFunctionPartially(V,t,n);if(!q)return null;q.internalName=U+u.INSTANCE_DELIMITER+q.simpleName,I.members.set(V.simpleName,q);break;case c.ElementKind.PROPERTY:I.members||(I.members=new Map);var j=assert(V.getterPrototype),Z=V.setterPrototype,J=new c.Property(this.program,V.simpleName,U+u.INSTANCE_DELIMITER+V.simpleName,e),$=this.resolveFunctionPartially(j,t,n);if(!$)return null;if($.internalName=U+u.INSTANCE_DELIMITER+$.simpleName,J.getterPrototype=$,Z){var ee=this.resolveFunctionPartially(Z,t,n);if(!ee)return null;ee.internalName=U+u.INSTANCE_DELIMITER+ee.simpleName,J.setterPrototype=ee}I.members.set(V.simpleName,J);break;default:assert(!1)}}}catch(e){g={error:e}}finally{try{H&&!H.done&&(y=z.return)&&y.call(z)}finally{if(g)throw g.error}}I.currentMemoryOffset=P;try{for(var te=i(e.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=a(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=c.OperatorKind.INVALID);var se=void 0;if(ae.is(u.CommonFlags.INSTANCE)){var oe=this.resolveFunctionPartially(ae,t,n);if(!oe)continue;se=this.resolveFunction(oe,null,null,n)}else se=this.resolveFunction(ae,null,null,n);if(se){var ce=I.overloads;ce||(I.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){E={error:e}}finally{try{re&&!re.done&&(f=te.return)&&f.call(te)}finally{if(E)throw E.error}}return I},t.prototype.resolveClassInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;if(e.is(u.CommonFlags.GENERIC)){var c=e.declaration.typeParameters,l=c.length;assert(l>0);var p=null!==t?t.length:0;if(l!=p)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,l.toString(10),p.toString(10)),null;if(!(a=this.resolveTypeArguments(c,t,r,n,i)))return null}else if(null!==t&&t.length)return i==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,n.range,e.internalName),null;return this.resolveClass(e,a,r,i)},t}(o.DiagnosticEmitter);t.Resolver=h},function(e,t,r){r(13),e.exports=r(25)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(14),r(16),r(17),r(18);var n=r(5);n.Module.prototype.toText=function(){return new binaryen.Module(this.ref).emitText()},n.Module.prototype.toAsmjs=function(){return new binaryen.Module(this.ref).emitAsmjs()}},function(e,t,r){(function(e){const t=e.Binaryen||r(15);for(var n in e.binaryen=t,t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.__memory_allocate=t._malloc,e.__memory_free=t._free,e.__memory_copy=t._memmove,e.__store=function(e,r){t.HEAPU8[e]=r},e.__load=function(e){return t.HEAPU8[e]}}).call(this,r(6))},function(t,r){t.exports=e},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function r(){Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function n(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}t.ASC_TARGET=0,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},r.prototype=Object.create(Error.prototype),r.prototype.name="UnreachableError",r.prototype.message="unreachable",t.unreachable=function(){throw new r},n.prototype=Object.create(Error.prototype),n.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new n(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},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)},t.JSMath=Math,t.memory=(()=>{var e=new Uint8Array(0),r=0;return{allocate:t.__memory_allocate||function(t){if(!(t>>>=0))return 0;if(r+t>e.length){var n=e;(e=new Uint8Array(Math.max(65536,e.length+t,2*e.length))).set(n)}var i=r;return 7&(r+=t)&&(r=1+(7|r)),i},free:t.__memory_free||function(e){},copy:t.__memory_copy||function(t,r,n){e.copyWithin(t,r,r+n)}}})(),t.store=t.__store||function(e,t,r){HEAP[e+(0|r)]=t},t.load=t.__load||function(e,t){return HEAP[e+(0|t)]}}).call(this,r(6))},function(e,t,r){(function(e){const t=new Float64Array(1),r=new Float32Array(t.buffer),n=new Int32Array(t.buffer);e.f32_as_i32=function(e){return r[0]=e,n[0]},e.i32_as_f32=function(e){return n[0]=e,r[0]},e.f64_as_i64=function(e){return t[0]=e,i64_new(n[0],n[1])},e.i64_as_f64=function(e){return n[0]=i64_low(e),n[1]=i64_high(e),t[0]}}).call(this,r(6))},function(e,t,r){(function(e){const t=e.Long||r(19);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(6))},function(e,t){e.exports=n;var r=null;try{r=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([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])),{}).exports}catch(e){}function n(e,t,r){this.low=0|e,this.high=0|t,this.unsigned=!!r}function i(e){return!0===(e&&e.__isLong__)}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0}),n.isLong=i;var a={},s={};function o(e,t){var r,n,i;return t?(i=0<=(e>>>=0)&&e<256)&&(n=s[e])?n:(r=l(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=l(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E:y;if(t){if(e<0)return E;if(e>=_)return A}else{if(e<=-m)return C;if(e+1>=m)return v}return e<0?c(-e,t).neg():l(e%d|0,e/d|0,t)}function l(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=l;var p=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 y;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(p(r,8)),a=y,s=0;s>>0:this.low},N.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},N.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return l+s;for(;l.length<6;)l="0"+l;s=""+l+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.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)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.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},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(f)},N.neg=N.negate,N.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,p=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,p+=(u+=r+o)>>>16,p+=t+s,l((d&=65535)<<16|(_&=65535),(p&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return y;if(i(e)||(e=h(e)),r)return l(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return y;if(this.eq(C))return e.isOdd()?C:y;if(e.eq(C))return this.isOdd()?C:y;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(g)&&e.lt(g))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,p=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,E=0,f=0;return E+=(f+=s*d)>>>16,m+=(E+=a*d)>>>16,E&=65535,m+=(E+=s*u)>>>16,_+=(m+=n*d)>>>16,m&=65535,_+=(m+=a*u)>>>16,m&=65535,_+=(m+=s*p)>>>16,_+=t*d+n*u+a*p+s*o,l((E&=65535)<<16|(f&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},N.mul=N.multiply,N.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?l((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?E:y;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return T;a=E}else{if(this.eq(C))return e.eq(f)||e.eq(I)?C:e.eq(C)?f:(t=this.shr(1).div(e).shl(1)).eq(y)?e.isNegative()?f:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?E:y;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=y}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:p(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=f),a=a.add(u),n=n.sub(d)}return a},N.div=N.divide,N.modulo=function(e){return i(e)||(e=h(e)),r?l((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))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return l(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),l(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),l(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),l(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?l(this.low<>>32-e,this.unsigned):l(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):l(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?l(this.low>>>e|t<<32-e,t>>>e,this.unsigned):l(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?l(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:l(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.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]},N.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){"use strict";var n=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 i=r(1),a=r(3),s=r(7),o=r(5),c=r(4),l=r(11),p=r(0);function u(e,t,r,n,p,u){var g,y,E,f,T=e.module;switch(t.internalName){case"isInteger":var I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(4)&&!I.is(256)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isFloat":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(8)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isSigned":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(1)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isReference":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?(e.currentType=s.Type.bool,I.is(256)?T.createI32(1):T.createI32(0)):T.createUnreachable();case"isString":I=d(e,r,n,u);if(e.currentType=s.Type.bool,!I)return T.createUnreachable();if(R=I.classReference){var v=e.program.stringInstance;if(v&&R.isAssignableTo(v))return T.createI32(1)}return T.createI32(0);case"isArray":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null!==(R=I.classReference)&&null!==R.lookupOverload(c.OperatorKind.INDEXED_GET)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isDefined":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var A=e.resolver.resolveExpression(n[0],e.currentFunction,l.ReportMode.SWALLOW);return T.createI32(A?1:0);case"isConstant":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var C=e.compileExpressionRetainType(n[0],s.Type.i32,0);return e.currentType=s.Type.bool,T.createI32(o.getExpressionId(C)==o.ExpressionId.Const?1:0);case"isManaged":if(!e.program.hasGC)return e.currentType=s.Type.bool,T.createI32(0);I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null===(R=I.classReference)||R.hasDecorator(c.DecoratorFlags.UNMANAGED)?T.createI32(0):T.createI32(1):T.createUnreachable();case"clz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.ClzI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.ClzI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.ClzI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"ctz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],0,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.CtzI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.CtzI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.CtzI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"popcnt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.PopcntI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.PopcntI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.PopcntI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"rotl":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=e.ensureSmallIntegerWrap(T.createBinary(o.BinaryOp.RotlI32,g,y),e.currentType);case 2:case 7:f=T.createBinary(o.BinaryOp.RotlI32,g,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,g,y);break;case 3:case 8:f=T.createBinary(o.BinaryOp.RotlI64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"rotr":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=e.ensureSmallIntegerWrap(T.createBinary(o.BinaryOp.RotrI32,g,y),e.currentType);break;case 2:case 7:f=T.createBinary(o.BinaryOp.RotrI32,g,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,g,y);break;case 3:case 8:f=T.createBinary(o.BinaryOp.RotrI64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"abs":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(e.currentType.kind){case 0:case 1:case 2:var N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(o.BinaryOp.SubI32,T.createI32(0),T.createGetLocal(N.index,1)),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(N.index,1),T.createI32(0)));break;case 4:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(T),T.createGetLocal(N.index,e.options.nativeSizeType)),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(N.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(T)));break;case 3:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(o.BinaryOp.SubI64,T.createI64(0,0),T.createGetLocal(N.index,2)),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(N.index,2),T.createI64(0,0)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:f=g;break;case 11:f=T.createUnary(o.UnaryOp.AbsF32,g);break;case 12:f=T.createUnary(o.UnaryOp.AbsF64,g);break;case 13:f=T.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"max":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:var O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtU32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtU64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:f=T.createBinary(o.BinaryOp.MaxF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.MaxF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"min":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtI32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtU32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtI64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtU64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:f=T.createBinary(o.BinaryOp.MinF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.MinF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"ceil":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.CeilF32,g);break;case 12:f=T.createUnary(o.UnaryOp.CeilF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"floor":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.FloorF32,g);break;case 12:f=T.createUnary(o.UnaryOp.FloorF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"copysign":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 11:f=T.createBinary(o.BinaryOp.CopysignF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.CopysignF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"nearest":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.NearestF32,g);break;case 12:f=T.createUnary(o.UnaryOp.NearestF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"reinterpret":if(1!=n.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();switch(r[0].kind){case 2:case 7:g=e.compileExpression(n[0],s.Type.f32,1,0),f=T.createUnary(o.UnaryOp.ReinterpretF32,g);break;case 3:case 8:g=e.compileExpression(n[0],s.Type.f64,1,0),f=T.createUnary(o.UnaryOp.ReinterpretF64,g);break;case 9:if(r[0].is(256))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),e.currentType=r[0],T.createUnreachable();case 4:g=e.compileExpression(n[0],e.options.isWasm64?s.Type.f64:s.Type.f32,1,0),f=T.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,g);break;case 11:g=e.compileExpression(n[0],s.Type.i32,1,0),f=T.createUnary(o.UnaryOp.ReinterpretI32,g);break;case 12:g=e.compileExpression(n[0],s.Type.i64,1,0),f=T.createUnary(o.UnaryOp.ReinterpretI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return e.currentType=r[0],f;case"sqrt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 11:f=T.createUnary(o.UnaryOp.SqrtF32,g);break;case 12:f=T.createUnary(o.UnaryOp.SqrtF64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"trunc":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.TruncF32,g);break;case 12:f=T.createUnary(o.UnaryOp.TruncF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"load":return n.length<1||n.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable()):r&&1==r.length?(g=e.compileExpression(n[0],e.options.usizeType,1,0),(x=2==n.length?_(e,n[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.createLoad(r[0].byteSize,r[0].is(5),g,r[0].is(4)&&p.is(4)&&p.size>r[0].size?(e.currentType=p).toNativeType():(e.currentType=r[0]).toNativeType(),x))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"store":if(e.currentType=s.Type.void,n.length<2||n.length>3)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"2",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],r[0],r[0].is(4)?0:1,0);I=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();var R;if(!(R=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable();var x=void 0;if(n.length){if(n[0].kind!=a.NodeKind.LITERAL||n[0].literalKind!=a.LiteralKind.STRING)return e.error(i.DiagnosticCode.String_literal_expected,n[0].range),T.createUnreachable();var F=n[0].value,D=R.members?R.members.get(F):null;if(!D||D.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,n[0].range,R.internalName,F),T.createUnreachable();x=D.memoryOffset}else x=R.currentMemoryOffset;return e.options.isWasm64?p.is(4)&&p.size<=32?(e.currentType=s.Type.u32,T.createI32(x)):T.createI64(x):p.is(4)&&64==p.size?(e.currentType=s.Type.u64,T.createI64(x)):T.createI32(x);case"select":if(3!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpressionRetainType(n[0],s.Type.i32,0);I=e.currentType;switch(y=e.compileExpression(n[1],I,1,0),E=e.makeIsTrueish(e.compileExpressionRetainType(n[2],s.Type.bool,0),e.currentType),e.currentType=I,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:f=T.createSelect(g,y,E);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"unreachable":return 0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createUnreachable();case"memory.size":return e.currentType=s.Type.i32,0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createHost(o.HostOp.CurrentMemory);case"memory.grow":return e.currentType=s.Type.i32,1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),g=T.createUnreachable()):g=e.compileExpression(n[0],s.Type.i32,1,0),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createHost(o.HostOp.GrowMemory,null,[g]);case"memory.copy":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,T.createUnreachable();throw g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],e.options.usizeType,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"memory.fill":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,T.createUnreachable();throw g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],s.Type.u32,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),e.currentType=r[0],T.createUnreachable()):(g=e.compileExpressionRetainType(n[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable()):g):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"assert":if(n.length<1||n.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):n.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpressionRetainType(n[0],s.Type.bool,1);I=e.currentType;if(e.currentType=I.nonNullableType,e.options.noAssert)return p==s.Type.void?(e.currentType=s.Type.void,T.createNop()):g;var B=m(e,2==n.length?n[1]:null,u);if(e.currentType=I.nonNullableType,p==s.Type.void){switch(e.currentType.kind){default:f=T.createIf(T.createUnary(o.UnaryOp.EqzI32,g),B);break;case 3:case 8:f=T.createIf(T.createUnary(o.UnaryOp.EqzI64,g),B);break;case 4:case 9:f=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,g),B);break;case 11:f=T.createIf(T.createBinary(o.BinaryOp.EqF32,g,T.createF32(0)),B);break;case 12:f=T.createIf(T.createBinary(o.BinaryOp.EqF64,g,T.createF64(0)),B);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=B}e.currentType=s.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:O=e.currentFunction.flow,N=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));f=T.createIf(T.createTeeLocal(N.index,g),T.createGetLocal(N.index,1),B);break;case 2:case 7:default:N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);f=T.createIf(T.createTeeLocal(N.index,g),T.createGetLocal(N.index,1),B);break;case 3:case 8:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);f=T.createIf(T.createUnary(o.UnaryOp.EqzI64,T.createTeeLocal(N.index,g)),B,T.createGetLocal(N.index,2));break;case 4:case 9:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,T.createTeeLocal(N.index,g)),B,T.createGetLocal(N.index,e.options.nativeSizeType));break;case 11:N=e.currentFunction.getAndFreeTempLocal(s.Type.f32,!1);f=T.createIf(T.createBinary(o.BinaryOp.EqF32,T.createTeeLocal(N.index,g),T.createF32(0)),B,T.createGetLocal(N.index,3));break;case 12:N=e.currentFunction.getAndFreeTempLocal(s.Type.f64,!1);f=T.createIf(T.createBinary(o.BinaryOp.EqF64,T.createTeeLocal(N.index,g),T.createF64(0)),B,T.createGetLocal(N.index,4));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=B}return f;case"unchecked":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable()):((O=e.currentFunction.flow).set(4096),f=e.compileExpressionRetainType(n[0],p,0),O.unset(4096),f);case"call_indirect":if(n.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var U=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();U=r[0]}else U=p;if(g=e.compileExpressionRetainType(n[0],s.Type.u32,0),7!=e.currentType.kind)return e.error(i.DiagnosticCode.Operation_not_supported,n[0].range),T.createUnreachable();for(var P=n.length-1,w=new Array(P),M=new Array(P+1),G=U.toNativeType(),K=new Array(P),z=0;z void"),T.createUnreachable())}var Q=function(e,t,r,n,i){switch(t.internalName){case"i32.clz":return h("clz",e,s.Type.i32,r,s.Type.i32,i);case"i64.clz":return h("clz",e,s.Type.i64,r,s.Type.i64,i);case"i32.ctz":return h("ctz",e,s.Type.i32,r,s.Type.i32,i);case"i64.ctz":return h("ctz",e,s.Type.i64,r,s.Type.i64,i);case"i32.popcnt":return h("popcnt",e,s.Type.i32,r,s.Type.i32,i);case"i64.popcnt":return h("popcnt",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotl":return h("rotl",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotl":return h("rotl",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotr":return h("rotr",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotr":return h("rotr",e,s.Type.i64,r,s.Type.i64,i);case"f32.abs":return h("abs",e,s.Type.f32,r,s.Type.f32,i);case"f64.abs":return h("abs",e,s.Type.f64,r,s.Type.f64,i);case"f32.max":return h("max",e,s.Type.f32,r,s.Type.f32,i);case"f64.max":return h("max",e,s.Type.f64,r,s.Type.f64,i);case"f32.min":return h("min",e,s.Type.f32,r,s.Type.f32,i);case"f64.min":return h("min",e,s.Type.f64,r,s.Type.f64,i);case"f32.ceil":return h("ceil",e,s.Type.f32,r,s.Type.f32,i);case"f64.ceil":return h("ceil",e,s.Type.f64,r,s.Type.f64,i);case"f32.floor":return h("floor",e,s.Type.f32,r,s.Type.f32,i);case"f64.floor":return h("floor",e,s.Type.f64,r,s.Type.f64,i);case"f32.copysign":return h("copysign",e,s.Type.f32,r,s.Type.f32,i);case"f64.copysign":return h("copysign",e,s.Type.f64,r,s.Type.f64,i);case"f32.nearest":return h("nearest",e,s.Type.f32,r,s.Type.f32,i);case"f64.nearest":return h("nearest",e,s.Type.f64,r,s.Type.f64,i);case"i32.reinterpret_f32":return h("reinterpret",e,s.Type.i32,r,s.Type.f32,i);case"i64.reinterpret_f64":return h("reinterpret",e,s.Type.i64,r,s.Type.f64,i);case"f32.reinterpret_i32":return h("reinterpret",e,s.Type.f32,r,s.Type.i32,i);case"f64.reinterpret_i64":return h("reinterpret",e,s.Type.f64,r,s.Type.i64,i);case"f32.sqrt":return h("sqrt",e,s.Type.f32,r,s.Type.f32,i);case"f64.sqrt":return h("sqrt",e,s.Type.f64,r,s.Type.f64,i);case"f32.trunc":return h("trunc",e,s.Type.f32,r,s.Type.f32,i);case"f64.trunc":return h("trunc",e,s.Type.f64,r,s.Type.f64,i);case"i32.load8_s":return h("load",e,s.Type.i8,r,s.Type.i32,i);case"i32.load8_u":return h("load",e,s.Type.u8,r,s.Type.u32,i);case"i32.load16_s":return h("load",e,s.Type.i16,r,s.Type.i32,i);case"i32.load16_u":return h("load",e,s.Type.u16,r,s.Type.u32,i);case"i32.load":return h("load",e,s.Type.i32,r,s.Type.i32,i);case"i64.load8_s":return h("load",e,s.Type.i8,r,s.Type.i64,i);case"i64.load8_u":return h("load",e,s.Type.u8,r,s.Type.u64,i);case"i64.load16_s":return h("load",e,s.Type.i16,r,s.Type.i64,i);case"i64.load16_u":return h("load",e,s.Type.u16,r,s.Type.u64,i);case"i64.load32_s":return h("load",e,s.Type.i32,r,s.Type.i64,i);case"i64.load32_u":return h("load",e,s.Type.u32,r,s.Type.u64,i);case"i64.load":return h("load",e,s.Type.i64,r,s.Type.i64,i);case"f32.load":return h("load",e,s.Type.f32,r,s.Type.f32,i);case"f64.load":return h("load",e,s.Type.f64,r,s.Type.f64,i);case"i32.store8":return h("store",e,s.Type.i8,r,s.Type.i32,i);case"i32.store16":return h("store",e,s.Type.i16,r,s.Type.i32,i);case"i32.store":return h("store",e,s.Type.i32,r,s.Type.i32,i);case"i64.store8":return h("store",e,s.Type.i8,r,s.Type.i64,i);case"i64.store16":return h("store",e,s.Type.i16,r,s.Type.i64,i);case"i64.store32":return h("store",e,s.Type.i32,r,s.Type.i64,i);case"i64.store":return h("store",e,s.Type.i64,r,s.Type.i64,i);case"f32.store":return h("store",e,s.Type.f32,r,s.Type.f32,i);case"f64.store":return h("store",e,s.Type.f64,r,s.Type.f64,i)}return 0}(e,t,n,0,u);return Q?(r&&r.length&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),Q):(e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable())}function h(e,t,r,n,i,a){var s=assert(t.program.elementsLookup.get(e));return assert(s.kind==c.ElementKind.FUNCTION_PROTOTYPE),u(t,s,[r],n,i,a)}function d(e,t,r,n){if(0==r.length)return t&&1==t.length?t[0]:(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.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(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),null;e.compileExpressionRetainType(r[0],s.Type.i32,0)}else e.compileExpressionRetainType(r[0],s.Type.i32,0);return e.currentType}return t&&t.length>1&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"1",r.length.toString(10)),null}function _(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,s.Type.usize64,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||2!=o.getExpressionType(r)||0!=o.getConstValueI64High(r)||(n=o.getConstValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,s.Type.usize32,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||1!=o.getExpressionType(r)||(n=o.getConstValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function m(e,t,r){var n=e.program,i=e.module,a=n.typesLookup.get("string");if(!a)return i.createUnreachable();var o=n.abortInstance;if(!o||!e.compileFunction(o))return i.createUnreachable();var c=null!=t?e.compileExpression(t,a,1,0):a.toNativeZero(i),l=e.ensureStaticString(r.range.source.normalizedPath);return e.currentType=s.Type.void,i.createBlock(null,[i.createCallImport(o.internalName,[c,l,i.createI32(r.range.line),i.createI32(r.range.column)],0),i.createUnreachable()])}function g(e,t){var r,i,a=e.program;assert(t.type.isManaged(a));var l=t.gcHookIndex;if(-1!=l)return l;var u=t.members;if(t.prototype.declaration.range.source.isLibrary&&null!==u&&u.has("__gc")){var h=assert(u.get("__gc"));assert(h.kind==c.ElementKind.FUNCTION_PROTOTYPE);var d=assert(a.resolver.resolveFunction(h,null));assert(d.is(p.CommonFlags.PRIVATE|p.CommonFlags.INSTANCE)),assert(!d.isAny(p.CommonFlags.AMBIENT|p.CommonFlags.VIRTUAL)),assert(0==d.signature.parameterTypes.length),assert(d.signature.returnType==s.Type.void),d.internalName=t.internalName+"~gc",assert(e.compileFunction(d));var _=e.ensureFunctionTableEntry(d);return t.gcHookIndex=_,_}var m=e.module,y=e.options,E=y.nativeSizeType,f=y.usizeType.byteSize,T=new Array;T.push(m.createIf(m.createUnary(y.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,m.createGetLocal(0,E)),m.createReturn()));var I=e.functionTable,v=I.length;I.push(""),t.gcHookIndex=v;var A=t.base;if(A?(assert(A.type.isManaged(a)),T.push(m.createCallIndirect(m.createI32(g(e,A.type.classReference)),[m.createGetLocal(0,E)],2==E?"Iv":"iv"))):T.push(m.createCall(assert(a.gcMarkInstance).internalName,[m.createGetLocal(0,E)],0)),u)try{for(var C=n(u.values()),N=C.next();!N.done;N=C.next()){var O=N.value;if(O.kind==c.ElementKind.FIELD)if(O.parent===t)if(O.type.isManaged(a)){var S=O.memoryOffset;assert(S>=0),T.push(m.createCall(assert(a.gcMarkInstance).internalName,[m.createLoad(f,!1,m.createGetLocal(0,E),E,S)],0))}}}catch(e){r={error:e}}finally{try{N&&!N.done&&(i=C.return)&&i.call(C)}finally{if(r)throw r.error}}var L=t.internalName+"~gc";return m.addFunction(L,e.ensureFunctionType(null,s.Type.void,y.usizeType),null,m.createBlock(null,T)),I[v]=L,v}t.compileCall=u,t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,s=e.options;if(n.hasGC&&t.type.isManaged(n)){var o=assert(n.gcAllocateInstance);return e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset),a.createI32(g(e,t))],s.nativeSizeType)):a.createUnreachable()}return(o=n.memoryAllocateInstance)?e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable():(n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,"memory.allocate"),a.createUnreachable())},t.compileAbort=m,t.compileIterateRoots=function(e){var t,r,i=e.module,a=new Array;try{for(var o=n(e.program.elementsLookup.values()),l=o.next();!l.done;l=o.next()){var u=l.value;if(u.kind==c.ElementKind.GLOBAL){var h=u,d=h.type.classReference;if(h.is(p.CommonFlags.COMPILED)&&null!==d&&!d.hasDecorator(c.DecoratorFlags.UNMANAGED))if(h.is(p.CommonFlags.INLINED)){var _=h.constantIntegerValue;a.push(i.createCallIndirect(i.createGetLocal(0,1),[e.options.isWasm64?i.createI64(i64_low(_),i64_high(_)):i.createI32(i64_low(_))],"iv"))}else a.push(i.createCallIndirect(i.createGetLocal(0,1),[i.createGetGlobal(h.internalName,e.options.nativeSizeType)],"iv"))}}}catch(e){t={error:e}}finally{try{l&&!l.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}var m=e.ensureFunctionType([s.Type.i32],s.Type.void);i.addFunction("~iterateRoots",m,[],a.length?i.createBlock(null,a):i.createNop())},t.ensureGCHook=g},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&&function(e){return!(e<0||e>65535)&&a(e,n)}(e)},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&&function(e){return!(e<0||e>65535)&&a(e,i)}(e)};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(e0||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});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";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.readI8=function(e,t){return e[t]},t.writeI8=function(e,t,r){t[r]=e},t.readI16=function(e,t){return e[t]|e[t+1]<<8},t.writeI16=function(e,t,r){t[r]=e,t[r+1]=e>>>8},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=r(9),i=r(26),a=r(27),s=r(1);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(28);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.diagnosticsOffset0&&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 1:return void this.push(n.getConstValueI32(e).toString(10));case 2:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case 3:return void this.push(n.getConstValueF32(e).toString(10));case 4: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("memory.size()");case n.HostOp.GrowMemory:return this.push("memory.grow("),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 0:return"void";case 1:return"i32";case 2:return"i64";case 3:return"f32";case 4:return"f64";case 5:throw new Error("unreachable type");case-1:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=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}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),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 s=r(0),o=r(4),c=r(2),l=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(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a.element)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;0"),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=l.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var g=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var y=e.range(g,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=l.Node.createType(l.Node.createIdentifierExpression("Array",y),[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 p=l.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),p=l.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!=l.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=l.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),p==l.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):p=l.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 l.ParameterNode;_.parameterKind=p,_.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 c?this.error(o.DiagnosticCode._0_expected,e.range(),")"):e.reset(r),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,l.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=l.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=l.Node.createPropertyAccessExpression(n,l.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return l.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return l.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(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=l.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=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var p=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(p=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.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 l.Node.createVariableDeclaration(n,c,p,r,a,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 a=l.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 p=this.parseEnumValue(e,i.CommonFlags.NONE);if(!p)return null;if(c.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=l.Node.createEnumDeclaration(a,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=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:l.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=l.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=l.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!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return l.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);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==l.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var p=this.parseParameter(e,t);if(!p)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),p.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,p.name.range);break;case l.ParameterKind.OPTIONAL:i=!0;break;case l.ParameterKind.REST:n=p}if(r.push(p),!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,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var p=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(p),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(p)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=l.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=l.Node.createParameter(u,h,d,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,p=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(p=this.parseTypeParameters(e)))return null;t|=i.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=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=l.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=l.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),g=null;if(e.skip(s.Token.OPENBRACE)){if(t&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(g=this.parseBlockStatement(e,!1)))return null}else t&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var y=l.Node.createFunctionDeclaration(a,p,m,g,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),y},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.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=l.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,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var p=null;if(e.skip(s.Token.COLON)){if(!(p=this.parseType(e)))return null}else p=l.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,p.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=l.Node.createSignature(r,p,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=l.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return l.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var a=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,p=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=i.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!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){a&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;a||(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 m,g=new Array;if(a?(assert(!d),m=l.Node.createInterfaceDeclaration(p,c,u,g,r,t,e.range(n,e.pos))):m=l.Node.createClassDeclaration(p,c,u,d,g,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var y=this.parseClassMember(e,m);if(!y)return null;y.parent=m,g.push(y)}while(!e.skip(s.Token.CLOSEBRACE));return m},t.prototype.parseClassExpression=function(e){var t,r=e.tokenPos;if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;var n=new Array,a=l.Node.createClassDeclaration(t,[],null,null,n,null,i.CommonFlags.NONE,e.range(r,e.pos));if(!e.skip(s.Token.CLOSEBRACE))do{var c=this.parseClassMember(e,a);if(!c)return null;c.parent=a,n.push(c)}while(!e.skip(s.Token.CLOSEBRACE));return l.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==l.NodeKind.INTERFACEDECLARATION,a=new Array;e.skip(s.Token.AT);){var c=this.parseDecorator(e);if(!c)break;n&&this.error(o.DiagnosticCode.Decorators_are_not_valid_here,c.range),a.push(c)}var p=t.flags&i.CommonFlags.AMBIENT;n&&(p|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),p|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),p|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),p|=i.CommonFlags.PROTECTED);var u=0,h=0,d=0,_=0;e.skip(s.Token.STATIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"static"),p|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(p|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),p|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(p|=i.CommonFlags.GENERIC_CONTEXT));var m=0,g=0;e.skip(s.Token.READONLY)&&(p|=i.CommonFlags.READONLY,m=e.tokenPos,g=e.pos);var y=e.mark(),E=!1,f=!1,T=!1,I=0,v=0;if(n||(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(p|=i.CommonFlags.GET,f=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(p|=i.CommonFlags.SET|i.CommonFlags.SET,T=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(p|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),p&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?l.Node.createConstructorExpression(e.range()):l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),C=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(C=this.parseTypeParameters(e)))return null;E?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):f||T?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):p|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var O=e.tokenPos,S=this.parseParameters(e,E);if(!S)return null;var L=this.parseParametersThis;if(E)for(var b=0,k=S.length;b"),null):null;case s.Token.IDENTIFIER:return l.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return l.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return l.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return l.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return l.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return l.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return l.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var f=e.readRegexpPattern();return e.skip(s.Token.SLASH)?l.Node.createRegexpLiteralExpression(f,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);case s.Token.CLASS:return this.parseClassExpression(e);default:return t==s.Token.ENDOFFILE?this.error(o.DiagnosticCode.Unexpected_end_of_text,e.range(r)):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,2);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=1),assert(0!=t);var r=this.parseExpressionStart(e);if(!r)return null;var n,i=r.range.start;if(l.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||l.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=l.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var p,d=null;(p=u(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=l.Node.createAssertionExpression(l.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=l.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(d=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,d,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.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=l.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var g=this.parseExpression(e);if(!g)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var y=this.parseExpression(e,t>1?2:1);if(!y)return null;r=l.Node.createTernaryExpression(r,g,y,e.range(i,e.pos));break;case s.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,2)))return null;E.push(r)}while(e.skip(s.Token.COMMA));r=l.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(d=this.parseExpression(e,h(n)?p:p+1)))return null;if(n==s.Token.DOT)if(d.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,d,e.range(i,e.pos));else{if(d.kind!=l.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,d.range),null;var f=d;if(f.expression.kind!=l.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=l.Node.createPropertyAccessExpression(r,f.expression,e.range(i,e.pos)),r=f}else r=l.Node.createBinaryExpression(n,r,d,e.range(i,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.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;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()}}while(r)},t}(o.DiagnosticEmitter);function u(e){switch(e){case s.Token.COMMA:return 1;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 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;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 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function h(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=p,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index 2ab7c4bc..70eef507 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/common.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/resolver.ts","webpack://assemblyscript/./src/glue/js/index.ts","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/parser.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__15__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CommonFlags","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","FILESPACE_PREFIX","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","assert","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","DiagnosticCode","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","range","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","line","column","formatDiagnosticContext","useColors","text","len","length","start","end","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","info","warning","error","__export","common_1","tokenizer_1","Token","Range","NodeKind","nodeIsConstantValue","kind","LITERAL","NULL","TRUE","FALSE","nodeIsCallable","IDENTIFIER","CALL","ELEMENTACCESS","PROPERTYACCESS","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","type","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","initializer","ParameterNode","parameterKind","createSignature","parameters","returnType","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","expr","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","k","setParentIfNotNull","createAssertionExpression","assertionKind","expression","toType","AssertionExpression","createBinaryExpression","operator","left","right","BinaryExpression","createCallExpression","typeArgs","CallExpression","createClassExpression","declaration","ClassExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createObjectLiteralExpression","names","values","ObjectLiteralExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","condition","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","label","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","externalName","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","ifTrue","ifFalse","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","body","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","BUILTIN","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","OperatorKind","diagnostics_1","types_1","ast_1","module_1","resolver_1","QueuedImport","QueuedExport","TypeAlias","operatorKindFromDecorator","arg","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","POW","DIV","REM","BITWISE_AND","BITWISE_OR","BITWISE_XOR","EQ","NE","GT","GE","BITWISE_SHR","BITWISE_SHR_U","LT","LE","BITWISE_SHL","PLUS","PREFIX_INC","MINUS","PREFIX_DEC","NOT","BITWISE_NOT","POSTFIX_INC","POSTFIX_DEC","INVALID","ElementKind","DecoratorFlags","noTypesYet","Map","Program","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayBufferInstance","arrayPrototype","stringInstance","mainFunction","abortInstance","memoryAllocateInstance","hasGC","gcAllocateInstance","gcLinkInstance","gcMarkInstance","gcHeaderSize","gcHookOffset","resolver","Resolver","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","setConstantInteger","i64_new","isWasm64","noTreeShaking","noAssert","memoryBase","optimizeLevelHint","shrinkLevelHint","hasFeature","queuedImports","queuedExports","queuedExtends","queuedImplements","filespace","Filespace","internalName","currentFilespace","j","initializeClass","initializeEnum","initializeExports","initializeFunction","initializeImports","initializeInterface","initializeNamespace","initializeTypeAlias","initializeVariables","queuedImport","tryLocateImport","localName","splice","externalNameAlt","Module_0_has_no_exported_member_1","queuedExports_1","__values","queuedExports_1_1","next","done","_c","__read","exportName","queuedExport","currentExport","isReExport","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_d","Error","has","resolveClass","instance","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","resolveFunction","parameterTypes","signatureReference","byteSize","globalName","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","isLibrary","Decorator_0_is_not_valid_here","Duplicate_decorator","checkGlobal","parentNode","hasDecorator","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","existingExport","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","READONLY","ABSTRACT","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","externalIdentifier","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","existingExport_1","global_1","CONST","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","INLINED","constantFloatValue","Parameter","Local","index","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","INSTANCE","local","thisType","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","parameterType","parameterName","getParameterName","flow","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","FunctionTarget","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","FIELD","memoryOffset","Class","base","currentMemoryOffset","constructorInstance","gcHookIndex","asClass","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseType","isAssignableTo","target","current","lookupOverload","unchecked","uncheckedOverload","overload","offsetof","fieldName","field","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","free","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","getScopedLocal","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritConditional","inheritMutual","leftExt","rightExt","thisExt","minLength","min","canOverflow","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","compiler_1","NativeType","_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","memory","allocate","createFrom","cArr","allocU8Array","_BinaryenModuleRead","changetype","addFunctionType","result","paramTypes","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","children","_BinaryenBlock","createBreak","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","_BinaryenLoop","createIf","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","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","getOptimizeLevel","_BinaryenGetOptimizeLevel","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","getShrinkLevel","_BinaryenGetShrinkLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeExpression","previousOptimizeLevel","previousShrinkLevel","previousDebugInfo","_BinaryenGetDebugInfo","_BinaryenExpressionGetType","_BinaryenFunctionGetBody","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","_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","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","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","needsExplicitUnreachable","Return","Break","numChildren","g","eval","e","window","program_1","TypeKind","TypeFlags","cachedNullableType","ceil","classReference","nonNullableType","isize64","isize32","usize64","usize32","isManaged","computeSmallIntegerShift","targetType","classType","asNullable","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","typesToString","Signature","cachedFunctionTarget","parameterNames","requiredParameters","hasRest","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","numParameters","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","IdentifierHandling","tokenFromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DECLARE","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","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","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","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","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","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","builtins_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentInlineFunctions","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","needsIterateRoots","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableExported","moduleExport","makeModuleExport","compileIterateRoots","subPrefix","_e","_f","_g","_h","Cannot_export_a_mutable_global","ensureTrampoline","ensureArgcSet","COMPILED","setter","nativeType","nativeSizeType","getterName","setterName","_j","_k","fullName","_l","_m","ctor","compileSourceByPath","reportNode","File_0_not_found","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","resolvedType","resolveType","Type_expected","atEnd","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","isDeclaredConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileExpression","Compiling_constant_with_non_constant_initializer_as_mutable","compileEnum","previousValue","previousValueIsMut","initInStart","valueDeclaration","In_const_enum_declarations_member_initializer_must_be_constant_expression","Enum_member_must_have_initializer","AddI32","compileFunctionUsingTypeArguments","resolveFunctionInclTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","stmts","compileStatements","unshift","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","alternativeReportNode","resolveClassInclTypeArguments","compileClass","staticMembers","ctorInstance","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","numStatements","Nop","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","terminated","block","repeatLabel","alwaysTrue","condPre","incrExpr","bodyStatement","bodyExpr","usesContinue","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifTrueExpr","ifFalseExpr","ifFalseFlow","numCases","context","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","count","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","compileInlineConstant","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","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","operatorInstance","valueExpr","argumentExpressions","thisArg","compileCallDirect","valueExpression","resolveExpression","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","currentElementExpression","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","Index_signature_is_missing_in_type_0","valueWithCorrectType","tee","thisExpression","currentThisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","indexedGet","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","typeNode","argumentExpression","inferredType","concreteType","resolvedTypeArguments","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","compileGetter","compileCallIndirect","typeArgumentNodes","resolveTypeArguments","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","includes","compileCallInlineUnchecked","Function_0_cannot_be_inlined_into_itself","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","isInstance","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","Optional_parameter_must_have_an_initializer","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","resolveElementAccess","retainConstantType","scopedThis","_this_cannot_be_referenced_in_current_location","superType","_super_can_only_be_referenced_in_a_derived_class","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","compileStringLiteral","compileObjectLiteral","ensureStaticString","stringValue","stringSegment","headerSize","totalSize","buf","writeI32","ensureGCHook","writeI16","stringOffset","ensureStaticArray","elementType","byteLength","usizeTypeSize","bufferInstance","bufferHeaderSize","bufferTotalSize","clz","writeI8","writeI64","writeF32","writeF64","bufferOffset","arrayInstance","arrayHeaderSize","arrayOffset","isConst","compiledValues","constantValues","nativeElementType","isStatic","arrayType","nativeArrayType","Constructor_of_class_0_must_not_require_any_arguments","Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration","Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration","hasErrors","Property_0_does_not_exist_on_type_1","compileAllocate","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","classInstance","currentClassInstance","makeAllocate","propertyAccess","resolvePropertyAccess","Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","fieldType","nativeFieldType","fieldDeclaration","parentElement","ReportMode","reportMode","REPORT","resolveSignature","numTypeArguments","paramType","instanceKey","placeholderType","parameterTypeNodes","parameterTypeNode","REST","returnTypeNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","contextualFunction","targetExpression","propertyName","elementAccess","explicitLocal","functionTarget","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","signatureParameters","signatureParameterCount","parameterDeclaration","resolveFunctionPartially","partialKey","partialPrototype","expectedTypeArguments","actualTypeArguments","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","inheritedMember","constructorPartial","baseField","fieldInstance","instanceProperty","partialGetterPrototype","partialSetterPrototype","overloadPrototype","operatorPartial","typeParameterNodes","binaryen","emitText","emitAsmjs","Binaryen","__memory_allocate","_malloc","__memory_free","_free","__memory_copy","_memmove","__store","HEAPU8","__load","globalScope","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","Math","fround","MIN_POSITIVE_VALUE","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","EPSILON","clz32","abs","floor","trunc","round","sqrt","x","y","sign","isTrueish","radix","parseInt","undefined","fromCodePoint","Number","isInteger","isArray","HEAP","HEAP_OFFSET","oldHeap","copy","dest","src","copyWithin","F64","Float64Array","F32","Float32Array","I32","Int32Array","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","Long","ZERO","ONE","lo","hi","fromBits","low","high","sub","mul","i64_div","div","i64_div_u","toUnsigned","toSigned","i64_rem","mod","i64_rem_u","and","or","i64_xor","xor","shl","i64_shr","shr","shru","not","i64_eq","eq","ne","fromInt","minSafeF32","fromNumber","maxSafeF32","gte","lte","minSafeF64","maxSafeF64","toNumber","i64_to_string","unsigned","wasm","WebAssembly","Instance","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","cachedObj","cache","isNaN","UZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","pow","fromString","RangeError","indexOf","radixToPower","power","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","UONE","NEG_ONE","LongPrototype","toInt","isZero","isNegative","radixLong","rem1","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","lessThan","comp","lt","lessThanOrEqual","le","greaterThan","gt","greaterThanOrEqual","ge","compare","thisNeg","otherNeg","negate","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","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","compiler","evaluateConstantType","SWALLOW","expr_1","ClzI64","CtzI64","PopcntI64","RotlI32","RotlI64","RotrI32","RotrI64","AbsF32","AbsF64","tempLocal0","tempLocal1","MaxF32","MaxF64","MinF32","MinF64","CeilF32","CeilF64","FloorF32","FloorF64","CopysignF32","CopysignF64","NearestF32","NearestF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","SqrtF32","SqrtF64","TruncF32","TruncF64","evaluateConstantOffset","alignLog2","Type_0_has_no_property_1","CurrentMemory","GrowMemory","abort","operandExprs","signatureParts","nativeParamTypes","operandType","User_defined_0","expr_2","deferASM","deferASMCall","typeArgument","valueType","stringType","messageArg","filenameArg","existingIndex","gcPrototype","gcInstance","VIRTUAL","nativeSizeSize","baseInstance","allocateInstance","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","isUnicodeIdentifierStart","unicodeIdentifierPart","isUnicodeIdentifierPart","mid","separator","ipos","dirname","origin","indentX1","indentX2","indentX4","indent","readI32","readI64","readI8","readI16","readF32","readF64","valueI64","decompiler_1","definitions_1","formatDiagnostic","parser_1","parseFile","parser","Parser","nextFile","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","setOptimizeLevelHints","optimizeLevel","shrinkLevel","finishParsing","compileProgram","decompileModule","decompiler","Decompiler","decompile","buildIDL","IDLBuilder","build","buildTSD","TSDBuilder","functionId","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Switch","CallImport","CallIndirect","SetGlobal","Store","Drop","Host","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","indentLevel","typeToString","members_1","members_1_1","visitInterface","numMembers","members_2","members_2_1","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","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","Interface_declaration_cannot_have_implements_clause","parseClassMember","parseClassExpression","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","Method_0_cannot_have_an_implementation_because_it_is_marked_abstract","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","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","startPos_1","QUOTED","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","skipBlock","depth","Precedence"],"mappings":"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M,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,OAEtCE,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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__15__) {\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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = 12);\n","/**\r\n * Common constants.\r\n * @module common\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 compiled. */\r\n COMPILED = 1 << 21,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 22,\r\n /** Is scoped. */\r\n SCOPED = 1 << 23,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 24,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 25,\r\n /** Is the main function. */\r\n MAIN = 1 << 26,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 27\r\n}\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/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\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[96m\";\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 * 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 * 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 \"./common\";\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 CharCode\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 CLASS,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\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/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\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.parameters = 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 name: 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 = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\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 createClassExpression(\r\n declaration: ClassDeclaration\r\n ): ClassExpression {\r\n var expr = new ClassExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\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 createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\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 createObjectLiteralExpression(\r\n names: IdentifierExpression[],\r\n values: Expression[],\r\n range: Range\r\n ): ObjectLiteralExpression {\r\n var expr = new ObjectLiteralExpression();\r\n expr.range = range;\r\n expr.names = names;\r\n expr.values = values;\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[] | null,\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; if (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 parameters: 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 OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL,\r\n BUILTIN\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (nameStr == \"builtin\") return DecoratorKind.BUILTIN;\r\n break;\r\n }\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\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 class expression using the 'class' keyword. */\r\nexport class ClassExpression extends Expression {\r\n kind = NodeKind.CLASS;\r\n\r\n /** Inline class declaration. */\r\n declaration: ClassDeclaration;\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 `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\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 an object literal expression. */\r\nexport class ObjectLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.OBJECT;\r\n\r\n /** Field names. */\r\n names: IdentifierExpression[];\r\n /** Field values. */\r\n values: Expression[];\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\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: 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 /** Re-exported sources. */\r\n exportPaths: Set | null = null;\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 var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\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 if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\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/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\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 == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n 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","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\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 GETTER_PREFIX,\r\n SETTER_PREFIX,\r\n FILESPACE_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Options,\r\n Feature\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} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeParameterNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n StringLiteralExpression,\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 decoratorNameToKind,\r\n findDecorator\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\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\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 a module-level export. */\r\nclass ModuleExport {\r\n element: Element;\r\n identifier: IdentifierExpression;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\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 /** Resolver instance. */\r\n resolver: Resolver;\r\n /** Diagnostic offset used where successively obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\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\r\n /** ArrayBuffer instance reference. */\r\n arrayBufferInstance: Class | null = null;\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n /** Start function reference. */\r\n startFunction: FunctionPrototype;\r\n /** Main function reference, if present. */\r\n mainFunction: FunctionPrototype | null = null;\r\n /** Abort function reference, if present. */\r\n abortInstance: Function | null = null;\r\n /** Memory allocation function. */\r\n memoryAllocateInstance: Function | null = null;\r\n\r\n /** Whether a garbage collector is present or not. */\r\n hasGC: bool = false;\r\n /** Garbage collector allocation function. */\r\n gcAllocateInstance: Function | null = null;\r\n /** Garbage collector link function called when a managed object is referenced from a parent. */\r\n gcLinkInstance: Function | null = null;\r\n /** Garbage collector mark function called to on reachable managed objects. */\r\n gcMarkInstance: Function | null = null;\r\n /** Size of a managed object header. */\r\n gcHeaderSize: u32 = 0;\r\n /** Offset of the GC hook. */\r\n gcHookOffset: u32 = 0;\r\n\r\n /** Currently processing filespace. */\r\n currentFilespace: Filespace;\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.resolver = new Resolver(this);\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 var tmp: string;\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + \".ts\") ||\r\n this.getSource( tmp + \"/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\r\n // add built-in types\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 // add compiler hints\r\n this.setConstantInteger(\"ASC_TARGET\", Type.i32,\r\n i64_new(options.isWasm64 ? 2 : 1));\r\n this.setConstantInteger(\"ASC_NO_TREESHAKING\", Type.bool,\r\n i64_new(options.noTreeShaking ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_NO_ASSERT\", Type.bool,\r\n i64_new(options.noAssert ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_MEMORY_BASE\", Type.i32,\r\n i64_new(options.memoryBase, 0));\r\n this.setConstantInteger(\"ASC_OPTIMIZE_LEVEL\", Type.i32,\r\n i64_new(options.optimizeLevelHint, 0));\r\n this.setConstantInteger(\"ASC_SHRINK_LEVEL\", Type.i32,\r\n i64_new(options.shrinkLevelHint, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_MUTABLE_GLOBAL\", Type.bool,\r\n i64_new(options.hasFeature(Feature.MUTABLE_GLOBAL) ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_SIGN_EXTENSION\", Type.bool,\r\n i64_new(options.hasFeature(Feature.SIGN_EXTENSION) ? 1 : 0, 0));\r\n\r\n // remember deferred elements\r\n var queuedImports = new Array();\r\n var queuedExports = new Map();\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\r\n // create one filespace per source\r\n let filespace = new Filespace(this, source);\r\n this.elementsLookup.set(filespace.internalName, filespace);\r\n this.currentFilespace = filespace;\r\n\r\n // process this source's statements\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 declaration = queuedImport.declaration;\r\n if (declaration) { // named\r\n let element = this.tryLocateImport(queuedImport.externalName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryLocateImport(queuedImport.externalNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.localName, 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 declaration.range,\r\n (declaration.parent).path.value,\r\n declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n } else { // filespace\r\n let element = this.elementsLookup.get(queuedImport.externalName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.externalNameAlt)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n assert(false); // already reported by the parser not finding the file\r\n ++i;\r\n }\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.externalName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n queuedExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.externalName);\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.externalName)) ||\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 queuedExport.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 var resolver = this.resolver;\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 = resolver.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 {\r\n let globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n }\r\n\r\n // register 'ArrayBuffer'\r\n if (this.elementsLookup.has(\"ArrayBuffer\")) {\r\n let element = assert(this.elementsLookup.get(\"ArrayBuffer\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayBufferInstance = resolver.resolveClass(element, null);\r\n }\r\n\r\n // register 'Array'\r\n if (this.elementsLookup.has(\"Array\")) {\r\n let element = assert(this.elementsLookup.get(\"Array\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = element;\r\n }\r\n\r\n // register 'String'\r\n if (this.elementsLookup.has(\"String\")) {\r\n let element = assert(this.elementsLookup.get(\"String\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n let instance = resolver.resolveClass(element, null);\r\n if (instance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (element).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 = instance;\r\n this.typesLookup.set(\"string\", instance.type);\r\n }\r\n }\r\n }\r\n\r\n // register 'start'\r\n {\r\n let element = assert(this.elementsLookup.get(\"start\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.startFunction = element;\r\n }\r\n\r\n // register 'main' if present\r\n if (this.moduleLevelExports.has(\"main\")) {\r\n let element = (this.moduleLevelExports.get(\"main\")).element;\r\n if (\r\n element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n !(element).isAny(CommonFlags.GENERIC | CommonFlags.AMBIENT)\r\n ) {\r\n (element).set(CommonFlags.MAIN);\r\n this.mainFunction = element;\r\n }\r\n }\r\n\r\n // register 'abort' if present\r\n if (this.elementsLookup.has(\"abort\")) {\r\n let element = this.elementsLookup.get(\"abort\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.abortInstance = instance;\r\n }\r\n\r\n // register 'memory.allocate' if present\r\n if (this.elementsLookup.has(\"memory\")) {\r\n let element = this.elementsLookup.get(\"memory\");\r\n let members = element.members;\r\n if (members) {\r\n if (members.has(\"allocate\")) {\r\n element = assert(members.get(\"allocate\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.memoryAllocateInstance = instance;\r\n }\r\n }\r\n }\r\n\r\n // register GC hooks if present\r\n if (\r\n this.elementsLookup.has(\"__gc_allocate\") &&\r\n this.elementsLookup.has(\"__gc_link\") &&\r\n this.elementsLookup.has(\"__gc_mark\")\r\n ) {\r\n // __gc_allocate(usize, (ref: usize) => void): usize\r\n let element = this.elementsLookup.get(\"__gc_allocate\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcAllocateInstance = assert(this.resolver.resolveFunction(element, null));\r\n let signature = gcAllocateInstance.signature;\r\n assert(signature.parameterTypes.length == 2);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.parameterTypes[1].signatureReference);\r\n assert(signature.returnType == this.options.usizeType);\r\n\r\n // __gc_link(usize, usize): void\r\n element = this.elementsLookup.get(\"__gc_link\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcLinkInstance = assert(this.resolver.resolveFunction(element, null));\r\n signature = gcLinkInstance.signature;\r\n assert(signature.parameterTypes.length == 2);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.parameterTypes[1] == this.options.usizeType);\r\n assert(signature.returnType == Type.void);\r\n\r\n // __gc_mark(usize): void\r\n element = this.elementsLookup.get(\"__gc_mark\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcMarkInstance = assert(this.resolver.resolveFunction(element, null));\r\n signature = gcMarkInstance.signature;\r\n assert(signature.parameterTypes.length == 1);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.returnType == Type.void);\r\n\r\n this.gcAllocateInstance = gcAllocateInstance;\r\n this.gcLinkInstance = gcLinkInstance;\r\n this.gcMarkInstance = gcMarkInstance;\r\n let gcHookOffset = 2 * options.usizeType.byteSize; // .next + .prev\r\n this.gcHookOffset = gcHookOffset;\r\n this.gcHeaderSize = (gcHookOffset + 4 + 7) & ~7; // + .hook index + alignment\r\n this.hasGC = true;\r\n }\r\n }\r\n\r\n /** Sets a constant integer value. */\r\n setConstantInteger(globalName: string, type: Type, value: I64): void {\r\n assert(type.is(TypeFlags.INTEGER));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantIntegerValue(value)\r\n );\r\n }\r\n\r\n /** Sets a constant float value. */\r\n setConstantFloat(globalName: string, type: Type, value: f64): void {\r\n assert(type.is(TypeFlags.FLOAT));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantFloatValue(value)\r\n );\r\n }\r\n\r\n /** Tries to locate an import by traversing exports and queued exports. */\r\n private tryLocateImport(\r\n externalName: string,\r\n queuedNamedExports: 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(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n /** Checks that only supported decorators are present. */\r\n private checkDecorators(\r\n decorators: DecoratorNode[],\r\n acceptedFlags: DecoratorFlags\r\n ): 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 let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (flag == DecoratorFlags.BUILTIN) {\r\n if (decorator.range.source.isLibrary) {\r\n presentFlags |= flag;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n }\r\n } else if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Checks and sets up global options of an element. */\r\n private checkGlobal(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n // alias globally if explicitly annotated @global or exported from a top-level library file\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\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 }\r\n }\r\n // builtins use the global name directly\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n element.internalName = declaration.programLevelInternalName;\r\n }\r\n }\r\n\r\n /** Initializes a class declaration. */\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.checkDecorators(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 for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.warning( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\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 this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\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 assert(false); // should have been reported while parsing\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n /** Initializes a field of a class or interface. */\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 var isInterface = classPrototype.kind == ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(false);\r\n }\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.checkDecorators(decorators, DecoratorFlags.INLINE)\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 if (staticField.hasDecorator(DecoratorFlags.INLINE) && !staticField.is(CommonFlags.READONLY)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(!declaration.isAny(CommonFlags.ABSTRACT | CommonFlags.GET | CommonFlags.SET));\r\n }\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.checkDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n /** Initializes a method of a class or interface. */\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.checkDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\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 if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\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 = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\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\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.checkDecorators(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 this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element,\r\n identifier: declaration.name\r\n });\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.checkGlobal(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 if (members) { // named\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 } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n externalIdentifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = externalIdentifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = externalIdentifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if a top-level export of a library file\r\n var source = externalIdentifier.range.source;\r\n if (source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n externalIdentifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n\r\n // add module level export if a top-level export of an entry file\r\n } else if (source.isEntry) {\r\n this.moduleLevelExports.set(externalIdentifier.text, {\r\n element,\r\n identifier: externalIdentifier\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 (this.elementsLookup.has(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n this.elementsLookup.get(referencedName),\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.externalName = referencedName; // -> here: local 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.externalName);\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.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\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.externalName = referencedName; // -> here: external 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.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\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 this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n this.checkGlobal(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\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = 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(externalName)) {\r\n this.elementsLookup.set(localName, 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.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\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 simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(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 this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\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.checkGlobal(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.checkGlobal(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 this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n if (existingExport.element !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, {\r\n element: namespace,\r\n identifier: declaration.name\r\n });\r\n }\r\n namespace.set(CommonFlags.MODULE_EXPORT);\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.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\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 (global.hasDecorator(DecoratorFlags.INLINE) && !global.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\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 this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: global,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n this.checkGlobal(global, declaration);\r\n }\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 /** A {@link Filespace}. */\r\n FILESPACE,\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 a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6,\r\n /** Is using a different external name. */\r\n EXTERNAL = 1 << 7,\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 8\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:\r\n case DecoratorKind.OPERATOR_BINARY: return DecoratorFlags.OPERATOR_BINARY;\r\n case DecoratorKind.OPERATOR_PREFIX: return DecoratorFlags.OPERATOR_PREFIX;\r\n case DecoratorKind.OPERATOR_POSTFIX: return DecoratorFlags.OPERATOR_POSTFIX;\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 case DecoratorKind.EXTERNAL: return DecoratorFlags.EXTERNAL;\r\n case DecoratorKind.BUILTIN: return DecoratorFlags.BUILTIN;\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 filespace representing the implicit top-level namespace of a source. */\r\nexport class Filespace extends Element {\r\n\r\n kind = ElementKind.FILESPACE;\r\n\r\n /** File members (externally visible only). */\r\n members: Map; // more specific\r\n\r\n /** Constructs a new filespace. */\r\n constructor(\r\n program: Program,\r\n source: Source\r\n ) {\r\n super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath);\r\n this.members = new Map();\r\n }\r\n}\r\n\r\n/** A namespace that differs from a filespace in being user-declared with a name. */\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(value: I64): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = value;\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 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))) {\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 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 /** Function index of the GC hook. */\r\n gcHookIndex: u32 = -1;\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 offsetof(fieldName: string): u32 {\r\n var members = assert(this.members);\r\n assert(members.has(fieldName));\r\n var field = members.get(fieldName);\r\n assert(field.kind == ElementKind.FIELD);\r\n return (field).memoryOffset;\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 // categorical\r\n\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always returns a wrapped value. */\r\n RETURNS_WRAPPED = 1 << 1,\r\n /** This branch always throws. */\r\n THROWS = 1 << 2,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 3,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 4,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 5,\r\n\r\n // conditional\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 6,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 7,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 8,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 9,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 10,\r\n\r\n // special\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 11,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 12,\r\n\r\n // masks\r\n\r\n /** Any terminating flag. */\r\n ANY_TERMINATING = FlowFlags.RETURNS\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES,\r\n\r\n /** Any categorical flag. */\r\n ANY_CATEGORICAL = 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 /** Any conditional flag. */\r\n ANY_CONDITIONAL = FlowFlags.CONDITIONALLY_RETURNS\r\n | FlowFlags.CONDITIONALLY_THROWS\r\n | FlowFlags.CONDITIONALLY_BREAKS\r\n | FlowFlags.CONDITIONALLY_CONTINUES\r\n | FlowFlags.CONDITIONALLY_ALLOCATES\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: FlowFlags): 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 /** Forks this flow to a child flow. */\r\n fork(): 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 /** Frees this flow's scoped variables. */\r\n free(): Flow {\r\n var parent = assert(this.parent);\r\n if (this.scopedLocals) { // free block-scoped locals\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 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. blocks). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (FlowFlags.ANY_CATEGORICAL | FlowFlags.ANY_CONDITIONAL);\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 categorical flags as conditional flags from the specified flow (e.g. then without else). */\r\n inheritConditional(other: Flow): void {\r\n if (other.is(FlowFlags.RETURNS)) {\r\n this.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (other.is(FlowFlags.THROWS)) {\r\n this.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (other.is(FlowFlags.BREAKS) && other.breakLabel == this.breakLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (other.is(FlowFlags.CONTINUES) && other.continueLabel == this.continueLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (other.is(FlowFlags.ALLOCATES)) {\r\n this.set(FlowFlags.CONDITIONALLY_ALLOCATES);\r\n }\r\n }\r\n\r\n /** Inherits mutual flags and local wrap states from the specified flows (e.g. then with else). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // categorical flags set in both arms\r\n this.flags |= left.flags & right.flags & FlowFlags.ANY_CATEGORICAL;\r\n\r\n // conditional flags set in at least one arm\r\n this.flags |= left.flags & FlowFlags.ANY_CONDITIONAL;\r\n this.flags |= right.flags & FlowFlags.ANY_CONDITIONAL;\r\n\r\n // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(left.wrappedLocals, right.wrappedLocals);\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 * 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 const enum NativeType {\r\n None = 0, // _BinaryenTypeNone(),\r\n I32 = 1, // _BinaryenTypeInt32(),\r\n I64 = 2, // _BinaryenTypeInt64(),\r\n F32 = 3, // _BinaryenTypeFloat32(),\r\n F64 = 4, // _BinaryenTypeFloat64(),\r\n Unreachable = 5, // _BinaryenTypeUnreachable(),\r\n Auto = -1 // _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 = memory.allocate(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 = memory.allocate(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(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 memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(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 memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(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 memory.free(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 memory.free(cStr);\r\n memory.free(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(cStr);\r\n memory.free(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 memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(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 memory.free(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 memory.free(cStr2);\r\n memory.free(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 memory.free(cStr2);\r\n memory.free(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 memory.free(cStr2);\r\n memory.free(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 memory.free(cStr2);\r\n memory.free(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 memory.free(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 memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(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 memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(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 memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(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 memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(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 memory.free(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 memory.free(cArr3);\r\n memory.free(cArr2);\r\n memory.free(cArr1);\r\n for (let i = k - 1; i >= 0; --i) memory.free(segs[i]);\r\n memory.free(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 memory.free(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 getOptimizeLevel(): i32 {\r\n return _BinaryenGetOptimizeLevel();\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n getShrinkLevel(): i32 {\r\n return _BinaryenGetShrinkLevel();\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 memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0; // for free'ing\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeExpression(expr: ExpressionRef): ExpressionRef {\r\n // remember the previous optimize levels and set to max instead, to be sure\r\n var previousOptimizeLevel = _BinaryenGetOptimizeLevel();\r\n var previousShrinkLevel = _BinaryenGetShrinkLevel();\r\n var previousDebugInfo = _BinaryenGetDebugInfo();\r\n _BinaryenSetOptimizeLevel(4);\r\n _BinaryenSetShrinkLevel(0);\r\n _BinaryenSetDebugInfo(false);\r\n\r\n // wrap the expression in a temp. function and run the precompute pass on it\r\n var type = _BinaryenExpressionGetType(expr);\r\n var func = this.addTemporaryFunction(type, null, expr);\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 expr = _BinaryenFunctionGetBody(func);\r\n this.removeTemporaryFunction();\r\n\r\n // reset optimize levels to previous\r\n _BinaryenSetOptimizeLevel(previousOptimizeLevel);\r\n _BinaryenSetShrinkLevel(previousShrinkLevel);\r\n _BinaryenSetDebugInfo(previousDebugInfo);\r\n return expr;\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) memory.free(cStr);\r\n if (binaryPtr) memory.free(binaryPtr);\r\n if (sourceMapPtr) memory.free(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 memory.free(this.cachedByValue);\r\n memory.free(this.cachedTemporaryName);\r\n memory.free(this.cachedPrecomputeName);\r\n memory.free(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 memory.free(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 memory.free(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 = memory.allocate(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 = memory.allocate(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 = memory.allocate(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/** Tests if an expression needs an explicit 'unreachable' when it is the terminating statement. */\r\nexport function needsExplicitUnreachable(expr: ExpressionRef): bool {\r\n // not applicable if pushing a value to the stack\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n case NativeType.I64:\r\n case NativeType.F32:\r\n case NativeType.F64: return false;\r\n }\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Unreachable:\r\n case ExpressionId.Return: return false;\r\n case ExpressionId.Break: return _BinaryenBreakGetCondition(expr) != 0;\r\n case ExpressionId.Block: {\r\n if (!_BinaryenBlockGetName(expr)) { // can't break out of it\r\n let numChildren = _BinaryenBlockGetNumChildren(expr); // last child needs unreachable\r\n return numChildren > 0 && needsExplicitUnreachable(_BinaryenBlockGetChild(expr, numChildren - 1));\r\n }\r\n }\r\n }\r\n return true;\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 * 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 Program,\r\n DecoratorFlags\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 closest int type representing this type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8: return Type.i8;\r\n case TypeKind.I16: return Type.i16;\r\n case TypeKind.F32:\r\n case TypeKind.I32: return Type.i32;\r\n case TypeKind.F64:\r\n case TypeKind.I64: return Type.i64;\r\n case TypeKind.ISIZE: return this.size == 64 ? Type.isize64 : Type.isize32;\r\n case TypeKind.U8: return Type.u8;\r\n case TypeKind.U16: return Type.u16;\r\n case TypeKind.U32: return Type.u32;\r\n case TypeKind.U64: return Type.u64;\r\n case TypeKind.USIZE: return this.size == 64 ? Type.usize64 : Type.usize32;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\r\n }\r\n\r\n /** Tests if this is a managed type that needs GC hooks. */\r\n isManaged(program: Program): bool {\r\n if (program.hasGC) {\r\n let classReference = this.classReference;\r\n return classReference !== null && !classReference.hasDecorator(DecoratorFlags.UNMANAGED);\r\n }\r\n return false;\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.nonNullableType = this;\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, signednessIsRelevant: 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 (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) {\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 }\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 (!signednessIsRelevant || 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 if (!kindOnly && this.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.classReference;\r\n if (classReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? classReference.toString() + \" | null\"\r\n : classReference.toString();\r\n }\r\n let signatureReference = this.signatureReference;\r\n if (signatureReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? \"(\" + signatureReference.toString(true) + \") | null\"\r\n : signatureReference.toString(true);\r\n }\r\n assert(false);\r\n }\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: return \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n default: assert(false);\r\n case TypeKind.VOID: return \"void\";\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 * 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 assert(text.length);\r\n switch (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.FOR:\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 )) break;\r\n // otherwise fall-through\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 for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {\r\n if (isLineBreak(text.charCodeAt(pos))) {\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) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\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 var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(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 if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\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 } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\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 var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(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 if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\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 } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\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 var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(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 if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\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 } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\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 var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(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 if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\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 } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\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 // TODO: numeric separators (parseFloat can't handle these)\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 * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate,\r\n compileAbort,\r\n compileIterateRoots,\r\n ensureGCHook\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 getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n needsExplicitUnreachable\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\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 \"./common\";\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 ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Resolver, ReportMode\r\n} from \"./resolver\";\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 DecoratorKind,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\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 InstanceOfExpression,\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 ObjectLiteralExpression,\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\r\n nodeIsConstantValue,\r\n isLastStatement,\r\n findDecorator\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 writeI8,\r\n writeI16,\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, 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 /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: i32 = 0;\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 /** Hinted optimize level. Not applied by the compiler itself. */\r\n optimizeLevelHint: i32 = 0;\r\n /** Hinted shrink level. Not applied by the compiler itself. */\r\n shrinkLevelHint: i32 = 0;\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 /** Resolver reference. */\r\n resolver: Resolver;\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 /** Current outer function in compilation, if compiling a function expression. */\r\n currentOuterFunction: Function | null = null;\r\n /** Current inline functions stack. */\r\n currentInlineFunctions: Function[] = [];\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: 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: FunctionRef[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n /** Indicates whether the iterateRoots function must be generated. */\r\n needsIterateRoots: bool = false;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\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\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\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 or called by main\r\n if (startFunctionBody.length || program.mainFunction !== null) {\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 if (!program.mainFunction) module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n var 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 var numPages = this.memorySegments.length\r\n ? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))\r\n : 0;\r\n module.setMemory(\r\n numPages,\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 // 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 module.setFunctionTable(functionTable);\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 // set up module exports\r\n for (let [name, moduleExport] of program.moduleLevelExports) {\r\n this.makeModuleExport(name, moduleExport.element);\r\n }\r\n\r\n // set up gc\r\n if (this.needsIterateRoots) compileIterateRoots(this);\r\n\r\n return module;\r\n }\r\n\r\n /** Applies the respective module export(s) for the specified element. */\r\n private makeModuleExport(name: string, element: Element, prefix: string = \"\"): void {\r\n\r\n // traverse members\r\n var members = element.members;\r\n if (members) {\r\n let subPrefix = prefix + name + (element.kind == ElementKind.CLASS\r\n ? INSTANCE_DELIMITER\r\n : STATIC_DELIMITER\r\n );\r\n if (element.kind == ElementKind.NAMESPACE) {\r\n for (let member of members.values()) {\r\n if (!member.is(CommonFlags.EXPORT)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n } else {\r\n for (let member of members.values()) {\r\n if (member.is(CommonFlags.PRIVATE)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n }\r\n }\r\n\r\n switch (element.kind) {\r\n\r\n // export global\r\n case ElementKind.GLOBAL: {\r\n let isConst = element.is(CommonFlags.CONST) || element.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n if (!isConst && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n if (!assert(element.parent).is(CommonFlags.CONST) && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n\r\n // export function\r\n case ElementKind.FUNCTION: {\r\n let instance = element;\r\n let signature = instance.signature;\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // utilize trampoline to fill in omitted arguments\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name);\r\n break;\r\n }\r\n\r\n // export getter and setter\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((element).getterPrototype);\r\n this.makeModuleExport(GETTER_PREFIX + name, getter, prefix);\r\n let setter = (element).setterPrototype;\r\n if (setter) this.makeModuleExport(SETTER_PREFIX + name, setter, prefix);\r\n break;\r\n }\r\n\r\n // export a getter and a setter\r\n case ElementKind.FIELD: {\r\n let module = this.module;\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 // make a getter\r\n let getterName = prefix + 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 // make a setter\r\n if (!element.is(CommonFlags.READONLY)) {\r\n let setterName = prefix + 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 }\r\n break;\r\n }\r\n\r\n // skip prototype and export instances\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n let ctor = instance.constructorInstance;\r\n if (ctor) this.makeModuleExport(instanceName + INSTANCE_DELIMITER + ctor.simpleName, ctor, prefix);\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n\r\n // all possible members already handled above\r\n case ElementKind.ENUM:\r\n case ElementKind.CLASS:\r\n case ElementKind.NAMESPACE: break;\r\n\r\n default: assert(false);\r\n }\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 startFunctionInstance = this.startFunctionInstance;\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, [], null);\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 = startFunctionInstance;\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.resolver.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.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\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) && global.hasDecorator(DecoratorFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isDeclaredConstant = global.is(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 (isDeclaredConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration, global.parent);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\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 constant\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 // evaluate initializer if present\r\n if (declaration !== null && declaration.initializer !== null) {\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 if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (isDeclaredConstant) {\r\n initExpr = module.precomputeExpression(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 // explicitly inline if annotated\r\n if (global.hasDecorator(DecoratorFlags.INLINE)) {\r\n if (!initializeInStart) { // reported above\r\n assert(getExpressionId(initExpr) == ExpressionId.Const);\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 }\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 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 normally\r\n module.addGlobal(internalName, nativeType, !isDeclaredConstant, initExpr);\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 var previousValueIsMut = false;\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 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 if (element.is(CommonFlags.CONST)) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.value.range\r\n );\r\n initInStart = true;\r\n }\r\n } else {\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else {\r\n if (previousValueIsMut) {\r\n this.error(\r\n DiagnosticCode.Enum_member_must_have_initializer,\r\n valueDeclaration.range\r\n );\r\n }\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n if (initInStart) {\r\n module.addGlobal(val.internalName, NativeType.I32, true, module.createI32(0));\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n previousValueIsMut = true;\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, !element.is(CommonFlags.CONST), initExpr);\r\n previousValueIsMut = false;\r\n }\r\n previousValue = val;\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 = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\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 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) && instance.hasDecorator(DecoratorFlags.BUILTIN)));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\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 | CommonFlags.MAIN));\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 let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\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 stmts.push(module.createGetLocal(0, 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 stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\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 stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\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 // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration, instance.prototype.parent); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\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 if (element.hasDecorator(DecoratorFlags.BUILTIN)) break;\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 fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let element = fileLevelExports.get(\r\n statement.range.source.internalPath + PATH_DELIMITER + member.externalName.text\r\n );\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 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 // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | 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 declaration\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 = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\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 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.ref);\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.startFunctionInstance) {\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 stmts.length = 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 switch (getExpressionId(stmt)) {\r\n case ExpressionId.Block: {\r\n if (!getBlockName(stmt)) {\r\n for (let j = 0, k = getBlockChildCount(stmt); j < k; ++j) stmts.push(getBlockChild(stmt, j));\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: stmts.push(stmt);\r\n case ExpressionId.Nop:\r\n }\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n if (needsExplicitUnreachable(stmt)) stmts.push(this.module.createUnreachable());\r\n break;\r\n }\r\n }\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n var parentFlow = this.currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n this.currentFunction.flow = flow;\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,getExpressionType(stmts[stmts.length - 1]));\r\n\r\n this.currentFunction.flow = flow.free();\r\n parentFlow.inherit(flow);\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 parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\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 (just a block)\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n parentFlow.inherit(flow);\r\n\r\n var block: ExpressionRef[] = [\r\n module.createLoop(continueLabel,\r\n terminated\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 ];\r\n if (terminated) block.push(module.createUnreachable());\r\n return module.createBlock(breakLabel, block);\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 parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\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 var repeatLabel = \"repeat|\" + label;\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 : 0;\r\n var condExpr: ExpressionRef = 0;\r\n var alwaysTrue = false;\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 = module.precomputeExpression(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 : 0;\r\n var bodyStatement = statement.statement;\r\n var bodyExpr = bodyStatement.kind == NodeKind.BLOCK && (bodyStatement).statements.length == 1\r\n ? this.compileStatement((bodyStatement).statements[0])\r\n : this.compileStatement(bodyStatement);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var usesContinue = flow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n var breakBlock = new Array(); // outer 'break' block\r\n if (initExpr) breakBlock.push(initExpr);\r\n\r\n var repeatBlock = new Array(); // block repeating the loop\r\n if (usesContinue) {\r\n repeatBlock.push(\r\n module.createBlock(continueLabel, [ // inner 'continue' block\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr)),\r\n bodyExpr\r\n ], NativeType.None)\r\n );\r\n } else { // can omit the 'continue' block\r\n repeatBlock.push(\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr))\r\n );\r\n repeatBlock.push(bodyExpr);\r\n }\r\n if (incrExpr) repeatBlock.push(incrExpr);\r\n repeatBlock.push(\r\n module.createBreak(repeatLabel)\r\n );\r\n\r\n breakBlock.push(\r\n module.createLoop(repeatLabel, module.createBlock(null, repeatBlock, NativeType.None))\r\n );\r\n\r\n return module.createBlock(breakLabel, breakBlock);\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 = module.precomputeExpression(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 parentFlow = currentFunction.flow;\r\n var ifTrueFlow = parentFlow.fork();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.free();\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n let ifFalseFlow = parentFlow.fork();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n currentFunction.flow = ifFalseFlow.free();\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n } else {\r\n parentFlow.inheritConditional(ifTrueFlow);\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 if (returnType == Type.void) {\r\n this.compileExpressionRetainType(statement.value, returnType, WrapMode.NONE);\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n statement.value.range, this.currentType.toString(), returnType.toString()\r\n );\r\n this.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\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 // If the last statement anyway, make it the block's return value\r\n if (isLastStatement(statement)) return expr ? expr : module.createNop();\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 var cases = statement.cases;\r\n var numCases = cases.length;\r\n if (!numCases) {\r\n return this.compileExpression(statement.condition, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\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\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 = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let isLast = i == numCases - 1;\r\n let nextLabel = isLast ? 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 let terminated = false;\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.isAny(FlowFlags.ANY_TERMINATING)) {\r\n terminated = true;\r\n break;\r\n }\r\n }\r\n }\r\n stmts.length = count;\r\n if (terminated || isLast) {\r\n if (!flow.is(FlowFlags.RETURNS)) alwaysReturns = false;\r\n if (!flow.is(FlowFlags.RETURNS_WRAPPED)) alwaysReturnsWrapped = false;\r\n if (!flow.is(FlowFlags.THROWS)) alwaysThrows = false;\r\n if (!flow.is(FlowFlags.ALLOCATES)) alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS\r\n );\r\n currentFunction.flow = flow.free();\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 (guaranteed to handle any value), propagate common flags\r\n if (defaultIndex >= 0) {\r\n if (alwaysReturns) parentFlow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) parentFlow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) parentFlow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) parentFlow.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 compileAbort(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.startFunctionInstance &&\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 var resolver = this.resolver;\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 = resolver.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.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\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.module.precomputeExpression(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(\r\n i64_new(\r\n getConstValueI32(initExpr),\r\n 0\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n )\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 = module.precomputeExpression(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 parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\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 alwaysTrue = false; // TODO\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n terminated\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 ]);\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 // monkey-patch for converting built-in floats to f32 implicitly\r\n if (!(element.hasDecorator(DecoratorFlags.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.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\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.module.precomputeExpression(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\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) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\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\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 fromType.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.resolver.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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\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 // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 = this.resolver.resolveFunction(prototype, null);\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 = this.resolver.resolveFunction(prototype, null);\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 = this.resolver.resolveFunction(prototype, null);\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 = this.resolver.resolveFunction(prototype, null);\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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\r\n }\r\n\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:\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.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // 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: {\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.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must 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:\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\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 valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\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 leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\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 = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\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 resolver = program.resolver;\r\n var currentFunction = this.currentFunction;\r\n var target = resolver.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 targetType: 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 targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let instance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = 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 (resolver.currentElementExpression) { // 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 targetType = 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 assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, 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.resolver.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 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, 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.resolver.currentThisExpression);\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 // TODO: call __gc_link here if a GC is present\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 // TODO: call __gc_link here if a GC is present\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 = this.resolver.resolveFunction(setterPrototype, null);\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.resolver.currentThisExpression);\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 = this.resolver.resolveFunction(getterPrototype, null);\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.resolver.currentThisExpression);\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.resolver.currentElementExpression;\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.resolver.currentThisExpression);\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.resolver.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.hasDecorator(DecoratorFlags.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 = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\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.parameters;\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.parameters[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.resolver.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments\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 = this.resolver.resolveFunction(\r\n prototype,\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 = this.resolver.resolveFunction(\r\n prototype,\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.resolver.currentThisExpression),\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 if ((target).is(CommonFlags.INLINED)) {\r\n indexArg = module.createI32(i64_low((target).constantIntegerValue));\r\n } else {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\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.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.resolver.currentThisExpression);\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, 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\r\n case ElementKind.PROPERTY: {\r\n indexArg = this.compileGetter(target, expression.expression);\r\n let type = this.currentType;\r\n signature = type.signatureReference;\r\n if (!signature) {\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, type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n break;\r\n }\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 typeArguments: Type[] | null = null;\r\n\r\n // builtins handle omitted type arguments on their own. if present, however, resolve them here\r\n // and pass them to the builtin, even if it's still up to the builtin how to handle them.\r\n var typeArgumentNodes = expression.typeArguments;\r\n if (expression.typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.range, prototype.internalName\r\n );\r\n }\r\n typeArguments = this.resolver.resolveTypeArguments(\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n\r\n // now compile the builtin, which usually returns a block of code that replaces the call.\r\n var expr = compileBuiltinCall(\r\n this,\r\n prototype,\r\n typeArguments,\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 if (this.currentInlineFunctions.includes(instance)) {\r\n this.warning(\r\n DiagnosticCode.Function_0_cannot_be_inlined_into_itself,\r\n reportNode.range, instance.internalName\r\n );\r\n } else {\r\n this.currentInlineFunctions.push(instance);\r\n let expr = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n this.currentInlineFunctions.pop();\r\n return expr;\r\n }\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.parameters[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.ANY_TERMINATING)) 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 are terminated\r\n if (returnType != Type.void && !flow.isAny(FlowFlags.ANY_TERMINATING)) {\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.parameters;\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(\"outOfRange\", [\r\n module.createSwitch(names, \"outOfRange\",\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 let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\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.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\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.resolver.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.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let localType = (target).type;\r\n assert(localType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\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 = this.resolver.resolveFunction(\r\n target,\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 compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\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 false, // TODO: isConst?\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 if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (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)) 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_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 if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\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.compileStringLiteral(expression);\r\n }\r\n case LiteralKind.OBJECT: {\r\n assert(!implicitNegate);\r\n return this.compileObjectLiteral(expression, contextualType);\r\n }\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 /** Ensures that the specified string exists in static memory and returns a pointer to it. */\r\n ensureStaticString(stringValue: string): ExpressionRef {\r\n var program = this.program;\r\n var hasGC = program.hasGC;\r\n var gcHeaderSize = program.gcHeaderSize;\r\n\r\n var stringInstance = assert(program.stringInstance);\r\n var stringSegment: MemorySegment;\r\n\r\n // if the string already exists, reuse it\r\n var segments = this.stringSegments;\r\n if (segments.has(stringValue)) {\r\n stringSegment = segments.get(stringValue);\r\n\r\n // otherwise create it\r\n } else {\r\n let length = stringValue.length;\r\n let headerSize = (stringInstance.currentMemoryOffset + 1) & ~1;\r\n let totalSize = headerSize + length * 2;\r\n\r\n let buf: Uint8Array;\r\n let pos: u32;\r\n\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + totalSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, stringInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(totalSize);\r\n pos = 0;\r\n }\r\n writeI32(length, buf, pos + stringInstance.offsetof(\"length\"));\r\n pos += headerSize;\r\n for (let i = 0; i < length; ++i) {\r\n writeI16(stringValue.charCodeAt(i), buf, pos + (i << 1));\r\n }\r\n stringSegment = this.addMemorySegment(buf);\r\n segments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n if (hasGC) stringOffset = i64_add(stringOffset, i64_new(gcHeaderSize));\r\n\r\n this.currentType = stringInstance.type;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n } else {\r\n assert(i64_is_u32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n }\r\n }\r\n\r\n compileStringLiteral(expression: StringLiteralExpression): ExpressionRef {\r\n return this.ensureStaticString(expression.value);\r\n }\r\n\r\n /** Ensures that the specified array exists in static memory and returns a pointer to it. */\r\n ensureStaticArray(elementType: Type, values: ExpressionRef[]): ExpressionRef {\r\n var program = this.program;\r\n var hasGC = program.hasGC;\r\n var gcHeaderSize = program.gcHeaderSize;\r\n\r\n var length = values.length;\r\n var byteSize = elementType.byteSize;\r\n var byteLength = length * byteSize;\r\n var usizeTypeSize = this.options.usizeType.byteSize;\r\n\r\n var buf: Uint8Array;\r\n var pos: u32;\r\n\r\n // create the backing ArrayBuffer segment\r\n var bufferInstance = assert(program.arrayBufferInstance);\r\n var bufferHeaderSize = (bufferInstance.currentMemoryOffset + 7) & ~7;\r\n var bufferTotalSize = 1 << (32 - clz(bufferHeaderSize + byteLength - 1));\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + bufferTotalSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, bufferInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(bufferTotalSize);\r\n pos = 0;\r\n }\r\n writeI32(byteLength, buf, pos + bufferInstance.offsetof(\"byteLength\"));\r\n pos += bufferHeaderSize;\r\n var nativeType = elementType.toNativeType();\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n switch (byteSize) {\r\n case 1: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI8(getConstValueI32(value), buf, pos);\r\n pos += 1;\r\n }\r\n break;\r\n }\r\n case 2: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI16(getConstValueI32(value), buf, pos);\r\n pos += 2;\r\n }\r\n break;\r\n }\r\n case 4: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI32(getConstValueI32(value), buf, pos);\r\n pos += 4;\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI64(i64_new(getConstValueI64Low(value), getConstValueI64High(value)), buf, pos);\r\n pos += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeF32(getConstValueF32(value), buf, pos);\r\n pos += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeF64(getConstValueF64(value), buf, pos);\r\n pos += 8;\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n var bufferSegment = this.addMemorySegment(buf);\r\n var bufferOffset = bufferSegment.offset;\r\n if (hasGC) bufferOffset = i64_add(bufferOffset, i64_new(gcHeaderSize));\r\n\r\n // create the Array segment and return a pointer to it\r\n var arrayPrototype = assert(program.arrayPrototype);\r\n var arrayInstance = assert(this.resolver.resolveClass(arrayPrototype, [ elementType ]));\r\n var arrayHeaderSize = (arrayInstance.currentMemoryOffset + 7) & ~7;\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + arrayHeaderSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, arrayInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(arrayHeaderSize);\r\n pos = 0;\r\n }\r\n var arraySegment = this.addMemorySegment(buf);\r\n var arrayOffset = arraySegment.offset;\r\n if (hasGC) arrayOffset = i64_add(arrayOffset, i64_new(gcHeaderSize));\r\n this.currentType = arrayInstance.type;\r\n if (usizeTypeSize == 8) {\r\n writeI64(bufferOffset, buf, pos + arrayInstance.offsetof(\"buffer_\"));\r\n writeI32(length, buf, pos + arrayInstance.offsetof(\"length_\"));\r\n return this.module.createI64(i64_low(arrayOffset), i64_high(arrayOffset));\r\n } else {\r\n assert(i64_is_u32(bufferOffset));\r\n writeI32(i64_low(bufferOffset), buf, pos + arrayInstance.offsetof(\"buffer_\"));\r\n writeI32(length, buf, pos + arrayInstance.offsetof(\"length_\"));\r\n assert(i64_is_u32(arrayOffset));\r\n return this.module.createI32(i64_low(arrayOffset));\r\n }\r\n }\r\n\r\n compileArrayLiteral(\r\n elementType: Type,\r\n expressions: (Expression | null)[],\r\n isConst: bool,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n // find out whether all elements are constant (array is static)\r\n var length = expressions.length;\r\n var compiledValues = new Array(length);\r\n var constantValues = new Array(length);\r\n var nativeElementType = elementType.toNativeType();\r\n var isStatic = true;\r\n for (let i = 0; i < length; ++i) {\r\n let expr = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n compiledValues[i] = expr;\r\n if (isStatic) {\r\n expr = module.precomputeExpression(compiledValues[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n constantValues[i] = expr;\r\n } else {\r\n if (isConst) {\r\n this.warning(\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 // make a static array if possible\r\n if (isStatic) return this.ensureStaticArray(elementType, constantValues);\r\n\r\n // otherwise 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 = this.resolver.resolveClass(arrayPrototype, [ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n // and compile an explicit instantiation\r\n this.currentType = arrayType;\r\n var 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 var nativeArrayType = arrayType.toNativeType();\r\n var currentFunction = this.currentFunction;\r\n var tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n var stmts = new Array(2 + length);\r\n var 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(length)\r\n ])\r\n );\r\n for (let i = 0; i < length; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n compiledValues[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 compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n\r\n // contextual type must be a class\r\n var classReference = contextualType.classReference;\r\n if (!classReference || classReference.is(CommonFlags.ABSTRACT)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, \"\", contextualType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // if present, check that the constructor is compatible with object literals\r\n var ctor = classReference.constructorInstance;\r\n if (ctor) {\r\n if (ctor.signature.requiredParameters) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PRIVATE)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PROTECTED)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // check and compile field values\r\n var names = expression.names;\r\n var numNames = names.length;\r\n var values = expression.values;\r\n var members = classReference.members;\r\n var hasErrors = false;\r\n var exprs = new Array(numNames + 2);\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n assert(numNames == values.length);\r\n for (let i = 0, k = numNames; i < k; ++i) {\r\n let member = members ? members.get(names[i].text) : null;\r\n if (!member || member.kind != ElementKind.FIELD) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n names[i].range, names[i].text, classReference.toString()\r\n );\r\n hasErrors = true;\r\n continue;\r\n }\r\n let type = (member).type;\r\n exprs[i + 1] = this.module.createStore( // TODO: handle setters as well\r\n type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(values[i], (member).type, ConversionKind.IMPLICIT, WrapMode.NONE),\r\n type.toNativeType(),\r\n (member).memoryOffset\r\n );\r\n }\r\n this.currentType = classReference.type.nonNullableType;\r\n if (hasErrors) return module.createUnreachable();\r\n\r\n // allocate a new instance first and assign 'this' to the temp. local\r\n exprs[0] = module.createSetLocal(\r\n tempLocal.index,\r\n compileAllocate(this, classReference, expression)\r\n );\r\n\r\n // once all field values have been set, return 'this'\r\n exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType);\r\n\r\n return module.createBlock(null, exprs, this.options.nativeSizeType);\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.resolver.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: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = this.resolver.resolveClass(\r\n classPrototype,\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = this.resolver.resolveClassInclTypeArguments(\r\n classPrototype,\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the top-most visible constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance: Function | null = null;\r\n do {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n if (constructorInstance) break; // TODO: check visibility\r\n } while (currentClassInstance = currentClassInstance.base);\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 module = this.module;\r\n\r\n var target = this.resolver.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 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 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(this.resolver.currentThisExpression);\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 return this.compileGetter(target, propertyAccess);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.error(\r\n DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set,\r\n propertyAccess.range, (target).simpleName\r\n );\r\n return module.createUnreachable();\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 private compileGetter(target: Property, reportNode: Node): ExpressionRef {\r\n var prototype = target.getterPrototype;\r\n if (prototype) {\r\n let instance = this.resolver.resolveFunction(prototype, null);\r\n if (!instance) return this.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 reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n let inline = (instance.decoratorFlags & DecoratorFlags.INLINE) != 0;\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(this.resolver.currentThisExpression); //!!!\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, [], reportNode, thisExpr, inline);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], reportNode, 0, inline);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n reportNode.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\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 var parentFlow = currentFunction.flow;\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.module.precomputeExpression(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 ifThenFlow = parentFlow.fork();\r\n currentFunction.flow = ifThenFlow;\r\n var ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n var ifThenType = this.currentType;\r\n ifThenFlow.free();\r\n\r\n var ifElseFlow = parentFlow.fork();\r\n currentFunction.flow = ifElseFlow;\r\n var ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n var ifElseType = this.currentType;\r\n currentFunction.flow = ifElseFlow.free();\r\n\r\n parentFlow.inheritMutual(ifThenFlow, ifElseFlow);\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 // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\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\r\n // TODO: check operator overload\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 this.module.createUnreachable();\r\n }\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\r\n // TODO: check operator overload\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 this.module.createUnreachable();\r\n }\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 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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\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 break;\r\n }\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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 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.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 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 break;\r\n }\r\n case Token.PLUS_PLUS: {\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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 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.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 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 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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 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.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 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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\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 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 ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\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.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 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 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 compileAllocate(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 mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement,\r\n parentElement: Element | null = null\r\n): void {\r\n mangleImportName_moduleName = parentElement ? parentElement.simpleName : declaration.range.source.simplePath;\r\n mangleImportName_elementName = element.simpleName;\r\n\r\n if (!element.hasDecorator(DecoratorFlags.EXTERNAL)) return;\r\n\r\n var program = element.program;\r\n var decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n var args = decorator.arguments;\r\n if (args && args.length) {\r\n let arg = args[0];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\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 User_defined_0 = 102,\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 An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\r\n Optional_parameter_must_have_an_initializer = 215,\r\n Constructor_of_class_0_must_not_require_any_arguments = 216,\r\n Function_0_cannot_be_inlined_into_itself = 217,\r\n Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set = 218,\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 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 Enum_member_must_have_initializer = 1061,\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 Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\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 In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474,\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 Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\r\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054,\r\n Numeric_separators_are_not_allowed_here = 6188,\r\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\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 102: return \"User-defined: {0}\";\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 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\r\n case 215: return \"Optional parameter must have an initializer.\";\r\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\r\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\r\n case 218: return \"Cannot access method '{0}' without calling it as it requires 'this' to be set.\";\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 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 1061: return \"Enum member must have initializer.\";\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 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\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 2474: return \"In 'const' enum declarations member initializer must be constant expression.\";\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 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\r\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n case 6188: return \"Numeric separators are not allowed here.\";\r\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\r\n default: return \"\";\r\n }\r\n}\r\n","/**\r\n * Resolve infrastructure to obtain types and elements.\r\n * @module resolver\r\n *//***/\r\n\r\nimport {\r\n DiagnosticEmitter,\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Program,\r\n ElementKind,\r\n OperatorKind,\r\n FlowFlags,\r\n\r\n Element,\r\n Class,\r\n ClassPrototype,\r\n Function,\r\n FunctionTarget,\r\n FunctionPrototype,\r\n VariableLikeElement,\r\n Property,\r\n DecoratorFlags,\r\n FieldPrototype,\r\n Field\r\n} from \"./program\";\r\n\r\nimport {\r\n SignatureNode,\r\n ParameterKind,\r\n CommonTypeNode,\r\n NodeKind,\r\n TypeNode,\r\n TypeParameterNode,\r\n Node,\r\n Range,\r\n IdentifierExpression,\r\n CallExpression,\r\n ElementAccessExpression,\r\n PropertyAccessExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n AssertionExpression,\r\n Expression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n Signature,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n PATH_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Indicates whether errors are reported or not. */\r\nexport enum ReportMode {\r\n /** Report errors. */\r\n REPORT,\r\n /** Swallow errors. */\r\n SWALLOW\r\n}\r\n\r\n/** Provides tools to resolve types and expressions. */\r\nexport class Resolver extends DiagnosticEmitter {\r\n\r\n /** The program this resolver belongs to. */\r\n program: Program;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n currentThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n currentElementExpression : Expression | null = null;\r\n\r\n /** Constructs the resolver for the specified program. */\r\n constructor(program: Program) {\r\n super(program.diagnostics);\r\n this.program = program;\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 reportMode = ReportMode.REPORT\r\n ): Type | null {\r\n\r\n // handle signatures specifically\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportMode);\r\n if (!signature) return null;\r\n return node.isNullable ? signature.type.asNullable() : signature.type;\r\n }\r\n\r\n // now dealing with TypeNode\r\n assert(node.kind == NodeKind.TYPE);\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; // TODO cache\r\n\r\n // check file-global / program-global enum or class\r\n {\r\n let elementsLookup = this.program.elementsLookup;\r\n let element: Element | null;\r\n if (\r\n (element = elementsLookup.get(localName)) || // file-global\r\n (element = elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: {\r\n if (typeNode.typeArguments !== null && typeNode.typeArguments.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n node.range, element.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n return Type.i32;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = this.resolveClassInclTypeArguments(\r\n element,\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n node\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable ? instance.type.asNullable() : instance.type;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n {\r\n let alias = this.program.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportMode);\r\n }\r\n\r\n // resolve parameters\r\n {\r\n let typeArgumentNodes = typeNode.typeArguments;\r\n if (typeArgumentNodes) {\r\n let numTypeArguments = typeArgumentNodes.length;\r\n let paramTypes = new Array(numTypeArguments);\r\n for (let i = 0; i < numTypeArguments; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n if (numTypeArguments) { // 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\r\n // check file-global / program-global type\r\n {\r\n let typesLookup = this.program.typesLookup;\r\n let type: Type | null;\r\n if (\r\n (type = typesLookup.get(localName)) ||\r\n (type = typesLookup.get(globalName))\r\n ) {\r\n return type;\r\n }\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\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 a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\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(explicitThisType, contextualTypeArguments, reportMode);\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameters;\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 reportMode\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(returnTypeNode, contextualTypeArguments, reportMode);\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 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 reportMode: ReportMode = ReportMode.REPORT\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 reportMode\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 context: Element | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var name = identifier.text;\r\n var element: Element | null;\r\n\r\n if (context) {\r\n\r\n switch (context.kind) {\r\n case ElementKind.FUNCTION: { // search locals, use prototype\r\n element = (context).flow.getScopedLocal(name);\r\n if (element) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n case ElementKind.CLASS: { // use prototype\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n }\r\n\r\n // search context\r\n while (context) {\r\n let members = context.members;\r\n if (members) {\r\n if (element = members.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n }\r\n context = context.parent;\r\n }\r\n }\r\n\r\n // search current file\r\n var elementsLookup = this.program.elementsLookup;\r\n if (element = elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = elementsLookup.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\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 reportMode: ReportMode = ReportMode.REPORT\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, reportMode); // 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 type = (target).type;\r\n assert(type != Type.void);\r\n let classReference = 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 = this.resolveFunction(\r\n assert((target).getterPrototype),\r\n null,\r\n null,\r\n reportMode\r\n );\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.currentElementExpression;\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.currentThisExpression = targetExpression;\r\n this.currentElementExpression = 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 if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\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 reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\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.currentThisExpression = targetExpression;\r\n this.currentElementExpression = 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 if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n }\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\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(\r\n (expression).toType,\r\n contextualFunction.flow.contextualTypeArguments,\r\n reportMode\r\n );\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = 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.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\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.currentThisExpression = null;\r\n this.currentElementExpression = 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.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction, reportMode);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.currentThisExpression = expression;\r\n this.currentElementExpression = null;\r\n return this.program.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 reportMode\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = this.resolveFunctionInclTypeArguments(\r\n target,\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression,\r\n reportMode\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.program, 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 if (reportMode == ReportMode.REPORT) {\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 }\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a function prototype to an instance using the specified concrete type arguments. */\r\n resolveFunction(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = prototype.declaration;\r\n var isInstance = prototype.is(CommonFlags.INSTANCE);\r\n var classPrototype = prototype.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 = prototype.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(prototype.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 (typeArguments && (numFunctionTypeArguments = typeArguments.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 typeArguments[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 = this.resolveClass(\r\n assert(classPrototype),\r\n classTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\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.parameters;\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.resolveType(typeNode, contextualTypeArguments, reportMode);\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 (prototype.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (prototype.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.resolveType(typeNode, contextualTypeArguments, reportMode);\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 = prototype.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n prototype,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves a function prototype partially by applying the specified type arguments. */\r\n resolveFunctionPartially(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): FunctionPrototype | null {\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(prototype.classPrototype);\r\n\r\n if (!(typeArguments && typeArguments.length)) return prototype; // no need to clone\r\n\r\n var simpleName = prototype.simpleName;\r\n var partialKey = typesToString(typeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n prototype.declaration,\r\n classPrototype,\r\n prototype.decoratorFlags\r\n );\r\n partialPrototype.flags = prototype.flags;\r\n partialPrototype.operatorKind = prototype.operatorKind;\r\n partialPrototype.classTypeArguments = typeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves a function prototype to an instance by first resolving the specified type arguments. */\r\n resolveFunctionInclTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.resolveTypeArguments( // reports\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n\r\n /** Resolves a class prototype using the specified concrete type arguments. */\r\n resolveClass(\r\n prototype: ClassPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n\r\n // Check if this exact instance has already been resolved\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // Copy contextual type arguments so we don't pollute the original map\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 // Insert contextual type arguments for this operation. Internally, this method is always\r\n // called with matching type parameter / argument counts.\r\n var declaration = prototype.declaration;\r\n if (typeArguments) {\r\n let typeParameters = declaration.typeParameters;\r\n let expectedTypeArguments = typeParameters.length;\r\n let actualTypeArguments = typeArguments.length;\r\n assert(actualTypeArguments == expectedTypeArguments);\r\n for (let i = 0; i < actualTypeArguments; ++i) {\r\n contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else {\r\n assert(declaration.typeParameters.length == 0);\r\n }\r\n\r\n // Resolve base class if applicable\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.resolveType(\r\n declaration.extendsType,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n if (reportMode == ReportMode.REPORT) {\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 }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (reportMode == ReportMode.REPORT) {\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 }\r\n return null;\r\n }\r\n }\r\n\r\n // Construct the instance and remember that it has been resolved already\r\n var simpleName = prototype.simpleName;\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(prototype, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n // Inherit base class members and set up the initial memory offset for own fields\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\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 memoryOffset = baseClass.currentMemoryOffset;\r\n }\r\n\r\n // Resolve constructor by first applying the class type arguments\r\n if (prototype.constructorPrototype) {\r\n let constructorPartial = this.resolveFunctionPartially(\r\n prototype.constructorPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!constructorPartial) return null;\r\n instance.constructorInstance = this.resolveFunction(constructorPartial, null, null, reportMode);\r\n }\r\n\r\n // Resolve instance members\r\n if (prototype.instanceMembers) {\r\n for (let member of prototype.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 let fieldType: Type | null = null;\r\n // TODO: handle duplicate non-private fields\r\n if (!fieldDeclaration.type) {\r\n if (baseClass !== null && baseClass.members !== null) {\r\n let baseField = baseClass.members.get((member).simpleName);\r\n if (baseField && !baseField.is(CommonFlags.PRIVATE)) {\r\n assert(baseField.kind == ElementKind.FIELD);\r\n fieldType = (baseField).type;\r\n }\r\n }\r\n if (!fieldType) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n fieldDeclaration.name.range.atEnd\r\n );\r\n }\r\n }\r\n } else {\r\n fieldType = this.resolveType(\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n if (!fieldType) break;\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: { if (memoryOffset & 1) ++memoryOffset; break; }\r\n case 4: { if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break; }\r\n case 8: { if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break; }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n 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 = this.resolveFunctionPartially(\r\n member,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialPrototype) return null;\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\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); // must be present\r\n let setterPrototype = (member).setterPrototype; // might be present\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n prototype\r\n );\r\n let partialGetterPrototype = this.resolveFunctionPartially(\r\n getterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName;\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = this.resolveFunctionPartially(\r\n setterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName;\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 // Finalize memory offset\r\n instance.currentMemoryOffset = memoryOffset;\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, overloadPrototype] of prototype.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (overloadPrototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = this.resolveFunctionPartially(\r\n overloadPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!operatorPartial) continue;\r\n operatorInstance = this.resolveFunction(operatorPartial, null, null, reportMode);\r\n } else {\r\n operatorInstance = this.resolveFunction(overloadPrototype, null, null, reportMode);\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 return instance;\r\n }\r\n\r\n /** Resolves a class prototype by first resolving the specified type arguments. */\r\n resolveClassInclTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n\r\n // Resolve type arguments if generic\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n let typeParameterNodes = prototype.declaration.typeParameters;\r\n let expectedTypeArguments = typeParameterNodes.length;\r\n assert(expectedTypeArguments > 0);\r\n let actualTypeArguments = typeArgumentNodes !== null ? typeArgumentNodes.length : 0;\r\n if (expectedTypeArguments != actualTypeArguments) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, expectedTypeArguments.toString(10), actualTypeArguments.toString(10)\r\n );\r\n }\r\n return null;\r\n }\r\n resolvedTypeArguments = this.resolveTypeArguments(\r\n typeParameterNodes,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n\r\n // Otherwise make sure that no type arguments have been specified\r\n } else {\r\n if (typeArgumentNodes !== null && typeArgumentNodes.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Continue with concrete types\r\n return this.resolveClass(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n}\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\n/// \r\n\r\nimport \"./binaryen\"; // must be first so portable can pick up the memory implementation\r\nimport \"../../../std/portable/index\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n\r\nimport { Module } from \"../../module\";\r\n\r\nModule.prototype.toText = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\nglobal.binaryen = binaryen;\r\n\r\nfor (var key in binaryen) {\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\")) global[key] = binaryen[key];\r\n}\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.__memory_allocate = binaryen._malloc;\r\nglobal.__memory_free = binaryen._free;\r\nglobal.__memory_copy = binaryen._memmove;\r\nglobal.__store = function(ptr, val) { binaryen.HEAPU8[ptr] = val; };\r\nglobal.__load = function(ptr) { return binaryen.HEAPU8[ptr]; };\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__15__;","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nglobalScope.ASC_TARGET = 0;\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\nglobalScope[\"JSMath\"] = Math;\r\n\r\nglobalScope[\"memory\"] = (() => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n return {\r\n allocate: globalScope[\"__memory_allocate\"] || function allocate(size) {\r\n if (!(size >>>= 0)) return 0;\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 var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n return ptr;\r\n },\r\n free: globalScope[\"__memory_free\"] || function free(ptr) { },\r\n copy: globalScope[\"__memory_copy\"] || function copy(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n }\r\n };\r\n})();\r\n\r\nglobalScope[\"store\"] = globalScope[\"__store\"] || function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n};\r\n\r\nglobalScope[\"load\"] = globalScope[\"__load\"] || function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n};\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","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.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","/**\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 Global,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n ReportMode\r\n} from \"./resolver\";\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\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 case \"isDefined\": { // isDefined(expression) -> bool\r\n compiler.currentType = Type.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 return module.createUnreachable();\r\n }\r\n let element = compiler.resolver.resolveExpression(operands[0], compiler.currentFunction, ReportMode.SWALLOW);\r\n return module.createI32(element ? 1 : 0);\r\n }\r\n case \"isConstant\": { // isConstant(expression) -> bool\r\n compiler.currentType = Type.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 return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n compiler.currentType = Type.bool;\r\n return module.createI32(getExpressionId(expr) == ExpressionId.Const ? 1 : 0);\r\n }\r\n case \"isManaged\": { // isManaged() -> bool\r\n if (!compiler.program.hasGC) {\r\n compiler.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\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.hasDecorator(DecoratorFlags.UNMANAGED)\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 \"memory.size\": { // memory.size() -> 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 \"memory.grow\": { // memory.grow(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 \"memory.copy\": { // memory.copy(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 \"memory.fill\": { // memory.fill(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 case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> 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_at_least_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 returnType: Type;\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 returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // user-defined diagnostic macros\r\n\r\n case \"ERROR\": {\r\n compiler.error(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n case \"WARNING\": {\r\n compiler.warning(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n case \"INFO\": {\r\n compiler.info(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\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 // gc\r\n\r\n case \"iterateRoots\": {\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.void;\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n let type = compiler.currentType;\r\n let signatureReference = type.signatureReference;\r\n compiler.currentType = Type.void;\r\n if (\r\n !type.is(TypeFlags.REFERENCE) ||\r\n !signatureReference ||\r\n signatureReference.parameterTypes.length != 1 ||\r\n signatureReference.parameterTypes[0] != compiler.options.usizeType\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, type.toString(), \"(ref: usize) => void\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n // just emit a call even if the function doesn't yet exist\r\n compiler.needsIterateRoots = true;\r\n return module.createCall(\"~iterateRoots\", [ expr ], NativeType.None);\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\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 // __gc_allocate(size, markFn)\r\n if (program.hasGC && classInstance.type.isManaged(program)) {\r\n let allocateInstance = assert(program.gcAllocateInstance);\r\n if (!compiler.compileFunction(allocateInstance)) return module.createUnreachable();\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 module.createI32(\r\n ensureGCHook(compiler, classInstance)\r\n )\r\n ],\r\n options.nativeSizeType\r\n );\r\n\r\n // memory.allocate(size)\r\n } else {\r\n let allocateInstance = program.memoryAllocateInstance;\r\n if (!allocateInstance) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, \"memory.allocate\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!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\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\");\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortInstance = program.abortInstance;\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.ensureStaticString(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\r\n/** Compiles the iterateRoots function if requires. */\r\nexport function compileIterateRoots(compiler: Compiler): void {\r\n var module = compiler.module;\r\n var exprs = new Array();\r\n\r\n for (let element of compiler.program.elementsLookup.values()) {\r\n if (element.kind != ElementKind.GLOBAL) continue;\r\n let global = element;\r\n let classReference = global.type.classReference;\r\n if (\r\n global.is(CommonFlags.COMPILED) &&\r\n classReference !== null &&\r\n !classReference.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ) {\r\n if (global.is(CommonFlags.INLINED)) {\r\n let value = global.constantIntegerValue;\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n compiler.options.isWasm64\r\n ? module.createI64(i64_low(value), i64_high(value))\r\n : module.createI32(i64_low(value))\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n } else {\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n module.createGetGlobal(\r\n global.internalName,\r\n compiler.options.nativeSizeType\r\n )\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n }\r\n }\r\n }\r\n var typeRef = compiler.ensureFunctionType([ Type.i32 ], Type.void);\r\n module.addFunction(\"~iterateRoots\", typeRef, [],\r\n exprs.length\r\n ? module.createBlock(null, exprs)\r\n : module.createNop()\r\n );\r\n}\r\n\r\n/** Ensures that the specified class's GC hook exists and returns its function table index. */\r\nexport function ensureGCHook(\r\n compiler: Compiler,\r\n classInstance: Class\r\n): u32 {\r\n var program = compiler.program;\r\n assert(classInstance.type.isManaged(program));\r\n\r\n // check if the GC hook has already been created\r\n {\r\n let existingIndex = classInstance.gcHookIndex;\r\n if (existingIndex != -1) return existingIndex;\r\n }\r\n\r\n // check if the class implements a custom GC function (only valid for internals)\r\n var members = classInstance.members;\r\n if (classInstance.prototype.declaration.range.source.isLibrary) {\r\n if (members !== null && members.has(\"__gc\")) {\r\n let gcPrototype = assert(members.get(\"__gc\"));\r\n assert(gcPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcInstance = assert(program.resolver.resolveFunction(gcPrototype, null));\r\n assert(gcInstance.is(CommonFlags.PRIVATE | CommonFlags.INSTANCE));\r\n assert(!gcInstance.isAny(CommonFlags.AMBIENT | CommonFlags.VIRTUAL));\r\n assert(gcInstance.signature.parameterTypes.length == 0);\r\n assert(gcInstance.signature.returnType == Type.void);\r\n gcInstance.internalName = classInstance.internalName + \"~gc\";\r\n assert(compiler.compileFunction(gcInstance));\r\n let index = compiler.ensureFunctionTableEntry(gcInstance);\r\n classInstance.gcHookIndex = index;\r\n return index;\r\n }\r\n }\r\n\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n var nativeSizeType = options.nativeSizeType;\r\n var nativeSizeSize = options.usizeType.byteSize;\r\n var body = new Array();\r\n\r\n // nothing to mark if 'this' is null\r\n body.push(\r\n module.createIf(\r\n module.createUnary(\r\n options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createGetLocal(0, nativeSizeType)\r\n ),\r\n module.createReturn()\r\n )\r\n );\r\n\r\n // remember the function index so we don't recurse infinitely\r\n var functionTable = compiler.functionTable;\r\n var gcHookIndex = functionTable.length;\r\n functionTable.push(0);\r\n classInstance.gcHookIndex = gcHookIndex;\r\n\r\n // if the class extends a base class, call its hook first (calls mark)\r\n var baseInstance = classInstance.base;\r\n if (baseInstance) {\r\n assert(baseInstance.type.isManaged(program));\r\n body.push(\r\n module.createCallIndirect(\r\n module.createI32(\r\n ensureGCHook(compiler, baseInstance.type.classReference)\r\n ),\r\n [\r\n module.createGetLocal(0, nativeSizeType)\r\n ],\r\n nativeSizeType == NativeType.I64 ? \"Iv\" : \"iv\"\r\n )\r\n );\r\n\r\n // if this class is the top-most base class, mark the instance\r\n } else {\r\n body.push(\r\n module.createCall(assert(program.gcMarkInstance).internalName, [\r\n module.createGetLocal(0, nativeSizeType)\r\n ], NativeType.None)\r\n );\r\n }\r\n\r\n // mark instances assigned to own fields that are again references\r\n if (members) {\r\n for (let member of members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n if ((member).parent === classInstance) {\r\n let type = (member).type;\r\n if (type.isManaged(program)) {\r\n let offset = (member).memoryOffset;\r\n assert(offset >= 0);\r\n body.push(\r\n module.createCall(assert(program.gcMarkInstance).internalName, [\r\n module.createLoad(\r\n nativeSizeSize,\r\n false,\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeSizeType,\r\n offset\r\n )\r\n ], NativeType.None)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // add the function to the module and return its table index\r\n functionTable[gcHookIndex] = module.addFunction(\r\n classInstance.internalName + \"~gc\",\r\n compiler.ensureFunctionType(null, Type.void, options.usizeType),\r\n null,\r\n module.createBlock(null, body)\r\n );\r\n return gcHookIndex;\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","/** @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\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\n/** Reads an 8-bit integer from the specified buffer. */\r\nexport function readI8(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset];\r\n}\r\n\r\n/** Writes an 8-bit integer to the specified buffer. */\r\nexport function writeI8(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset] = value;\r\n}\r\n\r\n/** Reads a 16-bit integer from the specified buffer. */\r\nexport function readI16(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8;\r\n}\r\n\r\n/** Writes a 16-bit integer to the specified buffer. */\r\nexport function writeI16(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n}\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","/**\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} 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 `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/** Gives the compiler a hint at the optimize levels that will be used later on. */\r\nexport function setOptimizeLevelHints(options: Options, optimizeLevel: i32, shrinkLevel: i32): void {\r\n options.optimizeLevelHint = optimizeLevel;\r\n options.shrinkLevelHint = shrinkLevel;\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 } from \"./common\";\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(\"memory.size()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"memory.grow(\");\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 * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n Element,\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 moduleExport of this.program.moduleLevelExports.values()) {\r\n // FIXME: doesn't honor the actual externally visible name\r\n this.visitElement(moduleExport.element);\r\n }\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\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 ClassExpression,\r\n FunctionExpression,\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 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 nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: 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 normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\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 var program = this.program;\r\n program.sources.push(source);\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 // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.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 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 // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\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 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 }\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 private parseParametersThis: TypeNode | null = null;\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 var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.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 return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\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\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\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 thisType,\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, // TODO?\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 parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\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\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\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 Node.createClassExpression(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 var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\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 if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\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 if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\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 (!isInterface) {\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\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 let thisType = this.parseParametersThis;\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 thisType,\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 } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\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) && !isInterface) {\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 var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\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 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 if (tn.skip(Token.ASTERISK)) {\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 let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(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 } 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 while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\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 } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n if (tn.token == Token.ENDOFFILE) return null;\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 precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\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, precedence);\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 var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\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 // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n names.push(name);\r\n if (tn.skip(Token.COLON)) {\r\n let value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n values.push(value);\r\n } else if (!name.is(CommonFlags.QUOTED)) {\r\n values.push(name);\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 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 return Node.createObjectLiteralExpression(names, values, 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 case Token.CLASS: {\r\n return this.parseClassExpression(tn);\r\n }\r\n default: {\r\n if (token == Token.ENDOFFILE) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n tn.range(startPos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\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 = Precedence.COMMA\r\n ): Expression | null {\r\n assert(precedence != Precedence.NONE);\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression?\r\n if (nodeIsCallable(expr.kind)) {\r\n let typeArguments: CommonTypeNode[] | null = null;\r\n while (\r\n tn.skip(Token.OPENPAREN)\r\n ||\r\n nodeIsGenericCallable(expr.kind) && (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) !== null\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)); // is again callable\r\n }\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); // reports\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 // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\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); // reports\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\r\n ? Precedence.COMMA + 1\r\n : Precedence.COMMA\r\n );\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 // at '{': ... '}'\r\n var depth = 1;\r\n var again = true;\r\n do {\r\n switch (tn.next()) {\r\n case Token.ENDOFFILE: {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n again = false;\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n ++depth;\r\n break;\r\n }\r\n case Token.CLOSEBRACE: {\r\n --depth;\r\n if (!depth) again = false;\r\n break;\r\n }\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 (again);\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n NONE,\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}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\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 }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\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 }\r\n return Precedence.NONE;\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"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/common.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/resolver.ts","webpack://assemblyscript/./src/glue/js/index.ts","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/parser.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__15__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CommonFlags","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","FILESPACE_PREFIX","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","assert","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","DiagnosticCode","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","range","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","line","column","formatDiagnosticContext","useColors","text","len","length","start","end","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","info","warning","error","__export","common_1","tokenizer_1","Token","Range","NodeKind","nodeIsConstantValue","kind","LITERAL","NULL","TRUE","FALSE","nodeIsCallable","IDENTIFIER","CALL","ELEMENTACCESS","PROPERTYACCESS","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","type","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","initializer","ParameterNode","parameterKind","createSignature","parameters","returnType","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","expr","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","k","setParentIfNotNull","createAssertionExpression","assertionKind","expression","toType","AssertionExpression","createBinaryExpression","operator","left","right","BinaryExpression","createCallExpression","typeArgs","CallExpression","createClassExpression","declaration","ClassExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createObjectLiteralExpression","names","values","ObjectLiteralExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","condition","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","label","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","externalName","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","ifTrue","ifFalse","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","body","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","BUILTIN","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","OperatorKind","diagnostics_1","types_1","ast_1","module_1","resolver_1","QueuedImport","QueuedExport","TypeAlias","operatorKindFromDecorator","arg","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","POW","DIV","REM","BITWISE_AND","BITWISE_OR","BITWISE_XOR","EQ","NE","GT","GE","BITWISE_SHR","BITWISE_SHR_U","LT","LE","BITWISE_SHL","PLUS","PREFIX_INC","MINUS","PREFIX_DEC","NOT","BITWISE_NOT","POSTFIX_INC","POSTFIX_DEC","INVALID","ElementKind","DecoratorFlags","noTypesYet","Map","Program","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayBufferInstance","arrayPrototype","stringInstance","mainFunction","abortInstance","memoryAllocateInstance","hasGC","gcAllocateInstance","gcLinkInstance","gcMarkInstance","gcHeaderSize","gcHookOffset","resolver","Resolver","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","setConstantInteger","i64_new","isWasm64","noTreeShaking","noAssert","memoryBase","optimizeLevelHint","shrinkLevelHint","hasFeature","queuedImports","queuedExports","queuedExtends","queuedImplements","filespace","Filespace","internalName","currentFilespace","j","initializeClass","initializeEnum","initializeExports","initializeFunction","initializeImports","initializeInterface","initializeNamespace","initializeTypeAlias","initializeVariables","queuedImport","tryLocateImport","localName","splice","externalNameAlt","Module_0_has_no_exported_member_1","queuedExports_1","__values","queuedExports_1_1","next","done","_c","__read","exportName","queuedExport","currentExport","isReExport","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_d","Error","has","resolveClass","instance","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","resolveFunction","parameterTypes","signatureReference","byteSize","globalName","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","isLibrary","Decorator_0_is_not_valid_here","Duplicate_decorator","checkGlobal","parentNode","hasDecorator","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","existingExport","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","READONLY","ABSTRACT","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","externalIdentifier","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","existingExport_1","global_1","CONST","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","INLINED","constantFloatValue","Parameter","Local","index","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","INSTANCE","local","thisType","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","parameterType","parameterName","getParameterName","flow","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","FunctionTarget","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","FIELD","memoryOffset","Class","base","currentMemoryOffset","constructorInstance","gcHookIndex","asClass","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseType","isAssignableTo","target","current","lookupOverload","unchecked","uncheckedOverload","overload","offsetof","fieldName","field","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","free","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","getScopedLocal","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritConditional","inheritMutual","leftExt","rightExt","thisExt","minLength","min","canOverflow","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","compiler_1","NativeType","_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","_BinaryenCurrentMemory","_BinaryenGrowMemory","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","_BinaryenModuleCreate","cachedByValue","memory","allocate","createFrom","cArr","allocU8Array","_BinaryenModuleRead","changetype","addFunctionType","result","paramTypes","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","children","_BinaryenBlock","createBreak","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","_BinaryenLoop","createIf","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","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","getOptimizeLevel","_BinaryenGetOptimizeLevel","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","getShrinkLevel","_BinaryenGetShrinkLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeExpression","previousOptimizeLevel","previousShrinkLevel","previousDebugInfo","_BinaryenGetDebugInfo","_BinaryenExpressionGetType","_BinaryenFunctionGetBody","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","_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","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","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","needsExplicitUnreachable","Return","Break","numChildren","g","eval","e","window","program_1","TypeKind","TypeFlags","cachedNullableType","ceil","classReference","nonNullableType","isize64","isize32","usize64","usize32","isManaged","computeSmallIntegerShift","targetType","classType","asNullable","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","typesToString","Signature","cachedFunctionTarget","parameterNames","requiredParameters","hasRest","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","numParameters","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","IdentifierHandling","tokenFromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DECLARE","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","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","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","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","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","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","builtins_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentInlineFunctions","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","needsIterateRoots","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableExported","moduleExport","makeModuleExport","compileIterateRoots","subPrefix","_e","_f","_g","_h","Cannot_export_a_mutable_global","ensureTrampoline","ensureArgcSet","COMPILED","setter","nativeType","nativeSizeType","getterName","setterName","_j","_k","fullName","_l","_m","ctor","compileSourceByPath","reportNode","File_0_not_found","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","resolvedType","resolveType","Type_expected","atEnd","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","isDeclaredConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileExpression","Compiling_constant_with_non_constant_initializer_as_mutable","compileEnum","previousValue","previousValueIsMut","initInStart","valueDeclaration","In_const_enum_declarations_member_initializer_must_be_constant_expression","Enum_member_must_have_initializer","AddI32","compileFunctionUsingTypeArguments","resolveFunctionInclTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","stmts","compileStatements","unshift","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","alternativeReportNode","resolveClassInclTypeArguments","compileClass","staticMembers","ctorInstance","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","numStatements","Nop","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","terminated","block","repeatLabel","alwaysTrue","condPre","incrExpr","bodyStatement","bodyExpr","usesContinue","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifTrueExpr","ifFalseExpr","ifFalseFlow","numCases","context","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","count","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","compileInlineConstant","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","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","operatorInstance","valueExpr","argumentExpressions","thisArg","compileCallDirect","valueExpression","resolveExpression","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","currentElementExpression","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","Index_signature_is_missing_in_type_0","valueWithCorrectType","tee","thisExpression","currentThisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","indexedGet","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","typeNode","argumentExpression","inferredType","concreteType","resolvedTypeArguments","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","compileGetter","compileCallIndirect","typeArgumentNodes","resolveTypeArguments","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","includes","compileCallInlineUnchecked","Function_0_cannot_be_inlined_into_itself","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","isInstance","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","Optional_parameter_must_have_an_initializer","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","resolveElementAccess","retainConstantType","scopedThis","_this_cannot_be_referenced_in_current_location","superType","_super_can_only_be_referenced_in_a_derived_class","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","compileStringLiteral","compileObjectLiteral","ensureStaticString","stringValue","stringSegment","headerSize","totalSize","buf","writeI32","ensureGCHook","writeI16","stringOffset","ensureStaticArray","elementType","byteLength","usizeTypeSize","bufferInstance","bufferHeaderSize","bufferTotalSize","clz","writeI8","writeI64","writeF32","writeF64","bufferOffset","arrayInstance","arrayHeaderSize","arrayOffset","isConst","compiledValues","constantValues","nativeElementType","isStatic","arrayType","nativeArrayType","Constructor_of_class_0_must_not_require_any_arguments","Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration","Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration","hasErrors","Property_0_does_not_exist_on_type_1","compileAllocate","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","classInstance","currentClassInstance","makeAllocate","propertyAccess","resolvePropertyAccess","Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","fieldType","nativeFieldType","fieldDeclaration","parentElement","ReportMode","reportMode","REPORT","resolveSignature","numTypeArguments","paramType","instanceKey","placeholderType","parameterTypeNodes","parameterTypeNode","REST","returnTypeNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","contextualFunction","targetExpression","propertyName","elementAccess","explicitLocal","functionTarget","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","signatureParameters","signatureParameterCount","parameterDeclaration","resolveFunctionPartially","partialKey","partialPrototype","expectedTypeArguments","actualTypeArguments","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","inheritedMember","constructorPartial","baseField","fieldInstance","instanceProperty","partialGetterPrototype","partialSetterPrototype","overloadPrototype","operatorPartial","typeParameterNodes","binaryen","emitText","emitAsmjs","Binaryen","__memory_allocate","_malloc","__memory_free","_free","__memory_copy","_memmove","__store","HEAPU8","__load","globalScope","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","Math","fround","MIN_POSITIVE_VALUE","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","EPSILON","clz32","abs","floor","trunc","round","sqrt","x","y","sign","isTrueish","radix","parseInt","undefined","fromCodePoint","Number","isInteger","isArray","HEAP","HEAP_OFFSET","oldHeap","copy","dest","src","copyWithin","F64","Float64Array","F32","Float32Array","I32","Int32Array","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","Long","ZERO","ONE","lo","hi","fromBits","low","high","sub","mul","i64_div","div","i64_div_u","toUnsigned","toSigned","i64_rem","mod","i64_rem_u","and","or","i64_xor","xor","shl","i64_shr","shr","shru","not","i64_eq","eq","ne","fromInt","minSafeF32","fromNumber","maxSafeF32","gte","lte","minSafeF64","maxSafeF64","toNumber","i64_to_string","unsigned","wasm","WebAssembly","Instance","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","cachedObj","cache","isNaN","UZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","pow","fromString","RangeError","indexOf","radixToPower","power","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","UONE","NEG_ONE","LongPrototype","toInt","isZero","isNegative","radixLong","rem1","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","lessThan","comp","lt","lessThanOrEqual","le","greaterThan","gt","greaterThanOrEqual","ge","compare","thisNeg","otherNeg","negate","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","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","compiler","evaluateConstantType","SWALLOW","expr_1","ClzI64","CtzI64","PopcntI64","RotlI32","RotlI64","RotrI32","RotrI64","AbsF32","AbsF64","tempLocal0","tempLocal1","MaxF32","MaxF64","MinF32","MinF64","CeilF32","CeilF64","FloorF32","FloorF64","CopysignF32","CopysignF64","NearestF32","NearestF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","SqrtF32","SqrtF64","TruncF32","TruncF64","evaluateConstantOffset","alignLog2","Type_0_has_no_property_1","CurrentMemory","GrowMemory","abort","operandExprs","signatureParts","nativeParamTypes","operandType","User_defined_0","expr_2","deferASM","deferASMCall","typeArgument","valueType","stringType","messageArg","filenameArg","existingIndex","gcPrototype","gcInstance","VIRTUAL","nativeSizeSize","baseInstance","funcName","allocateInstance","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","isUnicodeIdentifierStart","unicodeIdentifierPart","isUnicodeIdentifierPart","mid","separator","ipos","dirname","origin","indentX1","indentX2","indentX4","indent","readI32","readI64","readI8","readI16","readF32","readF64","valueI64","decompiler_1","definitions_1","formatDiagnostic","parser_1","parseFile","parser","Parser","nextFile","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","setOptimizeLevelHints","optimizeLevel","shrinkLevel","finishParsing","compileProgram","decompileModule","decompiler","Decompiler","decompile","buildIDL","IDLBuilder","build","buildTSD","TSDBuilder","functionId","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Switch","CallImport","CallIndirect","SetGlobal","Store","Drop","Host","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","indentLevel","typeToString","members_1","members_1_1","visitInterface","numMembers","members_2","members_2_1","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","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","Interface_declaration_cannot_have_implements_clause","parseClassMember","parseClassExpression","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","Method_0_cannot_have_an_implementation_because_it_is_marked_abstract","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","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","startPos_1","QUOTED","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","skipBlock","depth","Precedence"],"mappings":"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,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,OAEtCE,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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__15__) {\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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = 12);\n","/**\r\n * Common constants.\r\n * @module common\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 compiled. */\r\n COMPILED = 1 << 21,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 22,\r\n /** Is scoped. */\r\n SCOPED = 1 << 23,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 24,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 25,\r\n /** Is the main function. */\r\n MAIN = 1 << 26,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 27\r\n}\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/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\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[96m\";\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 * 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 * 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 \"./common\";\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 CharCode\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 CLASS,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\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/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\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.parameters = 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 name: 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 = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\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 createClassExpression(\r\n declaration: ClassDeclaration\r\n ): ClassExpression {\r\n var expr = new ClassExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\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 createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\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 createObjectLiteralExpression(\r\n names: IdentifierExpression[],\r\n values: Expression[],\r\n range: Range\r\n ): ObjectLiteralExpression {\r\n var expr = new ObjectLiteralExpression();\r\n expr.range = range;\r\n expr.names = names;\r\n expr.values = values;\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[] | null,\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; if (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 parameters: 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 OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL,\r\n BUILTIN\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (nameStr == \"builtin\") return DecoratorKind.BUILTIN;\r\n break;\r\n }\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\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 class expression using the 'class' keyword. */\r\nexport class ClassExpression extends Expression {\r\n kind = NodeKind.CLASS;\r\n\r\n /** Inline class declaration. */\r\n declaration: ClassDeclaration;\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 `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\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 an object literal expression. */\r\nexport class ObjectLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.OBJECT;\r\n\r\n /** Field names. */\r\n names: IdentifierExpression[];\r\n /** Field values. */\r\n values: Expression[];\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\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: 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 /** Re-exported sources. */\r\n exportPaths: Set | null = null;\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 var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\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 if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\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/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\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 == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n 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","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\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 GETTER_PREFIX,\r\n SETTER_PREFIX,\r\n FILESPACE_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Options,\r\n Feature\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} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeParameterNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n StringLiteralExpression,\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 decoratorNameToKind,\r\n findDecorator\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\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\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 a module-level export. */\r\nclass ModuleExport {\r\n element: Element;\r\n identifier: IdentifierExpression;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\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 /** Resolver instance. */\r\n resolver: Resolver;\r\n /** Diagnostic offset used where successively obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\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\r\n /** ArrayBuffer instance reference. */\r\n arrayBufferInstance: Class | null = null;\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n /** Start function reference. */\r\n startFunction: FunctionPrototype;\r\n /** Main function reference, if present. */\r\n mainFunction: FunctionPrototype | null = null;\r\n /** Abort function reference, if present. */\r\n abortInstance: Function | null = null;\r\n /** Memory allocation function. */\r\n memoryAllocateInstance: Function | null = null;\r\n\r\n /** Whether a garbage collector is present or not. */\r\n hasGC: bool = false;\r\n /** Garbage collector allocation function. */\r\n gcAllocateInstance: Function | null = null;\r\n /** Garbage collector link function called when a managed object is referenced from a parent. */\r\n gcLinkInstance: Function | null = null;\r\n /** Garbage collector mark function called to on reachable managed objects. */\r\n gcMarkInstance: Function | null = null;\r\n /** Size of a managed object header. */\r\n gcHeaderSize: u32 = 0;\r\n /** Offset of the GC hook. */\r\n gcHookOffset: u32 = 0;\r\n\r\n /** Currently processing filespace. */\r\n currentFilespace: Filespace;\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.resolver = new Resolver(this);\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 var tmp: string;\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + \".ts\") ||\r\n this.getSource( tmp + \"/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\r\n // add built-in types\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 // add compiler hints\r\n this.setConstantInteger(\"ASC_TARGET\", Type.i32,\r\n i64_new(options.isWasm64 ? 2 : 1));\r\n this.setConstantInteger(\"ASC_NO_TREESHAKING\", Type.bool,\r\n i64_new(options.noTreeShaking ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_NO_ASSERT\", Type.bool,\r\n i64_new(options.noAssert ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_MEMORY_BASE\", Type.i32,\r\n i64_new(options.memoryBase, 0));\r\n this.setConstantInteger(\"ASC_OPTIMIZE_LEVEL\", Type.i32,\r\n i64_new(options.optimizeLevelHint, 0));\r\n this.setConstantInteger(\"ASC_SHRINK_LEVEL\", Type.i32,\r\n i64_new(options.shrinkLevelHint, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_MUTABLE_GLOBAL\", Type.bool,\r\n i64_new(options.hasFeature(Feature.MUTABLE_GLOBAL) ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_SIGN_EXTENSION\", Type.bool,\r\n i64_new(options.hasFeature(Feature.SIGN_EXTENSION) ? 1 : 0, 0));\r\n\r\n // remember deferred elements\r\n var queuedImports = new Array();\r\n var queuedExports = new Map();\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\r\n // create one filespace per source\r\n let filespace = new Filespace(this, source);\r\n this.elementsLookup.set(filespace.internalName, filespace);\r\n this.currentFilespace = filespace;\r\n\r\n // process this source's statements\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 declaration = queuedImport.declaration;\r\n if (declaration) { // named\r\n let element = this.tryLocateImport(queuedImport.externalName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryLocateImport(queuedImport.externalNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.localName, 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 declaration.range,\r\n (declaration.parent).path.value,\r\n declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n } else { // filespace\r\n let element = this.elementsLookup.get(queuedImport.externalName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.externalNameAlt)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n assert(false); // already reported by the parser not finding the file\r\n ++i;\r\n }\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.externalName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n queuedExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.externalName);\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.externalName)) ||\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 queuedExport.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 var resolver = this.resolver;\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 = resolver.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 {\r\n let globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n }\r\n\r\n // register 'ArrayBuffer'\r\n if (this.elementsLookup.has(\"ArrayBuffer\")) {\r\n let element = assert(this.elementsLookup.get(\"ArrayBuffer\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayBufferInstance = resolver.resolveClass(element, null);\r\n }\r\n\r\n // register 'Array'\r\n if (this.elementsLookup.has(\"Array\")) {\r\n let element = assert(this.elementsLookup.get(\"Array\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = element;\r\n }\r\n\r\n // register 'String'\r\n if (this.elementsLookup.has(\"String\")) {\r\n let element = assert(this.elementsLookup.get(\"String\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n let instance = resolver.resolveClass(element, null);\r\n if (instance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (element).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 = instance;\r\n this.typesLookup.set(\"string\", instance.type);\r\n }\r\n }\r\n }\r\n\r\n // register 'start'\r\n {\r\n let element = assert(this.elementsLookup.get(\"start\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.startFunction = element;\r\n }\r\n\r\n // register 'main' if present\r\n if (this.moduleLevelExports.has(\"main\")) {\r\n let element = (this.moduleLevelExports.get(\"main\")).element;\r\n if (\r\n element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n !(element).isAny(CommonFlags.GENERIC | CommonFlags.AMBIENT)\r\n ) {\r\n (element).set(CommonFlags.MAIN);\r\n this.mainFunction = element;\r\n }\r\n }\r\n\r\n // register 'abort' if present\r\n if (this.elementsLookup.has(\"abort\")) {\r\n let element = this.elementsLookup.get(\"abort\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.abortInstance = instance;\r\n }\r\n\r\n // register 'memory.allocate' if present\r\n if (this.elementsLookup.has(\"memory\")) {\r\n let element = this.elementsLookup.get(\"memory\");\r\n let members = element.members;\r\n if (members) {\r\n if (members.has(\"allocate\")) {\r\n element = assert(members.get(\"allocate\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.memoryAllocateInstance = instance;\r\n }\r\n }\r\n }\r\n\r\n // register GC hooks if present\r\n if (\r\n this.elementsLookup.has(\"__gc_allocate\") &&\r\n this.elementsLookup.has(\"__gc_link\") &&\r\n this.elementsLookup.has(\"__gc_mark\")\r\n ) {\r\n // __gc_allocate(usize, (ref: usize) => void): usize\r\n let element = this.elementsLookup.get(\"__gc_allocate\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcAllocateInstance = assert(this.resolver.resolveFunction(element, null));\r\n let signature = gcAllocateInstance.signature;\r\n assert(signature.parameterTypes.length == 2);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.parameterTypes[1].signatureReference);\r\n assert(signature.returnType == this.options.usizeType);\r\n\r\n // __gc_link(usize, usize): void\r\n element = this.elementsLookup.get(\"__gc_link\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcLinkInstance = assert(this.resolver.resolveFunction(element, null));\r\n signature = gcLinkInstance.signature;\r\n assert(signature.parameterTypes.length == 2);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.parameterTypes[1] == this.options.usizeType);\r\n assert(signature.returnType == Type.void);\r\n\r\n // __gc_mark(usize): void\r\n element = this.elementsLookup.get(\"__gc_mark\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcMarkInstance = assert(this.resolver.resolveFunction(element, null));\r\n signature = gcMarkInstance.signature;\r\n assert(signature.parameterTypes.length == 1);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.returnType == Type.void);\r\n\r\n this.gcAllocateInstance = gcAllocateInstance;\r\n this.gcLinkInstance = gcLinkInstance;\r\n this.gcMarkInstance = gcMarkInstance;\r\n let gcHookOffset = 2 * options.usizeType.byteSize; // .next + .prev\r\n this.gcHookOffset = gcHookOffset;\r\n this.gcHeaderSize = (gcHookOffset + 4 + 7) & ~7; // + .hook index + alignment\r\n this.hasGC = true;\r\n }\r\n }\r\n\r\n /** Sets a constant integer value. */\r\n setConstantInteger(globalName: string, type: Type, value: I64): void {\r\n assert(type.is(TypeFlags.INTEGER));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantIntegerValue(value)\r\n );\r\n }\r\n\r\n /** Sets a constant float value. */\r\n setConstantFloat(globalName: string, type: Type, value: f64): void {\r\n assert(type.is(TypeFlags.FLOAT));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantFloatValue(value)\r\n );\r\n }\r\n\r\n /** Tries to locate an import by traversing exports and queued exports. */\r\n private tryLocateImport(\r\n externalName: string,\r\n queuedNamedExports: 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(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n /** Checks that only supported decorators are present. */\r\n private checkDecorators(\r\n decorators: DecoratorNode[],\r\n acceptedFlags: DecoratorFlags\r\n ): 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 let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (flag == DecoratorFlags.BUILTIN) {\r\n if (decorator.range.source.isLibrary) {\r\n presentFlags |= flag;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n }\r\n } else if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Checks and sets up global options of an element. */\r\n private checkGlobal(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n // alias globally if explicitly annotated @global or exported from a top-level library file\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\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 }\r\n }\r\n // builtins use the global name directly\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n element.internalName = declaration.programLevelInternalName;\r\n }\r\n }\r\n\r\n /** Initializes a class declaration. */\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.checkDecorators(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 for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.warning( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\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 this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\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 assert(false); // should have been reported while parsing\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n /** Initializes a field of a class or interface. */\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 var isInterface = classPrototype.kind == ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(false);\r\n }\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.checkDecorators(decorators, DecoratorFlags.INLINE)\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 if (staticField.hasDecorator(DecoratorFlags.INLINE) && !staticField.is(CommonFlags.READONLY)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(!declaration.isAny(CommonFlags.ABSTRACT | CommonFlags.GET | CommonFlags.SET));\r\n }\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.checkDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n /** Initializes a method of a class or interface. */\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.checkDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\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 if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\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 = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\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\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.checkDecorators(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 this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element,\r\n identifier: declaration.name\r\n });\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.checkGlobal(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 if (members) { // named\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 } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n externalIdentifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = externalIdentifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = externalIdentifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if a top-level export of a library file\r\n var source = externalIdentifier.range.source;\r\n if (source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n externalIdentifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n\r\n // add module level export if a top-level export of an entry file\r\n } else if (source.isEntry) {\r\n this.moduleLevelExports.set(externalIdentifier.text, {\r\n element,\r\n identifier: externalIdentifier\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 (this.elementsLookup.has(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n this.elementsLookup.get(referencedName),\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.externalName = referencedName; // -> here: local 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.externalName);\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.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\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.externalName = referencedName; // -> here: external 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.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\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 this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n this.checkGlobal(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\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = 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(externalName)) {\r\n this.elementsLookup.set(localName, 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.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\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 simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(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 this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\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.checkGlobal(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.checkGlobal(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 this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n if (existingExport.element !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, {\r\n element: namespace,\r\n identifier: declaration.name\r\n });\r\n }\r\n namespace.set(CommonFlags.MODULE_EXPORT);\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.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\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 (global.hasDecorator(DecoratorFlags.INLINE) && !global.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\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 this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: global,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n this.checkGlobal(global, declaration);\r\n }\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 /** A {@link Filespace}. */\r\n FILESPACE,\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 a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6,\r\n /** Is using a different external name. */\r\n EXTERNAL = 1 << 7,\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 8\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:\r\n case DecoratorKind.OPERATOR_BINARY: return DecoratorFlags.OPERATOR_BINARY;\r\n case DecoratorKind.OPERATOR_PREFIX: return DecoratorFlags.OPERATOR_PREFIX;\r\n case DecoratorKind.OPERATOR_POSTFIX: return DecoratorFlags.OPERATOR_POSTFIX;\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 case DecoratorKind.EXTERNAL: return DecoratorFlags.EXTERNAL;\r\n case DecoratorKind.BUILTIN: return DecoratorFlags.BUILTIN;\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 filespace representing the implicit top-level namespace of a source. */\r\nexport class Filespace extends Element {\r\n\r\n kind = ElementKind.FILESPACE;\r\n\r\n /** File members (externally visible only). */\r\n members: Map; // more specific\r\n\r\n /** Constructs a new filespace. */\r\n constructor(\r\n program: Program,\r\n source: Source\r\n ) {\r\n super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath);\r\n this.members = new Map();\r\n }\r\n}\r\n\r\n/** A namespace that differs from a filespace in being user-declared with a name. */\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(value: I64): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = value;\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 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))) {\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 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 /** Function index of the GC hook. */\r\n gcHookIndex: u32 = -1;\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 offsetof(fieldName: string): u32 {\r\n var members = assert(this.members);\r\n assert(members.has(fieldName));\r\n var field = members.get(fieldName);\r\n assert(field.kind == ElementKind.FIELD);\r\n return (field).memoryOffset;\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 // categorical\r\n\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always returns a wrapped value. */\r\n RETURNS_WRAPPED = 1 << 1,\r\n /** This branch always throws. */\r\n THROWS = 1 << 2,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 3,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 4,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 5,\r\n\r\n // conditional\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 6,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 7,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 8,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 9,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 10,\r\n\r\n // special\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 11,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 12,\r\n\r\n // masks\r\n\r\n /** Any terminating flag. */\r\n ANY_TERMINATING = FlowFlags.RETURNS\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES,\r\n\r\n /** Any categorical flag. */\r\n ANY_CATEGORICAL = 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 /** Any conditional flag. */\r\n ANY_CONDITIONAL = FlowFlags.CONDITIONALLY_RETURNS\r\n | FlowFlags.CONDITIONALLY_THROWS\r\n | FlowFlags.CONDITIONALLY_BREAKS\r\n | FlowFlags.CONDITIONALLY_CONTINUES\r\n | FlowFlags.CONDITIONALLY_ALLOCATES\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: FlowFlags): 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 /** Forks this flow to a child flow. */\r\n fork(): 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 /** Frees this flow's scoped variables. */\r\n free(): Flow {\r\n var parent = assert(this.parent);\r\n if (this.scopedLocals) { // free block-scoped locals\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 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. blocks). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (FlowFlags.ANY_CATEGORICAL | FlowFlags.ANY_CONDITIONAL);\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 categorical flags as conditional flags from the specified flow (e.g. then without else). */\r\n inheritConditional(other: Flow): void {\r\n if (other.is(FlowFlags.RETURNS)) {\r\n this.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (other.is(FlowFlags.THROWS)) {\r\n this.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (other.is(FlowFlags.BREAKS) && other.breakLabel == this.breakLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (other.is(FlowFlags.CONTINUES) && other.continueLabel == this.continueLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (other.is(FlowFlags.ALLOCATES)) {\r\n this.set(FlowFlags.CONDITIONALLY_ALLOCATES);\r\n }\r\n }\r\n\r\n /** Inherits mutual flags and local wrap states from the specified flows (e.g. then with else). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // categorical flags set in both arms\r\n this.flags |= left.flags & right.flags & FlowFlags.ANY_CATEGORICAL;\r\n\r\n // conditional flags set in at least one arm\r\n this.flags |= left.flags & FlowFlags.ANY_CONDITIONAL;\r\n this.flags |= right.flags & FlowFlags.ANY_CONDITIONAL;\r\n\r\n // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(left.wrappedLocals, right.wrappedLocals);\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 * 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 const enum NativeType {\r\n None = 0, // _BinaryenTypeNone(),\r\n I32 = 1, // _BinaryenTypeInt32(),\r\n I64 = 2, // _BinaryenTypeInt64(),\r\n F32 = 3, // _BinaryenTypeFloat32(),\r\n F64 = 4, // _BinaryenTypeFloat64(),\r\n Unreachable = 5, // _BinaryenTypeUnreachable(),\r\n Auto = -1 // _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 CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\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 = memory.allocate(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 = memory.allocate(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(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 memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(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 memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(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 memory.free(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 memory.free(cStr);\r\n memory.free(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(cStr);\r\n memory.free(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 memory.free(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 memory.free(cArr);\r\n memory.free(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 memory.free(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 memory.free(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 memory.free(cStr2);\r\n memory.free(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 memory.free(cStr2);\r\n memory.free(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 memory.free(cStr2);\r\n memory.free(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 memory.free(cStr2);\r\n memory.free(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 memory.free(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 memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(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 memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(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 memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(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 memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(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 memory.free(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 memory.free(cArr3);\r\n memory.free(cArr2);\r\n memory.free(cArr1);\r\n for (let i = k - 1; i >= 0; --i) memory.free(segs[i]);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: string[]): void {\r\n var numNames = funcs.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(funcs[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, numNames);\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n getOptimizeLevel(): i32 {\r\n return _BinaryenGetOptimizeLevel();\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n getShrinkLevel(): i32 {\r\n return _BinaryenGetShrinkLevel();\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 memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0; // for free'ing\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeExpression(expr: ExpressionRef): ExpressionRef {\r\n // remember the previous optimize levels and set to max instead, to be sure\r\n var previousOptimizeLevel = _BinaryenGetOptimizeLevel();\r\n var previousShrinkLevel = _BinaryenGetShrinkLevel();\r\n var previousDebugInfo = _BinaryenGetDebugInfo();\r\n _BinaryenSetOptimizeLevel(4);\r\n _BinaryenSetShrinkLevel(0);\r\n _BinaryenSetDebugInfo(false);\r\n\r\n // wrap the expression in a temp. function and run the precompute pass on it\r\n var type = _BinaryenExpressionGetType(expr);\r\n var func = this.addTemporaryFunction(type, null, expr);\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 expr = _BinaryenFunctionGetBody(func);\r\n this.removeTemporaryFunction();\r\n\r\n // reset optimize levels to previous\r\n _BinaryenSetOptimizeLevel(previousOptimizeLevel);\r\n _BinaryenSetShrinkLevel(previousShrinkLevel);\r\n _BinaryenSetDebugInfo(previousDebugInfo);\r\n return expr;\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) memory.free(cStr);\r\n if (binaryPtr) memory.free(binaryPtr);\r\n if (sourceMapPtr) memory.free(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 memory.free(this.cachedByValue);\r\n memory.free(this.cachedTemporaryName);\r\n memory.free(this.cachedPrecomputeName);\r\n memory.free(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 memory.free(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 memory.free(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 = memory.allocate(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 = memory.allocate(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 = memory.allocate(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/** Tests if an expression needs an explicit 'unreachable' when it is the terminating statement. */\r\nexport function needsExplicitUnreachable(expr: ExpressionRef): bool {\r\n // not applicable if pushing a value to the stack\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n case NativeType.I64:\r\n case NativeType.F32:\r\n case NativeType.F64: return false;\r\n }\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Unreachable:\r\n case ExpressionId.Return: return false;\r\n case ExpressionId.Break: return _BinaryenBreakGetCondition(expr) != 0;\r\n case ExpressionId.Block: {\r\n if (!_BinaryenBlockGetName(expr)) { // can't break out of it\r\n let numChildren = _BinaryenBlockGetNumChildren(expr); // last child needs unreachable\r\n return numChildren > 0 && needsExplicitUnreachable(_BinaryenBlockGetChild(expr, numChildren - 1));\r\n }\r\n }\r\n }\r\n return true;\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 * 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 Program,\r\n DecoratorFlags\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 closest int type representing this type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8: return Type.i8;\r\n case TypeKind.I16: return Type.i16;\r\n case TypeKind.F32:\r\n case TypeKind.I32: return Type.i32;\r\n case TypeKind.F64:\r\n case TypeKind.I64: return Type.i64;\r\n case TypeKind.ISIZE: return this.size == 64 ? Type.isize64 : Type.isize32;\r\n case TypeKind.U8: return Type.u8;\r\n case TypeKind.U16: return Type.u16;\r\n case TypeKind.U32: return Type.u32;\r\n case TypeKind.U64: return Type.u64;\r\n case TypeKind.USIZE: return this.size == 64 ? Type.usize64 : Type.usize32;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\r\n }\r\n\r\n /** Tests if this is a managed type that needs GC hooks. */\r\n isManaged(program: Program): bool {\r\n if (program.hasGC) {\r\n let classReference = this.classReference;\r\n return classReference !== null && !classReference.hasDecorator(DecoratorFlags.UNMANAGED);\r\n }\r\n return false;\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.nonNullableType = this;\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, signednessIsRelevant: 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 (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) {\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 }\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 (!signednessIsRelevant || 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 if (!kindOnly && this.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.classReference;\r\n if (classReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? classReference.toString() + \" | null\"\r\n : classReference.toString();\r\n }\r\n let signatureReference = this.signatureReference;\r\n if (signatureReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? \"(\" + signatureReference.toString(true) + \") | null\"\r\n : signatureReference.toString(true);\r\n }\r\n assert(false);\r\n }\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: return \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n default: assert(false);\r\n case TypeKind.VOID: return \"void\";\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 * 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 assert(text.length);\r\n switch (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.FOR:\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 )) break;\r\n // otherwise fall-through\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 for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {\r\n if (isLineBreak(text.charCodeAt(pos))) {\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) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\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 var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(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 if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\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 } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\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 var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(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 if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\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 } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\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 var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(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 if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\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 } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\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 var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(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 if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\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 } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\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 // TODO: numeric separators (parseFloat can't handle these)\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 * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate,\r\n compileAbort,\r\n compileIterateRoots,\r\n ensureGCHook\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 getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n needsExplicitUnreachable\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\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 \"./common\";\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 ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Resolver, ReportMode\r\n} from \"./resolver\";\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 DecoratorKind,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\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 InstanceOfExpression,\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 ObjectLiteralExpression,\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\r\n nodeIsConstantValue,\r\n isLastStatement,\r\n findDecorator\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 writeI8,\r\n writeI16,\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, 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 /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: i32 = 0;\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 /** Hinted optimize level. Not applied by the compiler itself. */\r\n optimizeLevelHint: i32 = 0;\r\n /** Hinted shrink level. Not applied by the compiler itself. */\r\n shrinkLevelHint: i32 = 0;\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 /** Resolver reference. */\r\n resolver: Resolver;\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 /** Current outer function in compilation, if compiling a function expression. */\r\n currentOuterFunction: Function | null = null;\r\n /** Current inline functions stack. */\r\n currentInlineFunctions: Function[] = [];\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: 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: string[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n /** Indicates whether the iterateRoots function must be generated. */\r\n needsIterateRoots: bool = false;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\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\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\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 or called by main\r\n if (startFunctionBody.length || program.mainFunction !== null) {\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 if (!program.mainFunction) module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n var 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 var numPages = this.memorySegments.length\r\n ? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))\r\n : 0;\r\n module.setMemory(\r\n numPages,\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 // 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 module.setFunctionTable(functionTable);\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 // set up module exports\r\n for (let [name, moduleExport] of program.moduleLevelExports) {\r\n this.makeModuleExport(name, moduleExport.element);\r\n }\r\n\r\n // set up gc\r\n if (this.needsIterateRoots) compileIterateRoots(this);\r\n\r\n return module;\r\n }\r\n\r\n /** Applies the respective module export(s) for the specified element. */\r\n private makeModuleExport(name: string, element: Element, prefix: string = \"\"): void {\r\n\r\n // traverse members\r\n var members = element.members;\r\n if (members) {\r\n let subPrefix = prefix + name + (element.kind == ElementKind.CLASS\r\n ? INSTANCE_DELIMITER\r\n : STATIC_DELIMITER\r\n );\r\n if (element.kind == ElementKind.NAMESPACE) {\r\n for (let member of members.values()) {\r\n if (!member.is(CommonFlags.EXPORT)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n } else {\r\n for (let member of members.values()) {\r\n if (member.is(CommonFlags.PRIVATE)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n }\r\n }\r\n\r\n switch (element.kind) {\r\n\r\n // export global\r\n case ElementKind.GLOBAL: {\r\n let isConst = element.is(CommonFlags.CONST) || element.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n if (!isConst && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n if (!assert(element.parent).is(CommonFlags.CONST) && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n\r\n // export function\r\n case ElementKind.FUNCTION: {\r\n let instance = element;\r\n let signature = instance.signature;\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // utilize trampoline to fill in omitted arguments\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name);\r\n break;\r\n }\r\n\r\n // export getter and setter\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((element).getterPrototype);\r\n this.makeModuleExport(GETTER_PREFIX + name, getter, prefix);\r\n let setter = (element).setterPrototype;\r\n if (setter) this.makeModuleExport(SETTER_PREFIX + name, setter, prefix);\r\n break;\r\n }\r\n\r\n // export a getter and a setter\r\n case ElementKind.FIELD: {\r\n let module = this.module;\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 // make a getter\r\n let getterName = prefix + 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 // make a setter\r\n if (!element.is(CommonFlags.READONLY)) {\r\n let setterName = prefix + 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 }\r\n break;\r\n }\r\n\r\n // skip prototype and export instances\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n let ctor = instance.constructorInstance;\r\n if (ctor) this.makeModuleExport(instanceName + INSTANCE_DELIMITER + ctor.simpleName, ctor, prefix);\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n\r\n // all possible members already handled above\r\n case ElementKind.ENUM:\r\n case ElementKind.CLASS:\r\n case ElementKind.NAMESPACE: break;\r\n\r\n default: assert(false);\r\n }\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 startFunctionInstance = this.startFunctionInstance;\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, [], null);\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 = startFunctionInstance;\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.resolver.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.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\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) && global.hasDecorator(DecoratorFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isDeclaredConstant = global.is(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 (isDeclaredConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration, global.parent);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\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 constant\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 // evaluate initializer if present\r\n if (declaration !== null && declaration.initializer !== null) {\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 if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (isDeclaredConstant) {\r\n initExpr = module.precomputeExpression(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 // explicitly inline if annotated\r\n if (global.hasDecorator(DecoratorFlags.INLINE)) {\r\n if (!initializeInStart) { // reported above\r\n assert(getExpressionId(initExpr) == ExpressionId.Const);\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 }\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 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 normally\r\n module.addGlobal(internalName, nativeType, !isDeclaredConstant, initExpr);\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 var previousValueIsMut = false;\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 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 if (element.is(CommonFlags.CONST)) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.value.range\r\n );\r\n initInStart = true;\r\n }\r\n } else {\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else {\r\n if (previousValueIsMut) {\r\n this.error(\r\n DiagnosticCode.Enum_member_must_have_initializer,\r\n valueDeclaration.range\r\n );\r\n }\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n if (initInStart) {\r\n module.addGlobal(val.internalName, NativeType.I32, true, module.createI32(0));\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n previousValueIsMut = true;\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, !element.is(CommonFlags.CONST), initExpr);\r\n previousValueIsMut = false;\r\n }\r\n previousValue = val;\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 = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\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 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) && instance.hasDecorator(DecoratorFlags.BUILTIN)));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\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 | CommonFlags.MAIN));\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 let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\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 stmts.push(module.createGetLocal(0, 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 stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\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 stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\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 // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration, instance.prototype.parent); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\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 if (element.hasDecorator(DecoratorFlags.BUILTIN)) break;\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 fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let element = fileLevelExports.get(\r\n statement.range.source.internalPath + PATH_DELIMITER + member.externalName.text\r\n );\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 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 // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | 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 declaration\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 = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\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 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.internalName);\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.startFunctionInstance) {\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 stmts.length = 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 switch (getExpressionId(stmt)) {\r\n case ExpressionId.Block: {\r\n if (!getBlockName(stmt)) {\r\n for (let j = 0, k = getBlockChildCount(stmt); j < k; ++j) stmts.push(getBlockChild(stmt, j));\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: stmts.push(stmt);\r\n case ExpressionId.Nop:\r\n }\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n if (needsExplicitUnreachable(stmt)) stmts.push(this.module.createUnreachable());\r\n break;\r\n }\r\n }\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n var parentFlow = this.currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n this.currentFunction.flow = flow;\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,getExpressionType(stmts[stmts.length - 1]));\r\n\r\n this.currentFunction.flow = flow.free();\r\n parentFlow.inherit(flow);\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 parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\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 (just a block)\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n parentFlow.inherit(flow);\r\n\r\n var block: ExpressionRef[] = [\r\n module.createLoop(continueLabel,\r\n terminated\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 ];\r\n if (terminated) block.push(module.createUnreachable());\r\n return module.createBlock(breakLabel, block);\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 parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\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 var repeatLabel = \"repeat|\" + label;\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 : 0;\r\n var condExpr: ExpressionRef = 0;\r\n var alwaysTrue = false;\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 = module.precomputeExpression(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 : 0;\r\n var bodyStatement = statement.statement;\r\n var bodyExpr = bodyStatement.kind == NodeKind.BLOCK && (bodyStatement).statements.length == 1\r\n ? this.compileStatement((bodyStatement).statements[0])\r\n : this.compileStatement(bodyStatement);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var usesContinue = flow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n var breakBlock = new Array(); // outer 'break' block\r\n if (initExpr) breakBlock.push(initExpr);\r\n\r\n var repeatBlock = new Array(); // block repeating the loop\r\n if (usesContinue) {\r\n repeatBlock.push(\r\n module.createBlock(continueLabel, [ // inner 'continue' block\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr)),\r\n bodyExpr\r\n ], NativeType.None)\r\n );\r\n } else { // can omit the 'continue' block\r\n repeatBlock.push(\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr))\r\n );\r\n repeatBlock.push(bodyExpr);\r\n }\r\n if (incrExpr) repeatBlock.push(incrExpr);\r\n repeatBlock.push(\r\n module.createBreak(repeatLabel)\r\n );\r\n\r\n breakBlock.push(\r\n module.createLoop(repeatLabel, module.createBlock(null, repeatBlock, NativeType.None))\r\n );\r\n\r\n return module.createBlock(breakLabel, breakBlock);\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 = module.precomputeExpression(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 parentFlow = currentFunction.flow;\r\n var ifTrueFlow = parentFlow.fork();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.free();\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n let ifFalseFlow = parentFlow.fork();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n currentFunction.flow = ifFalseFlow.free();\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n } else {\r\n parentFlow.inheritConditional(ifTrueFlow);\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 if (returnType == Type.void) {\r\n this.compileExpressionRetainType(statement.value, returnType, WrapMode.NONE);\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n statement.value.range, this.currentType.toString(), returnType.toString()\r\n );\r\n this.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\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 // If the last statement anyway, make it the block's return value\r\n if (isLastStatement(statement)) return expr ? expr : module.createNop();\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 var cases = statement.cases;\r\n var numCases = cases.length;\r\n if (!numCases) {\r\n return this.compileExpression(statement.condition, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\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\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 = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let isLast = i == numCases - 1;\r\n let nextLabel = isLast ? 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 let terminated = false;\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.isAny(FlowFlags.ANY_TERMINATING)) {\r\n terminated = true;\r\n break;\r\n }\r\n }\r\n }\r\n stmts.length = count;\r\n if (terminated || isLast) {\r\n if (!flow.is(FlowFlags.RETURNS)) alwaysReturns = false;\r\n if (!flow.is(FlowFlags.RETURNS_WRAPPED)) alwaysReturnsWrapped = false;\r\n if (!flow.is(FlowFlags.THROWS)) alwaysThrows = false;\r\n if (!flow.is(FlowFlags.ALLOCATES)) alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS\r\n );\r\n currentFunction.flow = flow.free();\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 (guaranteed to handle any value), propagate common flags\r\n if (defaultIndex >= 0) {\r\n if (alwaysReturns) parentFlow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) parentFlow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) parentFlow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) parentFlow.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 compileAbort(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.startFunctionInstance &&\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 var resolver = this.resolver;\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 = resolver.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.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\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.module.precomputeExpression(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(\r\n i64_new(\r\n getConstValueI32(initExpr),\r\n 0\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n )\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 = module.precomputeExpression(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 parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\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 alwaysTrue = false; // TODO\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n terminated\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 ]);\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 // monkey-patch for converting built-in floats to f32 implicitly\r\n if (!(element.hasDecorator(DecoratorFlags.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.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\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.module.precomputeExpression(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\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) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\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\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 fromType.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.resolver.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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\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 // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 = this.resolver.resolveFunction(prototype, null);\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 = this.resolver.resolveFunction(prototype, null);\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\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, leftExpr, right, expression);\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 this.module.createUnreachable();\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 = this.resolver.resolveFunction(prototype, null);\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 = this.resolver.resolveFunction(prototype, null);\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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\r\n }\r\n\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:\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.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // 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: {\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.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must 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:\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\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 if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\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 this.module.createUnreachable();\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 valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\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 leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\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 = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\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 resolver = program.resolver;\r\n var currentFunction = this.currentFunction;\r\n var target = resolver.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 targetType: 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 targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let instance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = 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 (resolver.currentElementExpression) { // 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 targetType = 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 assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, 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.resolver.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 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, 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.resolver.currentThisExpression);\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 // TODO: call __gc_link here if a GC is present\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 // TODO: call __gc_link here if a GC is present\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 = this.resolver.resolveFunction(setterPrototype, null);\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.resolver.currentThisExpression);\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 = this.resolver.resolveFunction(getterPrototype, null);\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.resolver.currentThisExpression);\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.resolver.currentElementExpression;\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.resolver.currentThisExpression);\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.resolver.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.hasDecorator(DecoratorFlags.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 = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\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.parameters;\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.parameters[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.resolver.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments\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 = this.resolver.resolveFunction(\r\n prototype,\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 = this.resolver.resolveFunction(\r\n prototype,\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.resolver.currentThisExpression),\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 if ((target).is(CommonFlags.INLINED)) {\r\n indexArg = module.createI32(i64_low((target).constantIntegerValue));\r\n } else {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\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.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.resolver.currentThisExpression);\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, 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\r\n case ElementKind.PROPERTY: {\r\n indexArg = this.compileGetter(target, expression.expression);\r\n let type = this.currentType;\r\n signature = type.signatureReference;\r\n if (!signature) {\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, type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n break;\r\n }\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 typeArguments: Type[] | null = null;\r\n\r\n // builtins handle omitted type arguments on their own. if present, however, resolve them here\r\n // and pass them to the builtin, even if it's still up to the builtin how to handle them.\r\n var typeArgumentNodes = expression.typeArguments;\r\n if (expression.typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.range, prototype.internalName\r\n );\r\n }\r\n typeArguments = this.resolver.resolveTypeArguments(\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n\r\n // now compile the builtin, which usually returns a block of code that replaces the call.\r\n var expr = compileBuiltinCall(\r\n this,\r\n prototype,\r\n typeArguments,\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 if (this.currentInlineFunctions.includes(instance)) {\r\n this.warning(\r\n DiagnosticCode.Function_0_cannot_be_inlined_into_itself,\r\n reportNode.range, instance.internalName\r\n );\r\n } else {\r\n this.currentInlineFunctions.push(instance);\r\n let expr = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n this.currentInlineFunctions.pop();\r\n return expr;\r\n }\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.parameters[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.ANY_TERMINATING)) 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 are terminated\r\n if (returnType != Type.void && !flow.isAny(FlowFlags.ANY_TERMINATING)) {\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.parameters;\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(\"outOfRange\", [\r\n module.createSwitch(names, \"outOfRange\",\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 let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\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.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\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.resolver.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.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let localType = (target).type;\r\n assert(localType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\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 = this.resolver.resolveFunction(\r\n target,\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 compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\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 false, // TODO: isConst?\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 if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (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)) 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_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 if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\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.compileStringLiteral(expression);\r\n }\r\n case LiteralKind.OBJECT: {\r\n assert(!implicitNegate);\r\n return this.compileObjectLiteral(expression, contextualType);\r\n }\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 /** Ensures that the specified string exists in static memory and returns a pointer to it. */\r\n ensureStaticString(stringValue: string): ExpressionRef {\r\n var program = this.program;\r\n var hasGC = program.hasGC;\r\n var gcHeaderSize = program.gcHeaderSize;\r\n\r\n var stringInstance = assert(program.stringInstance);\r\n var stringSegment: MemorySegment;\r\n\r\n // if the string already exists, reuse it\r\n var segments = this.stringSegments;\r\n if (segments.has(stringValue)) {\r\n stringSegment = segments.get(stringValue);\r\n\r\n // otherwise create it\r\n } else {\r\n let length = stringValue.length;\r\n let headerSize = (stringInstance.currentMemoryOffset + 1) & ~1;\r\n let totalSize = headerSize + length * 2;\r\n\r\n let buf: Uint8Array;\r\n let pos: u32;\r\n\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + totalSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, stringInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(totalSize);\r\n pos = 0;\r\n }\r\n writeI32(length, buf, pos + stringInstance.offsetof(\"length\"));\r\n pos += headerSize;\r\n for (let i = 0; i < length; ++i) {\r\n writeI16(stringValue.charCodeAt(i), buf, pos + (i << 1));\r\n }\r\n stringSegment = this.addMemorySegment(buf);\r\n segments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n if (hasGC) stringOffset = i64_add(stringOffset, i64_new(gcHeaderSize));\r\n\r\n this.currentType = stringInstance.type;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n } else {\r\n assert(i64_is_u32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n }\r\n }\r\n\r\n compileStringLiteral(expression: StringLiteralExpression): ExpressionRef {\r\n return this.ensureStaticString(expression.value);\r\n }\r\n\r\n /** Ensures that the specified array exists in static memory and returns a pointer to it. */\r\n ensureStaticArray(elementType: Type, values: ExpressionRef[]): ExpressionRef {\r\n var program = this.program;\r\n var hasGC = program.hasGC;\r\n var gcHeaderSize = program.gcHeaderSize;\r\n\r\n var length = values.length;\r\n var byteSize = elementType.byteSize;\r\n var byteLength = length * byteSize;\r\n var usizeTypeSize = this.options.usizeType.byteSize;\r\n\r\n var buf: Uint8Array;\r\n var pos: u32;\r\n\r\n // create the backing ArrayBuffer segment\r\n var bufferInstance = assert(program.arrayBufferInstance);\r\n var bufferHeaderSize = (bufferInstance.currentMemoryOffset + 7) & ~7;\r\n var bufferTotalSize = 1 << (32 - clz(bufferHeaderSize + byteLength - 1));\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + bufferTotalSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, bufferInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(bufferTotalSize);\r\n pos = 0;\r\n }\r\n writeI32(byteLength, buf, pos + bufferInstance.offsetof(\"byteLength\"));\r\n pos += bufferHeaderSize;\r\n var nativeType = elementType.toNativeType();\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n switch (byteSize) {\r\n case 1: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI8(getConstValueI32(value), buf, pos);\r\n pos += 1;\r\n }\r\n break;\r\n }\r\n case 2: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI16(getConstValueI32(value), buf, pos);\r\n pos += 2;\r\n }\r\n break;\r\n }\r\n case 4: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI32(getConstValueI32(value), buf, pos);\r\n pos += 4;\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI64(i64_new(getConstValueI64Low(value), getConstValueI64High(value)), buf, pos);\r\n pos += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeF32(getConstValueF32(value), buf, pos);\r\n pos += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeF64(getConstValueF64(value), buf, pos);\r\n pos += 8;\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n var bufferSegment = this.addMemorySegment(buf);\r\n var bufferOffset = bufferSegment.offset;\r\n if (hasGC) bufferOffset = i64_add(bufferOffset, i64_new(gcHeaderSize));\r\n\r\n // create the Array segment and return a pointer to it\r\n var arrayPrototype = assert(program.arrayPrototype);\r\n var arrayInstance = assert(this.resolver.resolveClass(arrayPrototype, [ elementType ]));\r\n var arrayHeaderSize = (arrayInstance.currentMemoryOffset + 7) & ~7;\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + arrayHeaderSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, arrayInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(arrayHeaderSize);\r\n pos = 0;\r\n }\r\n var arraySegment = this.addMemorySegment(buf);\r\n var arrayOffset = arraySegment.offset;\r\n if (hasGC) arrayOffset = i64_add(arrayOffset, i64_new(gcHeaderSize));\r\n this.currentType = arrayInstance.type;\r\n if (usizeTypeSize == 8) {\r\n writeI64(bufferOffset, buf, pos + arrayInstance.offsetof(\"buffer_\"));\r\n writeI32(length, buf, pos + arrayInstance.offsetof(\"length_\"));\r\n return this.module.createI64(i64_low(arrayOffset), i64_high(arrayOffset));\r\n } else {\r\n assert(i64_is_u32(bufferOffset));\r\n writeI32(i64_low(bufferOffset), buf, pos + arrayInstance.offsetof(\"buffer_\"));\r\n writeI32(length, buf, pos + arrayInstance.offsetof(\"length_\"));\r\n assert(i64_is_u32(arrayOffset));\r\n return this.module.createI32(i64_low(arrayOffset));\r\n }\r\n }\r\n\r\n compileArrayLiteral(\r\n elementType: Type,\r\n expressions: (Expression | null)[],\r\n isConst: bool,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n // find out whether all elements are constant (array is static)\r\n var length = expressions.length;\r\n var compiledValues = new Array(length);\r\n var constantValues = new Array(length);\r\n var nativeElementType = elementType.toNativeType();\r\n var isStatic = true;\r\n for (let i = 0; i < length; ++i) {\r\n let expr = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n compiledValues[i] = expr;\r\n if (isStatic) {\r\n expr = module.precomputeExpression(compiledValues[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n constantValues[i] = expr;\r\n } else {\r\n if (isConst) {\r\n this.warning(\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 // make a static array if possible\r\n if (isStatic) return this.ensureStaticArray(elementType, constantValues);\r\n\r\n // otherwise 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 = this.resolver.resolveClass(arrayPrototype, [ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n // and compile an explicit instantiation\r\n this.currentType = arrayType;\r\n var 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 var nativeArrayType = arrayType.toNativeType();\r\n var currentFunction = this.currentFunction;\r\n var tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n var stmts = new Array(2 + length);\r\n var 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(length)\r\n ])\r\n );\r\n for (let i = 0; i < length; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n compiledValues[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 compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n\r\n // contextual type must be a class\r\n var classReference = contextualType.classReference;\r\n if (!classReference || classReference.is(CommonFlags.ABSTRACT)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, \"\", contextualType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // if present, check that the constructor is compatible with object literals\r\n var ctor = classReference.constructorInstance;\r\n if (ctor) {\r\n if (ctor.signature.requiredParameters) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PRIVATE)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PROTECTED)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // check and compile field values\r\n var names = expression.names;\r\n var numNames = names.length;\r\n var values = expression.values;\r\n var members = classReference.members;\r\n var hasErrors = false;\r\n var exprs = new Array(numNames + 2);\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n assert(numNames == values.length);\r\n for (let i = 0, k = numNames; i < k; ++i) {\r\n let member = members ? members.get(names[i].text) : null;\r\n if (!member || member.kind != ElementKind.FIELD) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n names[i].range, names[i].text, classReference.toString()\r\n );\r\n hasErrors = true;\r\n continue;\r\n }\r\n let type = (member).type;\r\n exprs[i + 1] = this.module.createStore( // TODO: handle setters as well\r\n type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(values[i], (member).type, ConversionKind.IMPLICIT, WrapMode.NONE),\r\n type.toNativeType(),\r\n (member).memoryOffset\r\n );\r\n }\r\n this.currentType = classReference.type.nonNullableType;\r\n if (hasErrors) return module.createUnreachable();\r\n\r\n // allocate a new instance first and assign 'this' to the temp. local\r\n exprs[0] = module.createSetLocal(\r\n tempLocal.index,\r\n compileAllocate(this, classReference, expression)\r\n );\r\n\r\n // once all field values have been set, return 'this'\r\n exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType);\r\n\r\n return module.createBlock(null, exprs, this.options.nativeSizeType);\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.resolver.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: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = this.resolver.resolveClass(\r\n classPrototype,\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = this.resolver.resolveClassInclTypeArguments(\r\n classPrototype,\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the top-most visible constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance: Function | null = null;\r\n do {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n if (constructorInstance) break; // TODO: check visibility\r\n } while (currentClassInstance = currentClassInstance.base);\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 module = this.module;\r\n\r\n var target = this.resolver.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 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 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(this.resolver.currentThisExpression);\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 return this.compileGetter(target, propertyAccess);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.error(\r\n DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set,\r\n propertyAccess.range, (target).simpleName\r\n );\r\n return module.createUnreachable();\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 private compileGetter(target: Property, reportNode: Node): ExpressionRef {\r\n var prototype = target.getterPrototype;\r\n if (prototype) {\r\n let instance = this.resolver.resolveFunction(prototype, null);\r\n if (!instance) return this.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 reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n let inline = (instance.decoratorFlags & DecoratorFlags.INLINE) != 0;\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(this.resolver.currentThisExpression); //!!!\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, [], reportNode, thisExpr, inline);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], reportNode, 0, inline);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n reportNode.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\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 var parentFlow = currentFunction.flow;\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.module.precomputeExpression(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 ifThenFlow = parentFlow.fork();\r\n currentFunction.flow = ifThenFlow;\r\n var ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n var ifThenType = this.currentType;\r\n ifThenFlow.free();\r\n\r\n var ifElseFlow = parentFlow.fork();\r\n currentFunction.flow = ifElseFlow;\r\n var ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n var ifElseType = this.currentType;\r\n currentFunction.flow = ifElseFlow.free();\r\n\r\n parentFlow.inheritMutual(ifThenFlow, ifElseFlow);\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 // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\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\r\n // TODO: check operator overload\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 this.module.createUnreachable();\r\n }\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\r\n // TODO: check operator overload\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 this.module.createUnreachable();\r\n }\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 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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\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 break;\r\n }\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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 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.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 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 break;\r\n }\r\n case Token.PLUS_PLUS: {\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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 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.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 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 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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 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.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 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\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\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 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 ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\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 module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\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.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 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 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 compileAllocate(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 mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement,\r\n parentElement: Element | null = null\r\n): void {\r\n mangleImportName_moduleName = parentElement ? parentElement.simpleName : declaration.range.source.simplePath;\r\n mangleImportName_elementName = element.simpleName;\r\n\r\n if (!element.hasDecorator(DecoratorFlags.EXTERNAL)) return;\r\n\r\n var program = element.program;\r\n var decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n var args = decorator.arguments;\r\n if (args && args.length) {\r\n let arg = args[0];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\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 User_defined_0 = 102,\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 An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\r\n Optional_parameter_must_have_an_initializer = 215,\r\n Constructor_of_class_0_must_not_require_any_arguments = 216,\r\n Function_0_cannot_be_inlined_into_itself = 217,\r\n Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set = 218,\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 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 Enum_member_must_have_initializer = 1061,\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 Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\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 In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474,\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 Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\r\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054,\r\n Numeric_separators_are_not_allowed_here = 6188,\r\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\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 102: return \"User-defined: {0}\";\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 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\r\n case 215: return \"Optional parameter must have an initializer.\";\r\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\r\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\r\n case 218: return \"Cannot access method '{0}' without calling it as it requires 'this' to be set.\";\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 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 1061: return \"Enum member must have initializer.\";\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 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\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 2474: return \"In 'const' enum declarations member initializer must be constant expression.\";\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 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\r\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n case 6188: return \"Numeric separators are not allowed here.\";\r\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\r\n default: return \"\";\r\n }\r\n}\r\n","/**\r\n * Resolve infrastructure to obtain types and elements.\r\n * @module resolver\r\n *//***/\r\n\r\nimport {\r\n DiagnosticEmitter,\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Program,\r\n ElementKind,\r\n OperatorKind,\r\n FlowFlags,\r\n\r\n Element,\r\n Class,\r\n ClassPrototype,\r\n Function,\r\n FunctionTarget,\r\n FunctionPrototype,\r\n VariableLikeElement,\r\n Property,\r\n DecoratorFlags,\r\n FieldPrototype,\r\n Field\r\n} from \"./program\";\r\n\r\nimport {\r\n SignatureNode,\r\n ParameterKind,\r\n CommonTypeNode,\r\n NodeKind,\r\n TypeNode,\r\n TypeParameterNode,\r\n Node,\r\n Range,\r\n IdentifierExpression,\r\n CallExpression,\r\n ElementAccessExpression,\r\n PropertyAccessExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n AssertionExpression,\r\n Expression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n Signature,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n PATH_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Indicates whether errors are reported or not. */\r\nexport enum ReportMode {\r\n /** Report errors. */\r\n REPORT,\r\n /** Swallow errors. */\r\n SWALLOW\r\n}\r\n\r\n/** Provides tools to resolve types and expressions. */\r\nexport class Resolver extends DiagnosticEmitter {\r\n\r\n /** The program this resolver belongs to. */\r\n program: Program;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n currentThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n currentElementExpression : Expression | null = null;\r\n\r\n /** Constructs the resolver for the specified program. */\r\n constructor(program: Program) {\r\n super(program.diagnostics);\r\n this.program = program;\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 reportMode = ReportMode.REPORT\r\n ): Type | null {\r\n\r\n // handle signatures specifically\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportMode);\r\n if (!signature) return null;\r\n return node.isNullable ? signature.type.asNullable() : signature.type;\r\n }\r\n\r\n // now dealing with TypeNode\r\n assert(node.kind == NodeKind.TYPE);\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; // TODO cache\r\n\r\n // check file-global / program-global enum or class\r\n {\r\n let elementsLookup = this.program.elementsLookup;\r\n let element: Element | null;\r\n if (\r\n (element = elementsLookup.get(localName)) || // file-global\r\n (element = elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: {\r\n if (typeNode.typeArguments !== null && typeNode.typeArguments.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n node.range, element.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n return Type.i32;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = this.resolveClassInclTypeArguments(\r\n element,\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n node\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable ? instance.type.asNullable() : instance.type;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n {\r\n let alias = this.program.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportMode);\r\n }\r\n\r\n // resolve parameters\r\n {\r\n let typeArgumentNodes = typeNode.typeArguments;\r\n if (typeArgumentNodes) {\r\n let numTypeArguments = typeArgumentNodes.length;\r\n let paramTypes = new Array(numTypeArguments);\r\n for (let i = 0; i < numTypeArguments; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n if (numTypeArguments) { // 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\r\n // check file-global / program-global type\r\n {\r\n let typesLookup = this.program.typesLookup;\r\n let type: Type | null;\r\n if (\r\n (type = typesLookup.get(localName)) ||\r\n (type = typesLookup.get(globalName))\r\n ) {\r\n return type;\r\n }\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\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 a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\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(explicitThisType, contextualTypeArguments, reportMode);\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameters;\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 reportMode\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(returnTypeNode, contextualTypeArguments, reportMode);\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 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 reportMode: ReportMode = ReportMode.REPORT\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 reportMode\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 context: Element | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var name = identifier.text;\r\n var element: Element | null;\r\n\r\n if (context) {\r\n\r\n switch (context.kind) {\r\n case ElementKind.FUNCTION: { // search locals, use prototype\r\n element = (context).flow.getScopedLocal(name);\r\n if (element) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n case ElementKind.CLASS: { // use prototype\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n }\r\n\r\n // search context\r\n while (context) {\r\n let members = context.members;\r\n if (members) {\r\n if (element = members.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n }\r\n context = context.parent;\r\n }\r\n }\r\n\r\n // search current file\r\n var elementsLookup = this.program.elementsLookup;\r\n if (element = elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = elementsLookup.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\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 reportMode: ReportMode = ReportMode.REPORT\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, reportMode); // 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 type = (target).type;\r\n assert(type != Type.void);\r\n let classReference = 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 = this.resolveFunction(\r\n assert((target).getterPrototype),\r\n null,\r\n null,\r\n reportMode\r\n );\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.currentElementExpression;\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.currentThisExpression = targetExpression;\r\n this.currentElementExpression = 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 if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\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 reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\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.currentThisExpression = targetExpression;\r\n this.currentElementExpression = 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 if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n }\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\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(\r\n (expression).toType,\r\n contextualFunction.flow.contextualTypeArguments,\r\n reportMode\r\n );\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = 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.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\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.currentThisExpression = null;\r\n this.currentElementExpression = 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.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction, reportMode);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.currentThisExpression = expression;\r\n this.currentElementExpression = null;\r\n return this.program.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 reportMode\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = this.resolveFunctionInclTypeArguments(\r\n target,\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression,\r\n reportMode\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.program, 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 if (reportMode == ReportMode.REPORT) {\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 }\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a function prototype to an instance using the specified concrete type arguments. */\r\n resolveFunction(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = prototype.declaration;\r\n var isInstance = prototype.is(CommonFlags.INSTANCE);\r\n var classPrototype = prototype.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 = prototype.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(prototype.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 (typeArguments && (numFunctionTypeArguments = typeArguments.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 typeArguments[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 = this.resolveClass(\r\n assert(classPrototype),\r\n classTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\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.parameters;\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.resolveType(typeNode, contextualTypeArguments, reportMode);\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 (prototype.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (prototype.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.resolveType(typeNode, contextualTypeArguments, reportMode);\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 = prototype.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n prototype,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves a function prototype partially by applying the specified type arguments. */\r\n resolveFunctionPartially(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): FunctionPrototype | null {\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(prototype.classPrototype);\r\n\r\n if (!(typeArguments && typeArguments.length)) return prototype; // no need to clone\r\n\r\n var simpleName = prototype.simpleName;\r\n var partialKey = typesToString(typeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n prototype.declaration,\r\n classPrototype,\r\n prototype.decoratorFlags\r\n );\r\n partialPrototype.flags = prototype.flags;\r\n partialPrototype.operatorKind = prototype.operatorKind;\r\n partialPrototype.classTypeArguments = typeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves a function prototype to an instance by first resolving the specified type arguments. */\r\n resolveFunctionInclTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.resolveTypeArguments( // reports\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n\r\n /** Resolves a class prototype using the specified concrete type arguments. */\r\n resolveClass(\r\n prototype: ClassPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n\r\n // Check if this exact instance has already been resolved\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // Copy contextual type arguments so we don't pollute the original map\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 // Insert contextual type arguments for this operation. Internally, this method is always\r\n // called with matching type parameter / argument counts.\r\n var declaration = prototype.declaration;\r\n if (typeArguments) {\r\n let typeParameters = declaration.typeParameters;\r\n let expectedTypeArguments = typeParameters.length;\r\n let actualTypeArguments = typeArguments.length;\r\n assert(actualTypeArguments == expectedTypeArguments);\r\n for (let i = 0; i < actualTypeArguments; ++i) {\r\n contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else {\r\n assert(declaration.typeParameters.length == 0);\r\n }\r\n\r\n // Resolve base class if applicable\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.resolveType(\r\n declaration.extendsType,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n if (reportMode == ReportMode.REPORT) {\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 }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (reportMode == ReportMode.REPORT) {\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 }\r\n return null;\r\n }\r\n }\r\n\r\n // Construct the instance and remember that it has been resolved already\r\n var simpleName = prototype.simpleName;\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(prototype, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n // Inherit base class members and set up the initial memory offset for own fields\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\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 memoryOffset = baseClass.currentMemoryOffset;\r\n }\r\n\r\n // Resolve constructor by first applying the class type arguments\r\n if (prototype.constructorPrototype) {\r\n let constructorPartial = this.resolveFunctionPartially(\r\n prototype.constructorPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!constructorPartial) return null;\r\n instance.constructorInstance = this.resolveFunction(constructorPartial, null, null, reportMode);\r\n }\r\n\r\n // Resolve instance members\r\n if (prototype.instanceMembers) {\r\n for (let member of prototype.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 let fieldType: Type | null = null;\r\n // TODO: handle duplicate non-private fields\r\n if (!fieldDeclaration.type) {\r\n if (baseClass !== null && baseClass.members !== null) {\r\n let baseField = baseClass.members.get((member).simpleName);\r\n if (baseField && !baseField.is(CommonFlags.PRIVATE)) {\r\n assert(baseField.kind == ElementKind.FIELD);\r\n fieldType = (baseField).type;\r\n }\r\n }\r\n if (!fieldType) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n fieldDeclaration.name.range.atEnd\r\n );\r\n }\r\n }\r\n } else {\r\n fieldType = this.resolveType(\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n if (!fieldType) break;\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: { if (memoryOffset & 1) ++memoryOffset; break; }\r\n case 4: { if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break; }\r\n case 8: { if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break; }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n 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 = this.resolveFunctionPartially(\r\n member,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialPrototype) return null;\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\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); // must be present\r\n let setterPrototype = (member).setterPrototype; // might be present\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n prototype\r\n );\r\n let partialGetterPrototype = this.resolveFunctionPartially(\r\n getterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName;\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = this.resolveFunctionPartially(\r\n setterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName;\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 // Finalize memory offset\r\n instance.currentMemoryOffset = memoryOffset;\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, overloadPrototype] of prototype.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (overloadPrototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = this.resolveFunctionPartially(\r\n overloadPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!operatorPartial) continue;\r\n operatorInstance = this.resolveFunction(operatorPartial, null, null, reportMode);\r\n } else {\r\n operatorInstance = this.resolveFunction(overloadPrototype, null, null, reportMode);\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 return instance;\r\n }\r\n\r\n /** Resolves a class prototype by first resolving the specified type arguments. */\r\n resolveClassInclTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n\r\n // Resolve type arguments if generic\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n let typeParameterNodes = prototype.declaration.typeParameters;\r\n let expectedTypeArguments = typeParameterNodes.length;\r\n assert(expectedTypeArguments > 0);\r\n let actualTypeArguments = typeArgumentNodes !== null ? typeArgumentNodes.length : 0;\r\n if (expectedTypeArguments != actualTypeArguments) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, expectedTypeArguments.toString(10), actualTypeArguments.toString(10)\r\n );\r\n }\r\n return null;\r\n }\r\n resolvedTypeArguments = this.resolveTypeArguments(\r\n typeParameterNodes,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n\r\n // Otherwise make sure that no type arguments have been specified\r\n } else {\r\n if (typeArgumentNodes !== null && typeArgumentNodes.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Continue with concrete types\r\n return this.resolveClass(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n}\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\n/// \r\n\r\nimport \"./binaryen\"; // must be first so portable can pick up the memory implementation\r\nimport \"../../../std/portable/index\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n\r\nimport { Module } from \"../../module\";\r\n\r\nModule.prototype.toText = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\nglobal.binaryen = binaryen;\r\n\r\nfor (var key in binaryen) {\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\")) global[key] = binaryen[key];\r\n}\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.__memory_allocate = binaryen._malloc;\r\nglobal.__memory_free = binaryen._free;\r\nglobal.__memory_copy = binaryen._memmove;\r\nglobal.__store = function(ptr, val) { binaryen.HEAPU8[ptr] = val; };\r\nglobal.__load = function(ptr) { return binaryen.HEAPU8[ptr]; };\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__15__;","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nglobalScope.ASC_TARGET = 0;\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\nglobalScope[\"JSMath\"] = Math;\r\n\r\nglobalScope[\"memory\"] = (() => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n return {\r\n allocate: globalScope[\"__memory_allocate\"] || function allocate(size) {\r\n if (!(size >>>= 0)) return 0;\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 var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n return ptr;\r\n },\r\n free: globalScope[\"__memory_free\"] || function free(ptr) { },\r\n copy: globalScope[\"__memory_copy\"] || function copy(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n }\r\n };\r\n})();\r\n\r\nglobalScope[\"store\"] = globalScope[\"__store\"] || function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n};\r\n\r\nglobalScope[\"load\"] = globalScope[\"__load\"] || function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n};\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","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.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","/**\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 Global,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n ReportMode\r\n} from \"./resolver\";\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\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 case \"isDefined\": { // isDefined(expression) -> bool\r\n compiler.currentType = Type.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 return module.createUnreachable();\r\n }\r\n let element = compiler.resolver.resolveExpression(operands[0], compiler.currentFunction, ReportMode.SWALLOW);\r\n return module.createI32(element ? 1 : 0);\r\n }\r\n case \"isConstant\": { // isConstant(expression) -> bool\r\n compiler.currentType = Type.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 return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n compiler.currentType = Type.bool;\r\n return module.createI32(getExpressionId(expr) == ExpressionId.Const ? 1 : 0);\r\n }\r\n case \"isManaged\": { // isManaged() -> bool\r\n if (!compiler.program.hasGC) {\r\n compiler.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\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.hasDecorator(DecoratorFlags.UNMANAGED)\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 \"memory.size\": { // memory.size() -> 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 \"memory.grow\": { // memory.grow(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 \"memory.copy\": { // memory.copy(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 \"memory.fill\": { // memory.fill(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 case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> 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_at_least_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 returnType: Type;\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 returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // user-defined diagnostic macros\r\n\r\n case \"ERROR\": {\r\n compiler.error(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n case \"WARNING\": {\r\n compiler.warning(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n case \"INFO\": {\r\n compiler.info(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\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 // gc\r\n\r\n case \"iterateRoots\": {\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.void;\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n let type = compiler.currentType;\r\n let signatureReference = type.signatureReference;\r\n compiler.currentType = Type.void;\r\n if (\r\n !type.is(TypeFlags.REFERENCE) ||\r\n !signatureReference ||\r\n signatureReference.parameterTypes.length != 1 ||\r\n signatureReference.parameterTypes[0] != compiler.options.usizeType\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, type.toString(), \"(ref: usize) => void\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n // just emit a call even if the function doesn't yet exist\r\n compiler.needsIterateRoots = true;\r\n return module.createCall(\"~iterateRoots\", [ expr ], NativeType.None);\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\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 // __gc_allocate(size, markFn)\r\n if (program.hasGC && classInstance.type.isManaged(program)) {\r\n let allocateInstance = assert(program.gcAllocateInstance);\r\n if (!compiler.compileFunction(allocateInstance)) return module.createUnreachable();\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 module.createI32(\r\n ensureGCHook(compiler, classInstance)\r\n )\r\n ],\r\n options.nativeSizeType\r\n );\r\n\r\n // memory.allocate(size)\r\n } else {\r\n let allocateInstance = program.memoryAllocateInstance;\r\n if (!allocateInstance) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, \"memory.allocate\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!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\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\");\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortInstance = program.abortInstance;\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.ensureStaticString(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\r\n/** Compiles the iterateRoots function if requires. */\r\nexport function compileIterateRoots(compiler: Compiler): void {\r\n var module = compiler.module;\r\n var exprs = new Array();\r\n\r\n for (let element of compiler.program.elementsLookup.values()) {\r\n if (element.kind != ElementKind.GLOBAL) continue;\r\n let global = element;\r\n let classReference = global.type.classReference;\r\n if (\r\n global.is(CommonFlags.COMPILED) &&\r\n classReference !== null &&\r\n !classReference.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ) {\r\n if (global.is(CommonFlags.INLINED)) {\r\n let value = global.constantIntegerValue;\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n compiler.options.isWasm64\r\n ? module.createI64(i64_low(value), i64_high(value))\r\n : module.createI32(i64_low(value))\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n } else {\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n module.createGetGlobal(\r\n global.internalName,\r\n compiler.options.nativeSizeType\r\n )\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n }\r\n }\r\n }\r\n var typeRef = compiler.ensureFunctionType([ Type.i32 ], Type.void);\r\n module.addFunction(\"~iterateRoots\", typeRef, [],\r\n exprs.length\r\n ? module.createBlock(null, exprs)\r\n : module.createNop()\r\n );\r\n}\r\n\r\n/** Ensures that the specified class's GC hook exists and returns its function table index. */\r\nexport function ensureGCHook(\r\n compiler: Compiler,\r\n classInstance: Class\r\n): u32 {\r\n var program = compiler.program;\r\n assert(classInstance.type.isManaged(program));\r\n\r\n // check if the GC hook has already been created\r\n {\r\n let existingIndex = classInstance.gcHookIndex;\r\n if (existingIndex != -1) return existingIndex;\r\n }\r\n\r\n // check if the class implements a custom GC function (only valid for internals)\r\n var members = classInstance.members;\r\n if (classInstance.prototype.declaration.range.source.isLibrary) {\r\n if (members !== null && members.has(\"__gc\")) {\r\n let gcPrototype = assert(members.get(\"__gc\"));\r\n assert(gcPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcInstance = assert(program.resolver.resolveFunction(gcPrototype, null));\r\n assert(gcInstance.is(CommonFlags.PRIVATE | CommonFlags.INSTANCE));\r\n assert(!gcInstance.isAny(CommonFlags.AMBIENT | CommonFlags.VIRTUAL));\r\n assert(gcInstance.signature.parameterTypes.length == 0);\r\n assert(gcInstance.signature.returnType == Type.void);\r\n gcInstance.internalName = classInstance.internalName + \"~gc\";\r\n assert(compiler.compileFunction(gcInstance));\r\n let index = compiler.ensureFunctionTableEntry(gcInstance);\r\n classInstance.gcHookIndex = index;\r\n return index;\r\n }\r\n }\r\n\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n var nativeSizeType = options.nativeSizeType;\r\n var nativeSizeSize = options.usizeType.byteSize;\r\n var body = new Array();\r\n\r\n // nothing to mark if 'this' is null\r\n body.push(\r\n module.createIf(\r\n module.createUnary(\r\n options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createGetLocal(0, nativeSizeType)\r\n ),\r\n module.createReturn()\r\n )\r\n );\r\n\r\n // remember the function index so we don't recurse infinitely\r\n var functionTable = compiler.functionTable;\r\n var gcHookIndex = functionTable.length;\r\n functionTable.push(\"\");\r\n classInstance.gcHookIndex = gcHookIndex;\r\n\r\n // if the class extends a base class, call its hook first (calls mark)\r\n var baseInstance = classInstance.base;\r\n if (baseInstance) {\r\n assert(baseInstance.type.isManaged(program));\r\n body.push(\r\n module.createCallIndirect(\r\n module.createI32(\r\n ensureGCHook(compiler, baseInstance.type.classReference)\r\n ),\r\n [\r\n module.createGetLocal(0, nativeSizeType)\r\n ],\r\n nativeSizeType == NativeType.I64 ? \"Iv\" : \"iv\"\r\n )\r\n );\r\n\r\n // if this class is the top-most base class, mark the instance\r\n } else {\r\n body.push(\r\n module.createCall(assert(program.gcMarkInstance).internalName, [\r\n module.createGetLocal(0, nativeSizeType)\r\n ], NativeType.None)\r\n );\r\n }\r\n\r\n // mark instances assigned to own fields that are again references\r\n if (members) {\r\n for (let member of members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n if ((member).parent === classInstance) {\r\n let type = (member).type;\r\n if (type.isManaged(program)) {\r\n let offset = (member).memoryOffset;\r\n assert(offset >= 0);\r\n body.push(\r\n module.createCall(assert(program.gcMarkInstance).internalName, [\r\n module.createLoad(\r\n nativeSizeSize,\r\n false,\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeSizeType,\r\n offset\r\n )\r\n ], NativeType.None)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // add the function to the module and return its table index\r\n var funcName = classInstance.internalName + \"~gc\";\r\n module.addFunction(\r\n funcName,\r\n compiler.ensureFunctionType(null, Type.void, options.usizeType),\r\n null,\r\n module.createBlock(null, body)\r\n );\r\n functionTable[gcHookIndex] = funcName;\r\n return gcHookIndex;\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","/** @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\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\n/** Reads an 8-bit integer from the specified buffer. */\r\nexport function readI8(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset];\r\n}\r\n\r\n/** Writes an 8-bit integer to the specified buffer. */\r\nexport function writeI8(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset] = value;\r\n}\r\n\r\n/** Reads a 16-bit integer from the specified buffer. */\r\nexport function readI16(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8;\r\n}\r\n\r\n/** Writes a 16-bit integer to the specified buffer. */\r\nexport function writeI16(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n}\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","/**\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} 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 `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/** Gives the compiler a hint at the optimize levels that will be used later on. */\r\nexport function setOptimizeLevelHints(options: Options, optimizeLevel: i32, shrinkLevel: i32): void {\r\n options.optimizeLevelHint = optimizeLevel;\r\n options.shrinkLevelHint = shrinkLevel;\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 } from \"./common\";\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(\"memory.size()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"memory.grow(\");\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 * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n Element,\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 moduleExport of this.program.moduleLevelExports.values()) {\r\n // FIXME: doesn't honor the actual externally visible name\r\n this.visitElement(moduleExport.element);\r\n }\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\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 ClassExpression,\r\n FunctionExpression,\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 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 nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: 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 normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\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 var program = this.program;\r\n program.sources.push(source);\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 // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.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 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 // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\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 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 }\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 private parseParametersThis: TypeNode | null = null;\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 var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.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 return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\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\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\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 thisType,\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, // TODO?\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 parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\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\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\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 Node.createClassExpression(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 var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\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 if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\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 if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\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 (!isInterface) {\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\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 let thisType = this.parseParametersThis;\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 thisType,\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 } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\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) && !isInterface) {\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 var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\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 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 if (tn.skip(Token.ASTERISK)) {\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 let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(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 } 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 while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\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 } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n if (tn.token == Token.ENDOFFILE) return null;\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 precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\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, precedence);\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 var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\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 // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n names.push(name);\r\n if (tn.skip(Token.COLON)) {\r\n let value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n values.push(value);\r\n } else if (!name.is(CommonFlags.QUOTED)) {\r\n values.push(name);\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 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 return Node.createObjectLiteralExpression(names, values, 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 case Token.CLASS: {\r\n return this.parseClassExpression(tn);\r\n }\r\n default: {\r\n if (token == Token.ENDOFFILE) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n tn.range(startPos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\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 = Precedence.COMMA\r\n ): Expression | null {\r\n assert(precedence != Precedence.NONE);\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression?\r\n if (nodeIsCallable(expr.kind)) {\r\n let typeArguments: CommonTypeNode[] | null = null;\r\n while (\r\n tn.skip(Token.OPENPAREN)\r\n ||\r\n nodeIsGenericCallable(expr.kind) && (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) !== null\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)); // is again callable\r\n }\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); // reports\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 // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\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); // reports\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\r\n ? Precedence.COMMA + 1\r\n : Precedence.COMMA\r\n );\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 // at '{': ... '}'\r\n var depth = 1;\r\n var again = true;\r\n do {\r\n switch (tn.next()) {\r\n case Token.ENDOFFILE: {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n again = false;\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n ++depth;\r\n break;\r\n }\r\n case Token.CLOSEBRACE: {\r\n --depth;\r\n if (!depth) again = false;\r\n break;\r\n }\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 (again);\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n NONE,\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}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\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 }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\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 }\r\n return Precedence.NONE;\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"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c4761e7d..ed01cd91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,276 +82,198 @@ } }, "@webassemblyjs/ast": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz", - "integrity": "sha512-49nwvW/Hx9i+OYHg+mRhKZfAlqThr11Dqz8TsrvqGKMhdI2ijy3KBJOun2Z4770TPjrIJhR6KxChQIDaz8clDA==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", + "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.5.13", - "@webassemblyjs/helper-wasm-bytecode": "1.5.13", - "@webassemblyjs/wast-parser": "1.5.13", - "debug": "^3.1.0", + "@webassemblyjs/helper-module-context": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/wast-parser": "1.7.6", "mamacro": "^0.0.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.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz", - "integrity": "sha512-vrvvB18Kh4uyghSKb0NTv+2WZx871WL2NzwMj61jcq2bXkyhRC+8Q0oD7JGVf0+5i/fKQYQSBCNMMsDMRVAMqA==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz", + "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz", - "integrity": "sha512-dBh2CWYqjaDlvMmRP/kudxpdh30uXjIbpkLj9HQe+qtYlwvYjPRjdQXrq1cTAAOUSMTtzqbXIxEdEZmyKfcwsg==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz", + "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz", - "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==", - "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" - } - } - } + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz", + "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw==", + "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz", - "integrity": "sha512-yN6ScQQDFCiAXnVctdVO/J5NQRbwyTbQzsGzEgXsAnrxhjp0xihh+nNHQTMrq5UhOqTb5LykpJAvEv9AT0jnAQ==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz", + "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.5.13" + "@webassemblyjs/wast-printer": "1.7.6" } }, "@webassemblyjs/helper-fsm": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz", - "integrity": "sha512-hSIKzbXjVMRvy3Jzhgu+vDd/aswJ+UMEnLRCkZDdknZO3Z9e6rp1DAs0tdLItjCFqkz9+0BeOPK/mk3eYvVzZg==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz", + "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz", - "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz", + "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==", "dev": true, "requires": { - "debug": "^3.1.0", "mamacro": "^0.0.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/helper-wasm-bytecode": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz", - "integrity": "sha512-0n3SoNGLvbJIZPhtMFq0XmmnA/YmQBXaZKQZcW8maGKwLpVcgjNrxpFZHEOLKjXJYVN5Il8vSfG7nRX50Zn+aw==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz", + "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz", - "integrity": "sha512-IJ/goicOZ5TT1axZFSnlAtz4m8KEjYr12BNOANAwGFPKXM4byEDaMNXYowHMG0yKV9a397eU/NlibFaLwr1fbw==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz", + "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.5.13", - "@webassemblyjs/helper-buffer": "1.5.13", - "@webassemblyjs/helper-wasm-bytecode": "1.5.13", - "@webassemblyjs/wasm-gen": "1.5.13", - "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/ast": "1.7.6", + "@webassemblyjs/helper-buffer": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/wasm-gen": "1.7.6" } }, "@webassemblyjs/ieee754": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz", - "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz", + "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==", "dev": true, "requires": { - "ieee754": "^1.1.11" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.5.13.tgz", - "integrity": "sha512-0NRMxrL+GG3eISGZBmLBLAVjphbN8Si15s7jzThaw1UE9e5BY1oH49/+MA1xBzxpf1OW5sf9OrPDOclk9wj2yg==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz", + "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==", "dev": true, "requires": { - "long": "4.0.0" + "@xtuc/long": "4.2.1" } }, "@webassemblyjs/utf8": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.5.13.tgz", - "integrity": "sha512-Ve1ilU2N48Ew0lVGB8FqY7V7hXjaC4+PeZM+vDYxEd+R2iQ0q+Wb3Rw8v0Ri0+rxhoz6gVGsnQNb4FjRiEH/Ng==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz", + "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz", - "integrity": "sha512-X7ZNW4+Hga4f2NmqENnHke2V/mGYK/xnybJSIXImt1ulxbCOEs/A+ZK/Km2jgihjyVxp/0z0hwIcxC6PrkWtgw==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz", + "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.5.13", - "@webassemblyjs/helper-buffer": "1.5.13", - "@webassemblyjs/helper-wasm-bytecode": "1.5.13", - "@webassemblyjs/helper-wasm-section": "1.5.13", - "@webassemblyjs/wasm-gen": "1.5.13", - "@webassemblyjs/wasm-opt": "1.5.13", - "@webassemblyjs/wasm-parser": "1.5.13", - "@webassemblyjs/wast-printer": "1.5.13", - "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/ast": "1.7.6", + "@webassemblyjs/helper-buffer": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/helper-wasm-section": "1.7.6", + "@webassemblyjs/wasm-gen": "1.7.6", + "@webassemblyjs/wasm-opt": "1.7.6", + "@webassemblyjs/wasm-parser": "1.7.6", + "@webassemblyjs/wast-printer": "1.7.6" } }, "@webassemblyjs/wasm-gen": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz", - "integrity": "sha512-yfv94Se8R73zmr8GAYzezFHc3lDwE/lBXQddSiIZEKZFuqy7yWtm3KMwA1uGbv5G1WphimJxboXHR80IgX1hQA==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz", + "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.5.13", - "@webassemblyjs/helper-wasm-bytecode": "1.5.13", - "@webassemblyjs/ieee754": "1.5.13", - "@webassemblyjs/leb128": "1.5.13", - "@webassemblyjs/utf8": "1.5.13" + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/ieee754": "1.7.6", + "@webassemblyjs/leb128": "1.7.6", + "@webassemblyjs/utf8": "1.7.6" } }, "@webassemblyjs/wasm-opt": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz", - "integrity": "sha512-IkXSkgzVhQ0QYAdIayuCWMmXSYx0dHGU8Ah/AxJf1gBvstMWVnzJnBwLsXLyD87VSBIcsqkmZ28dVb0mOC3oBg==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz", + "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.5.13", - "@webassemblyjs/helper-buffer": "1.5.13", - "@webassemblyjs/wasm-gen": "1.5.13", - "@webassemblyjs/wasm-parser": "1.5.13", - "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/ast": "1.7.6", + "@webassemblyjs/helper-buffer": "1.7.6", + "@webassemblyjs/wasm-gen": "1.7.6", + "@webassemblyjs/wasm-parser": "1.7.6" } }, "@webassemblyjs/wasm-parser": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz", - "integrity": "sha512-XnYoIcu2iqq8/LrtmdnN3T+bRjqYFjRHqWbqK3osD/0r/Fcv4d9ecRzjVtC29ENEuNTK4mQ9yyxCBCbK8S/cpg==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz", + "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.5.13", - "@webassemblyjs/helper-api-error": "1.5.13", - "@webassemblyjs/helper-wasm-bytecode": "1.5.13", - "@webassemblyjs/ieee754": "1.5.13", - "@webassemblyjs/leb128": "1.5.13", - "@webassemblyjs/utf8": "1.5.13" + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-api-error": "1.7.6", + "@webassemblyjs/helper-wasm-bytecode": "1.7.6", + "@webassemblyjs/ieee754": "1.7.6", + "@webassemblyjs/leb128": "1.7.6", + "@webassemblyjs/utf8": "1.7.6" } }, "@webassemblyjs/wast-parser": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz", - "integrity": "sha512-Lbz65T0LQ1LgzKiUytl34CwuhMNhaCLgrh0JW4rJBN6INnBB8NMwUfQM+FxTnLY9qJ+lHJL/gCM5xYhB9oWi4A==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz", + "integrity": "sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.5.13", - "@webassemblyjs/floating-point-hex-parser": "1.5.13", - "@webassemblyjs/helper-api-error": "1.5.13", - "@webassemblyjs/helper-code-frame": "1.5.13", - "@webassemblyjs/helper-fsm": "1.5.13", - "long": "^3.2.0", + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/floating-point-hex-parser": "1.7.6", + "@webassemblyjs/helper-api-error": "1.7.6", + "@webassemblyjs/helper-code-frame": "1.7.6", + "@webassemblyjs/helper-fsm": "1.7.6", + "@xtuc/long": "4.2.1", "mamacro": "^0.0.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.5.13", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz", - "integrity": "sha512-QcwogrdqcBh8Z+eUF8SG+ag5iwQSXxQJELBEHmLkk790wgQgnIMmntT2sMAMw53GiFNckArf5X0bsCA44j3lWQ==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz", + "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.5.13", - "@webassemblyjs/wast-parser": "1.5.13", - "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 - } + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/wast-parser": "1.7.6", + "@xtuc/long": "4.2.1" } }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "dev": true + }, "acorn": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.2.tgz", - "integrity": "sha512-cJrKCNcr2kv8dlDnbw+JPUGjHZzo4myaxOLmpOX8a+rgX94YeTcTMv/LFJUSByRpc+i4GgVnnhLxvMu/2Y+rqw==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, "acorn-dynamic-import": { @@ -663,9 +585,9 @@ "dev": true }, "binaryen": { - "version": "49.0.0-nightly.20180731", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-49.0.0-nightly.20180731.tgz", - "integrity": "sha512-uZ7bizGTMbEOzIwZmGbXIcGFy8IkZjDoNOy+nPnIv7Dy1MiURItE0PRMnpXO2GPOOq6ZALW8pb5xb9MShD0zQQ==" + "version": "51.0.0", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-51.0.0.tgz", + "integrity": "sha512-Iop30WDVekq1MV2ygWHvL0mzSUQLH7m8VB3DHpU3MTdQoPj8LoRWK4U5b5nAlHLYYU1v/tIkdmiPrGgx8ANSfw==" }, "bluebird": { "version": "3.5.2", @@ -731,7 +653,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -768,7 +690,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -1138,7 +1060,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -1151,7 +1073,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -1296,7 +1218,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -3356,7 +3278,7 @@ }, "parse-asn1": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { @@ -3480,7 +3402,7 @@ }, "public-encrypt": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "resolved": "http://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { @@ -3565,15 +3487,14 @@ } }, "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "rechoir": { @@ -3776,12 +3697,6 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", @@ -3813,7 +3728,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -4609,16 +4524,15 @@ } }, "webpack": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.17.2.tgz", - "integrity": "sha512-hCK8FPco2Paz9FVMlo3ZdVd7Jsr7qxoiEwhd7f4dMaWBLZtc7E+/9QNee4CYHlVSvpmspWBnhFpx4MiWSl3nNg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.18.1.tgz", + "integrity": "sha512-YAKkdiasBy+XJqdxmr00NvL69I6TImnap/3+6YNEkS4lRMAfRCLEmtGWCIB0hGhb+qWDTdTV3C+zTPmctOhJ7Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.5.13", - "@webassemblyjs/helper-module-context": "1.5.13", - "@webassemblyjs/wasm-edit": "1.5.13", - "@webassemblyjs/wasm-opt": "1.5.13", - "@webassemblyjs/wasm-parser": "1.5.13", + "@webassemblyjs/ast": "1.7.6", + "@webassemblyjs/helper-module-context": "1.7.6", + "@webassemblyjs/wasm-edit": "1.7.6", + "@webassemblyjs/wasm-parser": "1.7.6", "acorn": "^5.6.2", "acorn-dynamic-import": "^3.0.0", "ajv": "^6.1.0", @@ -4635,7 +4549,7 @@ "neo-async": "^2.5.0", "node-libs-browser": "^2.0.0", "schema-utils": "^0.4.4", - "tapable": "^1.0.0", + "tapable": "^1.1.0", "uglifyjs-webpack-plugin": "^1.2.4", "watchpack": "^1.5.0", "webpack-sources": "^1.2.0" @@ -4651,6 +4565,12 @@ "memory-fs": "^0.4.0", "tapable": "^1.0.0" } + }, + "tapable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", + "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", + "dev": true } } }, diff --git a/package.json b/package.json index ff434c68..6ed36245 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@protobufjs/utf8": "^1.1.0", - "binaryen": "49.0.0-nightly.20180731", + "binaryen": "^51.0.0", "glob": "^7.1.3", "long": "^4.0.0" }, @@ -26,7 +26,7 @@ "typedoc": "^0.11.1", "typedoc-plugin-external-module-name": "^1.1.3", "typescript": "^3.0.3", - "webpack": "^4.17.2", + "webpack": "^4.18.1", "webpack-cli": "^3.1.0" }, "main": "index.js", diff --git a/src/builtins.ts b/src/builtins.ts index f8ea4ddb..a6f850ab 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -3078,7 +3078,7 @@ export function ensureGCHook( // remember the function index so we don't recurse infinitely var functionTable = compiler.functionTable; var gcHookIndex = functionTable.length; - functionTable.push(0); + functionTable.push(""); classInstance.gcHookIndex = gcHookIndex; // if the class extends a base class, call its hook first (calls mark) @@ -3133,11 +3133,13 @@ export function ensureGCHook( } // add the function to the module and return its table index - functionTable[gcHookIndex] = module.addFunction( - classInstance.internalName + "~gc", + var funcName = classInstance.internalName + "~gc"; + module.addFunction( + funcName, compiler.ensureFunctionType(null, Type.void, options.usizeType), null, module.createBlock(null, body) ); + functionTable[gcHookIndex] = funcName; return gcHookIndex; } diff --git a/src/compiler.ts b/src/compiler.ts index ad1e00fb..c21f72f9 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -286,7 +286,7 @@ export class Compiler extends DiagnosticEmitter { /** Map of already compiled static string segments. */ stringSegments: Map = new Map(); /** Function table being compiled. */ - functionTable: FunctionRef[] = []; + functionTable: string[] = []; /** Argument count helper global. */ argcVar: GlobalRef = 0; /** Argument count helper setter. */ @@ -1474,7 +1474,7 @@ export class Compiler extends DiagnosticEmitter { // insert the trampoline if the function has optional parameters func = this.ensureTrampoline(func); } - functionTable.push(func.ref); + functionTable.push(func.internalName); func.functionTableIndex = index; return index; } diff --git a/src/glue/binaryen.d.ts b/src/glue/binaryen.d.ts index f06abefc..7c3200a6 100644 --- a/src/glue/binaryen.d.ts +++ b/src/glue/binaryen.d.ts @@ -199,10 +199,8 @@ declare function _BinaryenGeFloat64(): BinaryenOp; declare type BinaryenHostOp = BinaryenOp; -declare function _BinaryenPageSize(): BinaryenHostOp; declare function _BinaryenCurrentMemory(): BinaryenHostOp; declare function _BinaryenGrowMemory(): BinaryenHostOp; -declare function _BinaryenHasFeature(): BinaryenHostOp; declare type BinaryenAtomicRMWOp = BinaryenOp; diff --git a/src/module.ts b/src/module.ts index 306a2504..5877dcfd 100644 --- a/src/module.ts +++ b/src/module.ts @@ -204,10 +204,8 @@ export enum BinaryOp { } export enum HostOp { - PageSize = _BinaryenPageSize(), CurrentMemory = _BinaryenCurrentMemory(), GrowMemory = _BinaryenGrowMemory(), - HasFeature = _BinaryenHasFeature(), // see: https://github.com/WebAssembly/bulk-memory-operations // MoveMemory @@ -875,12 +873,18 @@ export class Module { } } - setFunctionTable(funcs: FunctionRef[]): void { - var cArr = allocPtrArray(funcs); + setFunctionTable(funcs: string[]): void { + var numNames = funcs.length; + var names = new Array(numNames); + for (let i = 0; i < numNames; ++i) { + names[i] = allocString(funcs[i]); + } + var cArr = allocI32Array(names); try { - _BinaryenSetFunctionTable(this.ref, cArr, funcs.length); + _BinaryenSetFunctionTable(this.ref, cArr, numNames); } finally { memory.free(cArr); + for (let i = numNames; i >= 0; --i) memory.free(names[i]); } } diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index 2b586e66..4fb97653 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -1,9 +1,7 @@ (module - (type $FFF (func (param f64 f64) (result f64))) - (type $FiF (func (param f64 i32) (result f64))) - (type $fff (func (param f32 f32) (result f32))) - (type $fif (func (param f32 i32) (result f32))) (type $v (func)) + (type $FUNCSIG$dd (func (param f64) (result f64))) + (type $FUNCSIG$ff (func (param f32) (result f32))) (global $binary/b (mut i32) (i32.const 0)) (global $binary/i (mut i32) (i32.const 0)) (global $binary/I (mut i64) (i64.const 0)) @@ -12,178 +10,32 @@ (memory $0 0) (export "memory" (memory $0)) (start $start) - (func $~lib/math/NativeMath.scalbn (; 0 ;) (; has Stack IR ;) (type $FiF) (param $0 f64) (param $1 i32) (result f64) - (local $2 f64) - (set_local $2 - (get_local $0) - ) - (if - (i32.gt_s - (get_local $1) - (i32.const 1023) - ) - (block - (set_local $2 - (f64.mul - (get_local $2) - (f64.const 8988465674311579538646525e283) - ) - ) - (if - (i32.gt_s - (tee_local $1 - (i32.sub - (get_local $1) - (i32.const 1023) - ) - ) - (i32.const 1023) - ) - (block - (set_local $2 - (f64.mul - (get_local $2) - (f64.const 8988465674311579538646525e283) - ) - ) - (if - (i32.gt_s - (tee_local $1 - (i32.sub - (get_local $1) - (i32.const 1023) - ) - ) - (i32.const 1023) - ) - (set_local $1 - (i32.const 1023) - ) + (func $~lib/math/NativeMath.pow (; 0 ;) (; has Stack IR ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) + (local $1 i32) + (local $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $folding-inner0 (result f64) + (set_local $3 + (i32.wrap/i64 + (tee_local $2 + (i64.reinterpret/f64 + (get_local $0) ) ) ) ) (if - (i32.lt_s - (get_local $1) - (i32.const -1022) - ) - (block - (set_local $2 - (f64.mul - (get_local $2) - (f64.const 2.2250738585072014e-308) - ) - ) - (if - (i32.lt_s - (tee_local $1 - (i32.add - (get_local $1) - (i32.const 1022) - ) - ) - (i32.const -1022) - ) - (block - (set_local $2 - (f64.mul - (get_local $2) - (f64.const 2.2250738585072014e-308) - ) - ) - (if - (i32.lt_s - (tee_local $1 - (i32.add - (get_local $1) - (i32.const 1022) - ) - ) - (i32.const -1022) - ) - (set_local $1 - (i32.const -1022) - ) - ) - ) - ) - ) - ) - ) - (f64.mul - (get_local $2) - (f64.reinterpret/i64 - (i64.shl - (i64.add - (i64.extend_s/i32 - (get_local $1) - ) - (i64.const 1023) - ) - (i64.const 52) - ) - ) - ) - ) - (func $~lib/math/NativeMath.pow (; 1 ;) (; has Stack IR ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64) - (local $2 f64) - (local $3 f64) - (local $4 i32) - (local $5 i32) - (local $6 f64) - (local $7 i32) - (local $8 i32) - (local $9 f64) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 f64) - (local $14 f64) - (local $15 i32) - (local $16 f64) - (local $17 i64) - (local $18 i32) - (local $19 i32) - (local $20 f64) - (block $folding-inner1 - (block $folding-inner0 - (set_local $18 - (i32.wrap/i64 - (i64.shr_u - (tee_local $17 - (i64.reinterpret/f64 - (get_local $0) - ) - ) - (i64.const 32) - ) - ) - ) - (set_local $7 - (i32.wrap/i64 - (get_local $17) - ) - ) - (set_local $5 - (i32.and - (get_local $18) - (i32.const 2147483647) - ) - ) - (if - (i32.eqz - (i32.or - (tee_local $11 + (i32.eqz + (tee_local $1 + (i32.gt_s + (tee_local $5 (i32.and - (tee_local $12 + (tee_local $4 (i32.wrap/i64 (i64.shr_u - (tee_local $17 - (i64.reinterpret/f64 - (get_local $1) - ) - ) + (get_local $2) (i64.const 32) ) ) @@ -191,1440 +43,83 @@ (i32.const 2147483647) ) ) - (tee_local $19 - (i32.wrap/i64 - (get_local $17) - ) - ) - ) - ) - (return - (f64.const 1) - ) - ) - (if - (i32.eqz - (tee_local $4 - (i32.gt_s - (get_local $5) - (i32.const 2146435072) - ) - ) - ) - (if - (tee_local $4 - (i32.eq - (get_local $5) - (i32.const 2146435072) - ) - ) - (set_local $4 - (i32.ne - (get_local $7) - (i32.const 0) - ) - ) - ) - ) - (if - (i32.eqz - (get_local $4) - ) - (set_local $4 - (i32.gt_s - (get_local $11) (i32.const 2146435072) ) ) ) (if - (i32.eqz - (get_local $4) - ) - (if - (tee_local $4 - (i32.eq - (get_local $11) - (i32.const 2146435072) - ) + (tee_local $1 + (i32.eq + (get_local $5) + (i32.const 2146435072) ) - (set_local $4 - (i32.ne - (get_local $19) - (i32.const 0) - ) + ) + (set_local $1 + (i32.ne + (get_local $3) + (i32.const 0) ) ) ) - (if - (get_local $4) - (return - (f64.add - (get_local $0) - (get_local $1) - ) - ) + ) + (if + (i32.eqz + (get_local $1) ) - (if - (i32.lt_s - (get_local $18) - (i32.const 0) - ) - (if - (i32.ge_s - (get_local $11) - (i32.const 1128267776) - ) - (set_local $15 - (i32.const 2) - ) - (if - (i32.ge_s - (get_local $11) - (i32.const 1072693248) - ) - (if - (i32.gt_s - (tee_local $10 - (i32.sub - (i32.shr_s - (get_local $11) - (i32.const 20) - ) - (i32.const 1023) - ) - ) - (i32.const 20) - ) - (if - (i32.eq - (i32.shl - (tee_local $4 - (i32.shr_u - (get_local $19) - (tee_local $8 - (i32.sub - (i32.const 52) - (get_local $10) - ) - ) - ) - ) - (get_local $8) - ) - (get_local $19) - ) - (set_local $15 - (i32.sub - (i32.const 2) - (i32.and - (get_local $4) - (i32.const 1) - ) - ) - ) - ) - (if - (i32.eqz - (get_local $19) - ) - (if - (i32.eq - (i32.shl - (tee_local $4 - (i32.shr_s - (get_local $11) - (tee_local $8 - (i32.sub - (i32.const 20) - (get_local $10) - ) - ) - ) - ) - (get_local $8) - ) - (get_local $11) - ) - (set_local $15 - (i32.sub - (i32.const 2) - (i32.and - (get_local $4) - (i32.const 1) - ) - ) - ) - ) - ) - ) - ) - ) - ) - (if - (i32.eqz - (get_local $19) - ) - (block - (if - (i32.eq - (get_local $11) - (i32.const 2146435072) - ) - (if - (i32.or - (i32.sub - (get_local $5) - (i32.const 1072693248) - ) - (get_local $7) - ) - (if - (i32.ge_s - (get_local $5) - (i32.const 1072693248) - ) - (block - (if - (i32.lt_s - (get_local $12) - (i32.const 0) - ) - (set_local $1 - (f64.const 0) - ) - ) - (return - (get_local $1) - ) - ) - (return - (tee_local $0 - (if (result f64) - (i32.ge_s - (get_local $12) - (i32.const 0) - ) - (f64.const 0) - (f64.neg - (get_local $1) - ) - ) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - ) - (if - (i32.eq - (get_local $11) - (i32.const 1072693248) - ) - (block - (if - (i32.ge_s - (get_local $12) - (i32.const 0) - ) - (return - (get_local $0) - ) - ) - (return - (f64.div - (f64.const 1) - (get_local $0) - ) - ) - ) - ) - (if - (i32.eq - (get_local $12) - (i32.const 1073741824) - ) - (return - (f64.mul - (get_local $0) - (get_local $0) - ) - ) - ) - (if - (i32.eq - (get_local $12) - (i32.const 1071644672) - ) - (if - (i32.ge_s - (get_local $18) - (i32.const 0) - ) - (return - (f64.sqrt - (get_local $0) - ) - ) - ) - ) - ) - ) - (set_local $2 - (f64.abs - (get_local $0) - ) - ) - (if - (i32.eqz - (get_local $7) - ) - (block - (if - (i32.eqz - (tee_local $4 - (i32.eq - (get_local $5) - (i32.const 2146435072) - ) - ) - ) - (set_local $4 - (i32.eqz - (get_local $5) - ) - ) - ) - (if - (i32.eqz - (get_local $4) - ) - (set_local $4 - (i32.eq - (get_local $5) - (i32.const 1072693248) - ) - ) - ) - (if - (get_local $4) - (block - (if - (i32.lt_s - (get_local $12) - (i32.const 0) - ) - (set_local $2 - (f64.div - (f64.const 1) - (get_local $2) - ) - ) - ) - (if - (i32.lt_s - (get_local $18) - (i32.const 0) - ) - (if - (i32.or - (i32.sub - (get_local $5) - (i32.const 1072693248) - ) - (get_local $15) - ) - (if - (i32.eq - (get_local $15) - (i32.const 1) - ) - (set_local $2 - (f64.neg - (get_local $2) - ) - ) - ) - (set_local $2 - (f64.div - (tee_local $0 - (f64.sub - (get_local $2) - (get_local $2) - ) - ) - (get_local $0) - ) - ) - ) - ) - (return - (get_local $2) - ) - ) - ) - ) - ) - (set_local $13 - (f64.const 1) - ) - (if - (i32.lt_s - (get_local $18) - (i32.const 0) - ) - (block - (if - (i32.eqz - (get_local $15) - ) - (return - (f64.div - (tee_local $0 - (f64.sub - (get_local $0) - (get_local $0) - ) - ) - (get_local $0) - ) - ) - ) - (if - (i32.eq - (get_local $15) - (i32.const 1) - ) - (set_local $13 - (f64.const -1) - ) - ) - ) - ) - (set_local $2 - (if (result f64) - (i32.gt_s - (get_local $11) - (i32.const 1105199104) - ) - (block (result f64) - (if - (i32.gt_s - (get_local $11) - (i32.const 1139802112) - ) - (block - (if - (i32.le_s - (get_local $5) - (i32.const 1072693247) - ) - (return - (tee_local $0 - (if (result f64) - (i32.lt_s - (get_local $12) - (i32.const 0) - ) - (f64.const inf) - (f64.const 0) - ) - ) - ) - ) - (if - (i32.ge_s - (get_local $5) - (i32.const 1072693248) - ) - (return - (tee_local $0 - (if (result f64) - (i32.gt_s - (get_local $12) - (i32.const 0) - ) - (f64.const inf) - (f64.const 0) - ) - ) - ) - ) - ) - ) - (if - (i32.lt_s - (get_local $5) - (i32.const 1072693247) - ) - (return - (tee_local $0 - (if (result f64) - (i32.lt_s - (get_local $12) - (i32.const 0) - ) - (f64.mul - (f64.mul - (get_local $13) - (f64.const 1.e+300) - ) - (f64.const 1.e+300) - ) - (f64.mul - (f64.mul - (get_local $13) - (f64.const 1e-300) - ) - (f64.const 1e-300) - ) - ) - ) - ) - ) - (if - (i32.gt_s - (get_local $5) - (i32.const 1072693248) - ) - (return - (tee_local $0 - (if (result f64) - (i32.gt_s - (get_local $12) - (i32.const 0) - ) - (f64.mul - (f64.mul - (get_local $13) - (f64.const 1.e+300) - ) - (f64.const 1.e+300) - ) - (f64.mul - (f64.mul - (get_local $13) - (f64.const 1e-300) - ) - (f64.const 1e-300) - ) - ) - ) - ) - ) - (set_local $0 - (f64.mul - (f64.mul - (tee_local $3 - (f64.sub - (get_local $2) - (f64.const 1) - ) - ) - (get_local $3) - ) - (f64.sub - (f64.const 0.5) - (f64.mul - (get_local $3) - (f64.sub - (f64.const 0.3333333333333333) - (f64.mul - (get_local $3) - (f64.const 0.25) - ) - ) - ) - ) - ) - ) - (set_local $9 - (f64.add - (tee_local $16 - (f64.mul - (f64.const 1.4426950216293335) - (get_local $3) - ) - ) - (tee_local $6 - (f64.sub - (f64.mul - (get_local $3) - (f64.const 1.9259629911266175e-08) - ) - (f64.mul - (get_local $0) - (f64.const 1.4426950408889634) - ) - ) - ) - ) - ) - (f64.sub - (get_local $6) - (f64.sub - (tee_local $9 - (f64.reinterpret/i64 - (i64.and - (i64.reinterpret/f64 - (get_local $9) - ) - (i64.const -4294967296) - ) - ) - ) - (get_local $16) - ) - ) - ) - (block (result f64) - (set_local $7 - (i32.const 0) - ) - (if - (i32.lt_s - (get_local $5) - (i32.const 1048576) - ) - (block - (set_local $7 - (i32.const -53) - ) - (set_local $5 - (i32.wrap/i64 - (i64.shr_u - (i64.reinterpret/f64 - (tee_local $2 - (f64.mul - (get_local $2) - (f64.const 9007199254740992) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - (set_local $7 - (i32.add - (get_local $7) - (i32.sub - (i32.shr_s - (get_local $5) - (i32.const 20) - ) - (i32.const 1023) - ) - ) - ) - (set_local $5 - (i32.or - (tee_local $8 - (i32.and - (get_local $5) - (i32.const 1048575) - ) - ) - (i32.const 1072693248) - ) - ) - (set_local $10 - (if (result i32) - (i32.le_s - (get_local $8) - (i32.const 235662) - ) - (i32.const 0) - (if (result i32) - (i32.lt_s - (get_local $8) - (i32.const 767610) - ) - (i32.const 1) - (block (result i32) - (set_local $7 - (i32.add - (get_local $7) - (i32.const 1) - ) - ) - (set_local $5 - (i32.add - (get_local $5) - (i32.const -1048576) - ) - ) - (i32.const 0) - ) - ) - ) - ) - (set_local $9 - (f64.mul - (tee_local $16 - (f64.sub - (tee_local $2 - (f64.reinterpret/i64 - (i64.or - (i64.and - (i64.reinterpret/f64 - (get_local $2) - ) - (i64.const 4294967295) - ) - (i64.shl - (i64.extend_s/i32 - (get_local $5) - ) - (i64.const 32) - ) - ) - ) - ) - (tee_local $0 - (select - (f64.const 1.5) - (f64.const 1) - (get_local $10) - ) - ) - ) - ) - (tee_local $6 - (f64.div - (f64.const 1) - (f64.add - (get_local $2) - (get_local $0) - ) - ) - ) - ) - ) - (set_local $2 - (f64.sub - (get_local $2) - (f64.sub - (tee_local $3 - (f64.reinterpret/i64 - (i64.shl - (i64.extend_s/i32 - (i32.add - (i32.add - (i32.or - (i32.shr_s - (get_local $5) - (i32.const 1) - ) - (i32.const 536870912) - ) - (i32.const 524288) - ) - (i32.shl - (get_local $10) - (i32.const 18) - ) - ) - ) - (i64.const 32) - ) - ) - ) - (get_local $0) - ) - ) - ) - (set_local $20 - (f64.mul - (f64.mul - (tee_local $14 - (f64.mul - (get_local $9) - (get_local $9) - ) - ) - (get_local $14) - ) - (f64.add - (f64.const 0.5999999999999946) - (f64.mul - (get_local $14) - (f64.add - (f64.const 0.4285714285785502) - (f64.mul - (get_local $14) - (f64.add - (f64.const 0.33333332981837743) - (f64.mul - (get_local $14) - (f64.add - (f64.const 0.272728123808534) - (f64.mul - (get_local $14) - (f64.add - (f64.const 0.23066074577556175) - (f64.mul - (get_local $14) - (f64.const 0.20697501780033842) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - (set_local $0 - (f64.mul - (get_local $6) - (f64.sub - (f64.sub - (get_local $16) - (f64.mul - (tee_local $6 - (f64.reinterpret/i64 - (i64.and - (i64.reinterpret/f64 - (get_local $9) - ) - (i64.const -4294967296) - ) - ) - ) - (get_local $3) - ) - ) - (f64.mul - (get_local $6) - (get_local $2) - ) - ) - ) - ) - (set_local $3 - (f64.add - (f64.add - (f64.const 3) - (tee_local $14 - (f64.mul - (get_local $6) - (get_local $6) - ) - ) - ) - (tee_local $20 - (f64.add - (get_local $20) - (f64.mul - (get_local $0) - (f64.add - (get_local $6) - (get_local $9) - ) - ) - ) - ) - ) - ) - (set_local $2 - (f64.sub - (get_local $20) - (f64.sub - (f64.sub - (tee_local $3 - (f64.reinterpret/i64 - (i64.and - (i64.reinterpret/f64 - (get_local $3) - ) - (i64.const -4294967296) - ) - ) - ) - (f64.const 3) - ) - (get_local $14) - ) - ) - ) - (set_local $0 - (f64.add - (tee_local $16 - (f64.mul - (get_local $6) - (get_local $3) - ) - ) - (tee_local $6 - (f64.add - (f64.mul - (get_local $0) - (get_local $3) - ) - (f64.mul - (get_local $2) - (get_local $9) - ) - ) - ) - ) - ) - (set_local $6 - (f64.sub - (get_local $6) - (f64.sub - (tee_local $0 - (f64.reinterpret/i64 - (i64.and - (i64.reinterpret/f64 - (get_local $0) - ) - (i64.const -4294967296) - ) - ) - ) - (get_local $16) - ) - ) - ) - (set_local $9 - (f64.add - (f64.add - (f64.add - (tee_local $20 - (f64.mul - (f64.const 0.9617967009544373) - (get_local $0) - ) - ) - (tee_local $2 - (f64.add - (f64.add - (f64.mul - (f64.const -7.028461650952758e-09) - (get_local $0) - ) - (f64.mul - (get_local $6) - (f64.const 0.9617966939259756) - ) - ) - (select - (f64.const 1.350039202129749e-08) - (f64.const 0) - (get_local $10) - ) - ) - ) - ) - (tee_local $0 - (select - (f64.const 0.5849624872207642) - (f64.const 0) - (get_local $10) - ) - ) - ) - (tee_local $3 - (f64.convert_s/i32 - (get_local $7) - ) - ) - ) - ) - (f64.sub - (get_local $2) - (f64.sub - (f64.sub - (f64.sub - (tee_local $9 - (f64.reinterpret/i64 - (i64.and - (i64.reinterpret/f64 - (get_local $9) - ) - (i64.const -4294967296) - ) - ) - ) - (get_local $3) - ) - (get_local $0) - ) - (get_local $20) - ) - ) - ) - ) - ) - (set_local $4 - (i32.wrap/i64 - (tee_local $17 - (i64.reinterpret/f64 - (tee_local $2 - (f64.add - (tee_local $6 - (f64.add - (f64.mul - (f64.sub - (get_local $1) - (tee_local $0 - (f64.reinterpret/i64 - (i64.and - (i64.reinterpret/f64 - (get_local $1) - ) - (i64.const -4294967296) - ) - ) - ) - ) - (get_local $9) - ) - (f64.mul - (get_local $1) - (get_local $2) - ) - ) - ) - (tee_local $0 - (f64.mul - (get_local $0) - (get_local $9) - ) - ) - ) - ) - ) - ) - ) - ) - (if - (i32.ge_s - (tee_local $8 - (i32.wrap/i64 - (i64.shr_u - (get_local $17) - (i64.const 32) - ) - ) - ) - (i32.const 1083179008) - ) - (block - (br_if $folding-inner1 - (i32.or - (i32.sub - (get_local $8) - (i32.const 1083179008) - ) - (get_local $4) - ) - ) - (br_if $folding-inner1 - (f64.gt - (f64.add - (get_local $6) - (f64.const 8.008566259537294e-17) - ) - (f64.sub - (get_local $2) - (get_local $0) - ) - ) - ) - ) - (if - (i32.ge_s - (i32.and - (get_local $8) - (i32.const 2147483647) - ) - (i32.const 1083231232) - ) - (block - (br_if $folding-inner0 - (i32.or - (i32.sub - (get_local $8) - (i32.const -1064252416) - ) - (get_local $4) - ) - ) - (br_if $folding-inner0 - (f64.le - (get_local $6) - (f64.sub - (get_local $2) - (get_local $0) - ) - ) - ) - ) - ) - ) - (set_local $10 - (i32.sub - (i32.shr_s - (tee_local $4 - (i32.and - (get_local $8) - (i32.const 2147483647) - ) - ) - (i32.const 20) - ) - (i32.const 1023) - ) - ) - (set_local $7 + (set_local $1 (i32.const 0) ) - (if - (i32.gt_s - (get_local $4) - (i32.const 1071644672) - ) - (block - (set_local $10 - (i32.sub - (i32.shr_s - (i32.and - (tee_local $7 - (i32.add - (get_local $8) - (i32.shr_s - (i32.const 1048576) - (i32.add - (get_local $10) - (i32.const 1) - ) - ) - ) - ) - (i32.const 2147483647) - ) - (i32.const 20) - ) - (i32.const 1023) - ) - ) - (set_local $3 - (f64.reinterpret/i64 - (i64.shl - (i64.extend_s/i32 - (i32.and - (get_local $7) - (i32.xor - (i32.shr_s - (i32.const 1048575) - (get_local $10) - ) - (i32.const -1) - ) - ) - ) - (i64.const 32) - ) - ) - ) - (set_local $7 - (i32.shr_s - (i32.or - (i32.and - (get_local $7) - (i32.const 1048575) - ) - (i32.const 1048576) - ) - (i32.sub - (i32.const 20) - (get_local $10) - ) - ) - ) - (if - (i32.lt_s - (get_local $8) - (i32.const 0) - ) - (set_local $7 - (i32.sub - (i32.const 0) - (get_local $7) - ) - ) - ) - (set_local $0 - (f64.sub - (get_local $0) - (get_local $3) - ) - ) - ) + ) + (if + (i32.eqz + (get_local $1) ) - (set_local $3 - (f64.mul - (tee_local $2 - (f64.add - (tee_local $16 - (f64.mul - (tee_local $3 - (f64.reinterpret/i64 - (i64.and - (i64.reinterpret/f64 - (f64.add - (get_local $6) - (get_local $0) - ) - ) - (i64.const -4294967296) - ) - ) - ) - (f64.const 0.6931471824645996) - ) - ) - (tee_local $6 - (f64.add - (f64.mul - (f64.sub - (get_local $6) - (f64.sub - (get_local $3) - (get_local $0) - ) - ) - (f64.const 0.6931471805599453) - ) - (f64.mul - (get_local $3) - (f64.const -1.904654299957768e-09) - ) - ) - ) - ) - ) - (get_local $2) - ) + (set_local $1 + (i32.const 0) ) + ) + (if + (get_local $1) (return - (f64.mul - (get_local $13) - (tee_local $2 - (if (result f64) - (i32.le_s - (i32.shr_s - (tee_local $8 - (i32.add - (i32.wrap/i64 - (i64.shr_u - (i64.reinterpret/f64 - (tee_local $2 - (f64.sub - (f64.const 1) - (f64.sub - (f64.sub - (f64.div - (f64.mul - (get_local $2) - (tee_local $9 - (f64.sub - (get_local $2) - (f64.mul - (get_local $3) - (f64.add - (f64.const 0.16666666666666602) - (f64.mul - (get_local $3) - (f64.add - (f64.const -2.7777777777015593e-03) - (f64.mul - (get_local $3) - (f64.add - (f64.const 6.613756321437934e-05) - (f64.mul - (get_local $3) - (f64.add - (f64.const -1.6533902205465252e-06) - (f64.mul - (get_local $3) - (f64.const 4.1381367970572385e-08) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - (f64.sub - (get_local $9) - (f64.const 2) - ) - ) - (f64.add - (tee_local $0 - (f64.sub - (get_local $6) - (f64.sub - (get_local $2) - (get_local $16) - ) - ) - ) - (f64.mul - (get_local $2) - (get_local $0) - ) - ) - ) - (get_local $2) - ) - ) - ) - ) - (i64.const 32) - ) - ) - (i32.shl - (get_local $7) - (i32.const 20) - ) - ) - ) - (i32.const 20) - ) - (i32.const 0) - ) - (call $~lib/math/NativeMath.scalbn - (get_local $2) - (get_local $7) - ) - (f64.reinterpret/i64 - (i64.or - (i64.and - (i64.reinterpret/f64 - (get_local $2) - ) - (i64.const 4294967295) - ) - (i64.shl - (i64.extend_s/i32 - (get_local $8) - ) - (i64.const 32) - ) - ) - ) - ) - ) + (f64.add + (get_local $0) + (f64.const 1) ) ) ) - (return - (f64.mul - (f64.mul - (get_local $13) - (f64.const 1e-300) - ) - (f64.const 1e-300) - ) - ) - ) - (f64.mul - (f64.mul - (get_local $13) - (f64.const 1.e+300) - ) - (f64.const 1.e+300) + (get_local $0) ) ) - (func $~lib/math/NativeMathf.mod (; 2 ;) (; has Stack IR ;) (type $fff) (param $0 f32) (param $1 f32) (result f32) + (func $~lib/math/NativeMathf.mod (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) (block $folding-inner0 + (set_local $3 + (i32.eq + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.reinterpret/f32 + (get_local $0) + ) + ) + (i32.const 23) + ) + (i32.const 255) + ) + ) + (i32.const 255) + ) + ) (set_local $4 (i32.and - (i32.shr_u - (tee_local $2 - (i32.reinterpret/f32 - (get_local $0) - ) - ) - (i32.const 23) - ) - (i32.const 255) - ) - ) - (set_local $6 - (i32.and - (i32.shr_u - (tee_local $5 - (i32.reinterpret/f32 - (get_local $1) - ) - ) - (i32.const 23) - ) - (i32.const 255) - ) - ) - (set_local $7 - (i32.and - (get_local $2) + (get_local $1) (i32.const -2147483648) ) ) - (if - (i32.eqz - (tee_local $3 - (i32.eqz - (i32.shl - (get_local $5) - (i32.const 1) - ) - ) - ) - ) - (set_local $3 - (f32.ne - (get_local $1) - (get_local $1) - ) - ) - ) - (if - (i32.eqz - (i32.and - (get_local $3) - (i32.const 1) - ) - ) - (set_local $3 - (i32.eq - (get_local $4) - (i32.const 255) - ) - ) - ) (if (i32.and (get_local $3) @@ -1632,12 +127,7 @@ ) (return (f32.div - (tee_local $0 - (f32.mul - (get_local $0) - (get_local $1) - ) - ) + (get_local $0) (get_local $0) ) ) @@ -1645,25 +135,19 @@ (if (i32.le_u (i32.shl - (get_local $2) - (i32.const 1) - ) - (i32.shl - (get_local $5) + (get_local $1) (i32.const 1) ) + (i32.const 2130706432) ) (block (br_if $folding-inner0 (i32.eq (i32.shl - (get_local $2) - (i32.const 1) - ) - (i32.shl - (get_local $5) + (get_local $1) (i32.const 1) ) + (i32.const 2130706432) ) ) (return @@ -1671,12 +155,12 @@ ) ) ) - (set_local $2 + (set_local $1 (if (result i32) - (get_local $4) + (get_local $2) (i32.or (i32.and - (get_local $2) + (get_local $1) (i32.const 8388607) ) (i32.const 8388608) @@ -1685,7 +169,7 @@ (block $break|0 (set_local $3 (i32.shl - (get_local $2) + (get_local $1) (i32.const 9) ) ) @@ -1696,9 +180,9 @@ (i32.const 31) ) ) - (set_local $4 + (set_local $2 (i32.sub - (get_local $4) + (get_local $2) (i32.const 1) ) ) @@ -1712,60 +196,10 @@ ) ) (i32.shl - (get_local $2) + (get_local $1) (i32.sub (i32.const 1) - (get_local $4) - ) - ) - ) - ) - ) - (set_local $5 - (if (result i32) - (get_local $6) - (i32.or - (i32.and - (get_local $5) - (i32.const 8388607) - ) - (i32.const 8388608) - ) - (block (result i32) - (block $break|1 - (set_local $3 - (i32.shl - (get_local $5) - (i32.const 9) - ) - ) - (loop $repeat|1 - (br_if $break|1 - (i32.shr_u - (get_local $3) - (i32.const 31) - ) - ) - (set_local $6 - (i32.sub - (get_local $6) - (i32.const 1) - ) - ) - (set_local $3 - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) - (br $repeat|1) - ) - ) - (i32.shl - (get_local $5) - (i32.sub - (i32.const 1) - (get_local $6) + (get_local $2) ) ) ) @@ -1775,8 +209,8 @@ (loop $repeat|2 (br_if $break|2 (i32.le_s - (get_local $4) - (get_local $6) + (get_local $2) + (i32.const 127) ) ) (if @@ -1784,8 +218,8 @@ (i32.shr_u (tee_local $3 (i32.sub - (get_local $2) - (get_local $5) + (get_local $1) + (i32.const 8388608) ) ) (i32.const 31) @@ -1797,20 +231,20 @@ (get_local $3) ) ) - (set_local $2 + (set_local $1 (get_local $3) ) ) ) - (set_local $2 + (set_local $1 (i32.shl - (get_local $2) + (get_local $1) (i32.const 1) ) ) - (set_local $4 + (set_local $2 (i32.sub - (get_local $4) + (get_local $2) (i32.const 1) ) ) @@ -1822,8 +256,8 @@ (i32.shr_u (tee_local $3 (i32.sub - (get_local $2) - (get_local $5) + (get_local $1) + (i32.const 8388608) ) ) (i32.const 31) @@ -1835,7 +269,7 @@ (get_local $3) ) ) - (set_local $2 + (set_local $1 (get_local $3) ) ) @@ -1844,19 +278,19 @@ (loop $repeat|3 (br_if $break|3 (i32.shr_u - (get_local $2) + (get_local $1) (i32.const 23) ) ) - (set_local $4 + (set_local $2 (i32.sub - (get_local $4) + (get_local $2) (i32.const 1) ) ) - (set_local $2 + (set_local $1 (i32.shl - (get_local $2) + (get_local $1) (i32.const 1) ) ) @@ -1866,32 +300,32 @@ (return (f32.reinterpret/i32 (i32.or - (tee_local $2 + (tee_local $1 (if (result i32) (i32.gt_s - (get_local $4) + (get_local $2) (i32.const 0) ) (i32.or (i32.sub - (get_local $2) + (get_local $1) (i32.const 8388608) ) (i32.shl - (get_local $4) + (get_local $2) (i32.const 23) ) ) (i32.shr_u - (get_local $2) + (get_local $1) (i32.sub (i32.const 1) - (get_local $4) + (get_local $2) ) ) ) ) - (get_local $7) + (get_local $4) ) ) ) @@ -1901,1319 +335,53 @@ (get_local $0) ) ) - (func $~lib/math/NativeMathf.scalbn (; 3 ;) (; has Stack IR ;) (type $fif) (param $0 f32) (param $1 i32) (result f32) - (local $2 f32) - (set_local $2 - (get_local $0) - ) - (if - (i32.gt_s - (get_local $1) - (i32.const 127) - ) - (block - (set_local $2 - (f32.mul - (get_local $2) - (f32.const 1701411834604692317316873e14) - ) - ) - (if - (i32.gt_s - (tee_local $1 - (i32.sub - (get_local $1) - (i32.const 127) - ) - ) - (i32.const 127) - ) - (block - (set_local $2 - (f32.mul - (get_local $2) - (f32.const 1701411834604692317316873e14) - ) - ) - (if - (i32.gt_s - (tee_local $1 - (i32.sub - (get_local $1) - (i32.const 127) - ) - ) - (i32.const 127) - ) - (set_local $1 - (i32.const 127) - ) - ) - ) - ) - ) + (func $~lib/math/NativeMathf.pow (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$ff) (param $0 f32) (result f32) + (local $1 i32) + (local $2 i32) + (block $folding-inner0 (result f32) (if - (i32.lt_s - (get_local $1) - (i32.const -126) - ) - (block - (set_local $2 - (f32.mul - (get_local $2) - (f32.const 1.1754943508222875e-38) - ) - ) - (if - (i32.lt_s - (tee_local $1 - (i32.add - (get_local $1) - (i32.const 126) - ) - ) - (i32.const -126) - ) - (block - (set_local $2 - (f32.mul - (get_local $2) - (f32.const 1.1754943508222875e-38) - ) - ) - (if - (i32.lt_s - (tee_local $1 - (i32.add - (get_local $1) - (i32.const 126) - ) - ) - (i32.const -126) - ) - (set_local $1 - (i32.const -126) - ) - ) - ) - ) - ) - ) - ) - (f32.mul - (get_local $2) - (f32.reinterpret/i32 - (i32.shl - (i32.add - (get_local $1) - (i32.const 127) - ) - (i32.const 23) - ) - ) - ) - ) - (func $~lib/math/NativeMathf.pow (; 4 ;) (; has Stack IR ;) (type $fff) (param $0 f32) (param $1 f32) (result f32) - (local $2 f32) - (local $3 f32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 f32) - (local $10 f32) - (local $11 f32) - (local $12 i32) - (local $13 i32) - (local $14 f32) - (local $15 f32) - (local $16 f32) - (local $17 f32) - (block $folding-inner1 - (block $folding-inner0 - (set_local $6 - (i32.and - (tee_local $7 - (i32.reinterpret/f32 - (get_local $0) - ) - ) - (i32.const 2147483647) - ) - ) - (if - (i32.eqz - (tee_local $12 + (i32.eqz + (tee_local $1 + (i32.gt_s (i32.and - (tee_local $13 + (tee_local $2 (i32.reinterpret/f32 - (get_local $1) + (get_local $0) ) ) (i32.const 2147483647) ) - ) - ) - (return - (f32.const 1) - ) - ) - (if - (i32.eqz - (tee_local $5 - (i32.gt_s - (get_local $6) - (i32.const 2139095040) - ) - ) - ) - (set_local $5 - (i32.gt_s - (get_local $12) (i32.const 2139095040) ) ) ) - (if - (get_local $5) - (return - (f32.add - (get_local $0) - (get_local $1) - ) - ) - ) - (if - (i32.lt_s - (get_local $7) - (i32.const 0) - ) - (if - (i32.ge_s - (get_local $12) - (i32.const 1266679808) - ) - (set_local $4 - (i32.const 2) - ) - (if - (i32.ge_s - (get_local $12) - (i32.const 1065353216) - ) - (if - (i32.eq - (i32.shl - (tee_local $8 - (i32.shr_s - (get_local $12) - (tee_local $5 - (i32.sub - (i32.const 150) - (i32.shr_s - (get_local $12) - (i32.const 23) - ) - ) - ) - ) - ) - (get_local $5) - ) - (get_local $12) - ) - (set_local $4 - (i32.sub - (i32.const 2) - (i32.and - (get_local $8) - (i32.const 1) - ) - ) - ) - ) - ) - ) - ) - (if - (i32.eq - (get_local $12) - (i32.const 2139095040) - ) - (if - (i32.eq - (get_local $6) - (i32.const 1065353216) - ) - (return - (f32.const nan:0x400000) - ) - (if - (i32.gt_s - (get_local $6) - (i32.const 1065353216) - ) - (block - (if - (i32.lt_s - (get_local $13) - (i32.const 0) - ) - (set_local $1 - (f32.const 0) - ) - ) - (return - (get_local $1) - ) - ) - (return - (tee_local $0 - (if (result f32) - (i32.ge_s - (get_local $13) - (i32.const 0) - ) - (f32.const 0) - (f32.neg - (get_local $1) - ) - ) - ) - ) - ) - ) - ) - (if - (i32.eq - (get_local $12) - (i32.const 1065353216) - ) - (block - (if - (i32.lt_s - (get_local $13) - (i32.const 0) - ) - (set_local $0 - (f32.div - (f32.const 1) - (get_local $0) - ) - ) - ) - (return - (get_local $0) - ) - ) - ) - (if - (i32.eq - (get_local $13) - (i32.const 1073741824) - ) - (return - (f32.mul - (get_local $0) - (get_local $0) - ) - ) - ) - (if - (i32.eq - (get_local $13) - (i32.const 1056964608) - ) - (if - (i32.ge_s - (get_local $7) - (i32.const 0) - ) - (return - (f32.sqrt - (get_local $0) - ) - ) - ) - ) - (set_local $2 - (f32.abs - (get_local $0) - ) - ) - (if - (i32.eqz - (tee_local $5 - (i32.eq - (get_local $6) - (i32.const 2139095040) - ) - ) - ) - (set_local $5 - (i32.eqz - (get_local $6) - ) - ) - ) - (if - (i32.eqz - (get_local $5) - ) - (set_local $5 - (i32.eq - (get_local $6) - (i32.const 1065353216) - ) - ) - ) - (if - (get_local $5) - (block - (if - (i32.lt_s - (get_local $13) - (i32.const 0) - ) - (set_local $2 - (f32.div - (f32.const 1) - (get_local $2) - ) - ) - ) - (if - (i32.lt_s - (get_local $7) - (i32.const 0) - ) - (if - (i32.or - (i32.sub - (get_local $6) - (i32.const 1065353216) - ) - (get_local $4) - ) - (if - (i32.eq - (get_local $4) - (i32.const 1) - ) - (set_local $2 - (f32.neg - (get_local $2) - ) - ) - ) - (set_local $2 - (f32.div - (tee_local $0 - (f32.sub - (get_local $2) - (get_local $2) - ) - ) - (get_local $0) - ) - ) - ) - ) - (return - (get_local $2) - ) - ) - ) - (set_local $10 - (f32.const 1) - ) - (if - (i32.lt_s - (get_local $7) - (i32.const 0) - ) - (block - (if - (i32.eqz - (get_local $4) - ) - (return - (f32.div - (tee_local $0 - (f32.sub - (get_local $0) - (get_local $0) - ) - ) - (get_local $0) - ) - ) - ) - (if - (i32.eq - (get_local $4) - (i32.const 1) - ) - (set_local $10 - (f32.const -1) - ) - ) - ) - ) - (set_local $2 - (if (result f32) - (i32.gt_s - (get_local $12) - (i32.const 1291845632) - ) - (block (result f32) - (if - (i32.lt_s - (get_local $6) - (i32.const 1065353208) - ) - (return - (tee_local $0 - (if (result f32) - (i32.lt_s - (get_local $13) - (i32.const 0) - ) - (f32.mul - (f32.mul - (get_local $10) - (f32.const 1000000015047466219876688e6) - ) - (f32.const 1000000015047466219876688e6) - ) - (f32.mul - (f32.mul - (get_local $10) - (f32.const 1.0000000031710769e-30) - ) - (f32.const 1.0000000031710769e-30) - ) - ) - ) - ) - ) - (if - (i32.gt_s - (get_local $6) - (i32.const 1065353223) - ) - (return - (tee_local $0 - (if (result f32) - (i32.gt_s - (get_local $13) - (i32.const 0) - ) - (f32.mul - (f32.mul - (get_local $10) - (f32.const 1000000015047466219876688e6) - ) - (f32.const 1000000015047466219876688e6) - ) - (f32.mul - (f32.mul - (get_local $10) - (f32.const 1.0000000031710769e-30) - ) - (f32.const 1.0000000031710769e-30) - ) - ) - ) - ) - ) - (set_local $0 - (f32.mul - (f32.mul - (tee_local $3 - (f32.sub - (get_local $2) - (f32.const 1) - ) - ) - (get_local $3) - ) - (f32.sub - (f32.const 0.5) - (f32.mul - (get_local $3) - (f32.sub - (f32.const 0.3333333432674408) - (f32.mul - (get_local $3) - (f32.const 0.25) - ) - ) - ) - ) - ) - ) - (set_local $5 - (i32.reinterpret/f32 - (f32.add - (tee_local $15 - (f32.mul - (f32.const 1.44268798828125) - (get_local $3) - ) - ) - (tee_local $16 - (f32.sub - (f32.mul - (get_local $3) - (f32.const 7.052607543300837e-06) - ) - (f32.mul - (get_local $0) - (f32.const 1.4426950216293335) - ) - ) - ) - ) - ) - ) - (f32.sub - (get_local $16) - (f32.sub - (tee_local $11 - (f32.reinterpret/i32 - (i32.and - (get_local $5) - (i32.const -4096) - ) - ) - ) - (get_local $15) - ) - ) - ) - (block (result f32) - (set_local $4 - (i32.const 0) - ) - (if - (i32.lt_s - (get_local $6) - (i32.const 8388608) - ) - (block - (set_local $4 - (i32.const -24) - ) - (set_local $6 - (i32.reinterpret/f32 - (f32.mul - (get_local $2) - (f32.const 16777216) - ) - ) - ) - ) - ) - (set_local $4 - (i32.add - (get_local $4) - (i32.sub - (i32.shr_s - (get_local $6) - (i32.const 23) - ) - (i32.const 127) - ) - ) - ) - (set_local $6 - (i32.or - (tee_local $8 - (i32.and - (get_local $6) - (i32.const 8388607) - ) - ) - (i32.const 1065353216) - ) - ) - (set_local $7 - (if (result i32) - (i32.le_s - (get_local $8) - (i32.const 1885297) - ) - (i32.const 0) - (if (result i32) - (i32.lt_s - (get_local $8) - (i32.const 6140887) - ) - (i32.const 1) - (block (result i32) - (set_local $4 - (i32.add - (get_local $4) - (i32.const 1) - ) - ) - (set_local $6 - (i32.sub - (get_local $6) - (i32.const 8388608) - ) - ) - (i32.const 0) - ) - ) - ) - ) - (set_local $3 - (f32.reinterpret/i32 - (i32.and - (i32.reinterpret/f32 - (tee_local $9 - (f32.mul - (tee_local $15 - (f32.sub - (tee_local $2 - (f32.reinterpret/i32 - (get_local $6) - ) - ) - (tee_local $0 - (select - (f32.const 1.5) - (f32.const 1) - (get_local $7) - ) - ) - ) - ) - (tee_local $16 - (f32.div - (f32.const 1) - (f32.add - (get_local $2) - (get_local $0) - ) - ) - ) - ) - ) - ) - (i32.const -4096) - ) - ) - ) - (set_local $2 - (f32.sub - (get_local $2) - (f32.sub - (tee_local $11 - (f32.reinterpret/i32 - (i32.add - (i32.add - (i32.or - (i32.and - (i32.shr_s - (get_local $6) - (i32.const 1) - ) - (i32.const -4096) - ) - (i32.const 536870912) - ) - (i32.const 4194304) - ) - (i32.shl - (get_local $7) - (i32.const 21) - ) - ) - ) - ) - (get_local $0) - ) - ) - ) - (set_local $17 - (f32.mul - (f32.mul - (tee_local $14 - (f32.mul - (get_local $9) - (get_local $9) - ) - ) - (get_local $14) - ) - (f32.add - (f32.const 0.6000000238418579) - (f32.mul - (get_local $14) - (f32.add - (f32.const 0.4285714328289032) - (f32.mul - (get_local $14) - (f32.add - (f32.const 0.3333333432674408) - (f32.mul - (get_local $14) - (f32.add - (f32.const 0.2727281153202057) - (f32.mul - (get_local $14) - (f32.add - (f32.const 0.23066075146198273) - (f32.mul - (get_local $14) - (f32.const 0.20697501301765442) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - (set_local $5 - (i32.reinterpret/f32 - (f32.add - (f32.add - (f32.const 3) - (tee_local $14 - (f32.mul - (get_local $3) - (get_local $3) - ) - ) - ) - (tee_local $17 - (f32.add - (get_local $17) - (f32.mul - (tee_local $0 - (f32.mul - (get_local $16) - (f32.sub - (f32.sub - (get_local $15) - (f32.mul - (get_local $3) - (get_local $11) - ) - ) - (f32.mul - (get_local $3) - (get_local $2) - ) - ) - ) - ) - (f32.add - (get_local $3) - (get_local $9) - ) - ) - ) - ) - ) - ) - ) - (set_local $2 - (f32.sub - (get_local $17) - (f32.sub - (f32.sub - (tee_local $11 - (f32.reinterpret/i32 - (i32.and - (get_local $5) - (i32.const -4096) - ) - ) - ) - (f32.const 3) - ) - (get_local $14) - ) - ) - ) - (set_local $5 - (i32.reinterpret/f32 - (f32.add - (tee_local $15 - (f32.mul - (get_local $3) - (get_local $11) - ) - ) - (tee_local $16 - (f32.add - (f32.mul - (get_local $0) - (get_local $11) - ) - (f32.mul - (get_local $2) - (get_local $9) - ) - ) - ) - ) - ) - ) - (set_local $9 - (f32.sub - (get_local $16) - (f32.sub - (tee_local $0 - (f32.reinterpret/i32 - (i32.and - (get_local $5) - (i32.const -4096) - ) - ) - ) - (get_local $15) - ) - ) - ) - (set_local $5 - (i32.reinterpret/f32 - (f32.add - (f32.add - (f32.add - (tee_local $17 - (f32.mul - (f32.const 0.9619140625) - (get_local $0) - ) - ) - (tee_local $2 - (f32.add - (f32.add - (f32.mul - (f32.const -1.1736857413779944e-04) - (get_local $0) - ) - (f32.mul - (get_local $9) - (f32.const 0.9617967009544373) - ) - ) - (select - (f32.const 1.5632208487659227e-06) - (f32.const 0) - (get_local $7) - ) - ) - ) - ) - (tee_local $0 - (select - (f32.const 0.5849609375) - (f32.const 0) - (get_local $7) - ) - ) - ) - (tee_local $3 - (f32.convert_s/i32 - (get_local $4) - ) - ) - ) - ) - ) - (f32.sub - (get_local $2) - (f32.sub - (f32.sub - (f32.sub - (tee_local $11 - (f32.reinterpret/i32 - (i32.and - (get_local $5) - (i32.const -4096) - ) - ) - ) - (get_local $3) - ) - (get_local $0) - ) - (get_local $17) - ) - ) - ) - ) - ) - (br_if $folding-inner0 - (i32.gt_s - (tee_local $8 - (i32.reinterpret/f32 - (tee_local $2 - (f32.add - (tee_local $9 - (f32.add - (f32.mul - (f32.sub - (get_local $1) - (tee_local $0 - (f32.reinterpret/i32 - (i32.and - (i32.reinterpret/f32 - (get_local $1) - ) - (i32.const -4096) - ) - ) - ) - ) - (get_local $11) - ) - (f32.mul - (get_local $1) - (get_local $2) - ) - ) - ) - (tee_local $0 - (f32.mul - (get_local $0) - (get_local $11) - ) - ) - ) - ) - ) - ) - (i32.const 1124073472) - ) - ) - (if - (i32.eq - (get_local $8) - (i32.const 1124073472) - ) - (br_if $folding-inner0 - (f32.gt - (f32.add - (get_local $9) - (f32.const 4.299566569443414e-08) - ) - (f32.sub - (get_local $2) - (get_local $0) - ) - ) - ) - (if - (i32.gt_s - (i32.and - (get_local $8) - (i32.const 2147483647) - ) - (i32.const 1125515264) - ) - (br $folding-inner1) - (if - (i32.eq - (get_local $8) - (i32.const -1021968384) - ) - (br_if $folding-inner1 - (f32.le - (get_local $9) - (f32.sub - (get_local $2) - (get_local $0) - ) - ) - ) - ) - ) - ) - (set_local $7 - (i32.sub - (i32.shr_s - (tee_local $5 - (i32.and - (get_local $8) - (i32.const 2147483647) - ) - ) - (i32.const 23) - ) - (i32.const 127) - ) - ) - (set_local $4 + (set_local $1 (i32.const 0) ) - (if - (i32.gt_s - (get_local $5) - (i32.const 1056964608) - ) - (block - (set_local $7 - (i32.sub - (i32.shr_s - (i32.and - (tee_local $4 - (i32.add - (get_local $8) - (i32.shr_s - (i32.const 8388608) - (i32.add - (get_local $7) - (i32.const 1) - ) - ) - ) - ) - (i32.const 2147483647) - ) - (i32.const 23) - ) - (i32.const 127) - ) - ) - (set_local $3 - (f32.reinterpret/i32 - (i32.and - (get_local $4) - (i32.xor - (i32.shr_s - (i32.const 8388607) - (get_local $7) - ) - (i32.const -1) - ) - ) - ) - ) - (set_local $4 - (i32.shr_s - (i32.or - (i32.and - (get_local $4) - (i32.const 8388607) - ) - (i32.const 8388608) - ) - (i32.sub - (i32.const 23) - (get_local $7) - ) - ) - ) - (if - (i32.lt_s - (get_local $8) - (i32.const 0) - ) - (set_local $4 - (i32.sub - (i32.const 0) - (get_local $4) - ) - ) - ) - (set_local $0 - (f32.sub - (get_local $0) - (get_local $3) - ) - ) - ) - ) - (set_local $3 - (f32.mul - (tee_local $2 - (f32.add - (tee_local $15 - (f32.mul - (tee_local $3 - (f32.reinterpret/i32 - (i32.and - (i32.reinterpret/f32 - (f32.add - (get_local $9) - (get_local $0) - ) - ) - (i32.const -32768) - ) - ) - ) - (f32.const 0.693145751953125) - ) - ) - (tee_local $16 - (f32.add - (f32.mul - (f32.sub - (get_local $9) - (f32.sub - (get_local $3) - (get_local $0) - ) - ) - (f32.const 0.6931471824645996) - ) - (f32.mul - (get_local $3) - (f32.const 1.4286065379565116e-06) - ) - ) - ) - ) - ) - (get_local $2) - ) - ) + ) + (if + (get_local $1) (return - (f32.mul - (get_local $10) - (tee_local $2 - (if (result f32) - (i32.le_s - (i32.shr_s - (tee_local $8 - (i32.add - (i32.reinterpret/f32 - (tee_local $2 - (f32.sub - (f32.const 1) - (f32.sub - (f32.sub - (f32.div - (f32.mul - (get_local $2) - (tee_local $11 - (f32.sub - (get_local $2) - (f32.mul - (get_local $3) - (f32.add - (f32.const 0.1666666716337204) - (f32.mul - (get_local $3) - (f32.add - (f32.const -2.7777778450399637e-03) - (f32.mul - (get_local $3) - (f32.add - (f32.const 6.61375597701408e-05) - (f32.mul - (get_local $3) - (f32.add - (f32.const -1.6533901998627698e-06) - (f32.mul - (get_local $3) - (f32.const 4.138136944220605e-08) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - (f32.sub - (get_local $11) - (f32.const 2) - ) - ) - (f32.add - (tee_local $0 - (f32.sub - (get_local $16) - (f32.sub - (get_local $2) - (get_local $15) - ) - ) - ) - (f32.mul - (get_local $2) - (get_local $0) - ) - ) - ) - (get_local $2) - ) - ) - ) - ) - (i32.shl - (get_local $4) - (i32.const 23) - ) - ) - ) - (i32.const 23) - ) - (i32.const 0) - ) - (call $~lib/math/NativeMathf.scalbn - (get_local $2) - (get_local $4) - ) - (f32.reinterpret/i32 - (get_local $8) - ) - ) - ) + (f32.add + (get_local $0) + (f32.const 1) ) ) ) - (return - (f32.mul - (f32.mul - (get_local $10) - (f32.const 1000000015047466219876688e6) - ) - (f32.const 1000000015047466219876688e6) - ) - ) - ) - (f32.mul - (f32.mul - (get_local $10) - (f32.const 1.0000000031710769e-30) - ) - (f32.const 1.0000000031710769e-30) + (get_local $0) ) ) - (func $~lib/math/NativeMath.mod (; 5 ;) (; has Stack IR ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64) - (local $2 i64) - (local $3 i32) - (local $4 i64) - (local $5 i64) - (local $6 i32) - (local $7 i32) - (local $8 i32) + (func $~lib/math/NativeMath.mod (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) + (local $1 i64) + (local $2 i32) + (local $3 i64) + (local $4 i32) (block $folding-inner0 - (set_local $3 + (set_local $2 (i32.wrap/i64 (i64.and (i64.shr_u - (tee_local $2 + (tee_local $1 (i64.reinterpret/f64 (get_local $0) ) @@ -3224,69 +392,22 @@ ) ) ) - (set_local $6 - (i32.wrap/i64 - (i64.and - (i64.shr_u - (tee_local $5 - (i64.reinterpret/f64 - (get_local $1) - ) - ) - (i64.const 52) - ) - (i64.const 2047) - ) - ) - ) - (set_local $8 + (set_local $4 (i32.wrap/i64 (i64.shr_u - (get_local $2) + (get_local $1) (i64.const 63) ) ) ) (if - (i32.eqz - (tee_local $7 - (i64.eq - (i64.shl - (get_local $5) - (i64.const 1) - ) - (i64.const 0) - ) - ) + (i32.eq + (get_local $2) + (i32.const 2047) ) - (set_local $7 - (f64.ne - (get_local $1) - (get_local $1) - ) - ) - ) - (if - (i32.eqz - (get_local $7) - ) - (set_local $7 - (i32.eq - (get_local $3) - (i32.const 2047) - ) - ) - ) - (if - (get_local $7) (return (f64.div - (tee_local $0 - (f64.mul - (get_local $0) - (get_local $1) - ) - ) + (get_local $0) (get_local $0) ) ) @@ -3294,25 +415,19 @@ (if (i64.le_u (i64.shl - (get_local $2) - (i64.const 1) - ) - (i64.shl - (get_local $5) + (get_local $1) (i64.const 1) ) + (i64.const 9214364837600034816) ) (block (br_if $folding-inner0 (i64.eq (i64.shl - (get_local $2) - (i64.const 1) - ) - (i64.shl - (get_local $5) + (get_local $1) (i64.const 1) ) + (i64.const 9214364837600034816) ) ) (return @@ -3320,21 +435,21 @@ ) ) ) - (set_local $2 + (set_local $1 (if (result i64) - (get_local $3) + (get_local $2) (i64.or (i64.and - (get_local $2) + (get_local $1) (i64.const 4503599627370495) ) (i64.const 4503599627370496) ) (block (result i64) (block $break|0 - (set_local $4 + (set_local $3 (i64.shl - (get_local $2) + (get_local $1) (i64.const 12) ) ) @@ -3343,21 +458,21 @@ (i32.eqz (i64.eqz (i64.shr_u - (get_local $4) + (get_local $3) (i64.const 63) ) ) ) ) - (set_local $3 + (set_local $2 (i32.sub - (get_local $3) + (get_local $2) (i32.const 1) ) ) - (set_local $4 + (set_local $3 (i64.shl - (get_local $4) + (get_local $3) (i64.const 1) ) ) @@ -3365,67 +480,11 @@ ) ) (i64.shl - (get_local $2) + (get_local $1) (i64.extend_s/i32 (i32.sub (i32.const 1) - (get_local $3) - ) - ) - ) - ) - ) - ) - (set_local $5 - (if (result i64) - (get_local $6) - (i64.or - (i64.and - (get_local $5) - (i64.const 4503599627370495) - ) - (i64.const 4503599627370496) - ) - (block (result i64) - (block $break|1 - (set_local $4 - (i64.shl - (get_local $5) - (i64.const 12) - ) - ) - (loop $repeat|1 - (br_if $break|1 - (i32.eqz - (i64.eqz - (i64.shr_u - (get_local $4) - (i64.const 63) - ) - ) - ) - ) - (set_local $6 - (i32.sub - (get_local $6) - (i32.const 1) - ) - ) - (set_local $4 - (i64.shl - (get_local $4) - (i64.const 1) - ) - ) - (br $repeat|1) - ) - ) - (i64.shl - (get_local $5) - (i64.extend_s/i32 - (i32.sub - (i32.const 1) - (get_local $6) + (get_local $2) ) ) ) @@ -3436,17 +495,17 @@ (loop $repeat|2 (br_if $break|2 (i32.le_s - (get_local $3) - (get_local $6) + (get_local $2) + (i32.const 1023) ) ) (if (i64.eqz (i64.shr_u - (tee_local $4 + (tee_local $3 (i64.sub - (get_local $2) - (get_local $5) + (get_local $1) + (i64.const 4503599627370496) ) ) (i64.const 63) @@ -3455,23 +514,23 @@ (block (br_if $folding-inner0 (i64.eqz - (get_local $4) + (get_local $3) ) ) - (set_local $2 - (get_local $4) + (set_local $1 + (get_local $3) ) ) ) - (set_local $2 + (set_local $1 (i64.shl - (get_local $2) + (get_local $1) (i64.const 1) ) ) - (set_local $3 + (set_local $2 (i32.sub - (get_local $3) + (get_local $2) (i32.const 1) ) ) @@ -3481,10 +540,10 @@ (if (i64.eqz (i64.shr_u - (tee_local $4 + (tee_local $3 (i64.sub - (get_local $2) - (get_local $5) + (get_local $1) + (i64.const 4503599627370496) ) ) (i64.const 63) @@ -3493,11 +552,11 @@ (block (br_if $folding-inner0 (i64.eqz - (get_local $4) + (get_local $3) ) ) - (set_local $2 - (get_local $4) + (set_local $1 + (get_local $3) ) ) ) @@ -3507,21 +566,21 @@ (i32.eqz (i64.eqz (i64.shr_u - (get_local $2) + (get_local $1) (i64.const 52) ) ) ) ) - (set_local $3 + (set_local $2 (i32.sub - (get_local $3) + (get_local $2) (i32.const 1) ) ) - (set_local $2 + (set_local $1 (i64.shl - (get_local $2) + (get_local $1) (i64.const 1) ) ) @@ -3531,30 +590,30 @@ (return (f64.reinterpret/i64 (i64.or - (tee_local $2 + (tee_local $1 (if (result i64) (i32.gt_s - (get_local $3) + (get_local $2) (i32.const 0) ) (i64.or (i64.sub - (get_local $2) + (get_local $1) (i64.const 4503599627370496) ) (i64.shl (i64.extend_s/i32 - (get_local $3) + (get_local $2) ) (i64.const 52) ) ) (i64.shr_u - (get_local $2) + (get_local $1) (i64.extend_s/i32 (i32.sub (i32.const 1) - (get_local $3) + (get_local $2) ) ) ) @@ -3562,7 +621,7 @@ ) (i64.shl (i64.extend_s/i32 - (get_local $8) + (get_local $4) ) (i64.const 63) ) @@ -3575,7 +634,7 @@ (get_local $0) ) ) - (func $start (; 6 ;) (; has Stack IR ;) (type $v) + (func $start (; 4 ;) (; has Stack IR ;) (type $v) (drop (i32.rem_s (get_global $binary/i) @@ -3587,7 +646,6 @@ (f64.convert_s/i32 (get_global $binary/i) ) - (f64.const 1) ) ) (set_global $binary/b @@ -3650,7 +708,6 @@ (f64.convert_s/i32 (get_global $binary/i) ) - (f64.const 1) ) ) ) @@ -3755,7 +812,6 @@ (f64.convert_s/i64 (get_global $binary/I) ) - (f64.const 1) ) ) (set_global $binary/b @@ -3818,7 +874,6 @@ (f64.convert_s/i64 (get_global $binary/I) ) - (f64.const 1) ) ) ) @@ -3915,13 +970,11 @@ (drop (call $~lib/math/NativeMathf.mod (get_global $binary/f) - (f32.const 1) ) ) (drop (call $~lib/math/NativeMathf.pow (get_global $binary/f) - (f32.const 1) ) ) (set_global $binary/b @@ -3975,13 +1028,11 @@ (set_global $binary/f (call $~lib/math/NativeMathf.mod (get_global $binary/f) - (f32.const 1) ) ) (set_global $binary/f (call $~lib/math/NativeMathf.pow (get_global $binary/f) - (f32.const 1) ) ) (set_global $binary/f @@ -3999,25 +1050,21 @@ (set_global $binary/f (call $~lib/math/NativeMathf.mod (get_global $binary/f) - (f32.const 1) ) ) (set_global $binary/f (call $~lib/math/NativeMathf.pow (get_global $binary/f) - (f32.const 1) ) ) (drop (call $~lib/math/NativeMath.mod (get_global $binary/F) - (f64.const 1) ) ) (drop (call $~lib/math/NativeMath.pow (get_global $binary/F) - (f64.const 1) ) ) (set_global $binary/b @@ -4071,13 +1118,11 @@ (set_global $binary/F (call $~lib/math/NativeMath.mod (get_global $binary/F) - (f64.const 1) ) ) (set_global $binary/F (call $~lib/math/NativeMath.pow (get_global $binary/F) - (f64.const 1) ) ) (set_global $binary/F @@ -4095,13 +1140,11 @@ (set_global $binary/F (call $~lib/math/NativeMath.mod (get_global $binary/F) - (f64.const 1) ) ) (set_global $binary/F (call $~lib/math/NativeMath.pow (get_global $binary/F) - (f64.const 1) ) ) ) diff --git a/tests/compiler/builtins.ts b/tests/compiler/builtins.ts index 0e91c786..5612d062 100644 --- a/tests/compiler/builtins.ts +++ b/tests/compiler/builtins.ts @@ -239,7 +239,7 @@ F = select(12.5, 25.0, false); if (!i) unreachable(); -var fn = function(a: i32, b: i32): void {} +var fn = function(a: i32, b: i32): void {}; call_indirect(fn, 1, 2); // AS specific diff --git a/tests/compiler/call-inferred.optimized.wat b/tests/compiler/call-inferred.optimized.wat index d250e35a..57605da0 100644 --- a/tests/compiler/call-inferred.optimized.wat +++ b/tests/compiler/call-inferred.optimized.wat @@ -1,29 +1,27 @@ (module - (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (type $FF (func (param f64) (result f64))) - (type $ff (func (param f32) (result f32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$d (func (result f64))) + (type $FUNCSIG$f (func (result f32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\10\00\00\00c\00a\00l\00l\00-\00i\00n\00f\00e\00r\00r\00e\00d\00.\00t\00s") (export "memory" (memory $0)) (start $start) - (func $call-inferred/foo (; 1 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (get_local $0) + (func $call-inferred/foo (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const 42) ) - (func $call-inferred/foo (; 2 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) - (get_local $0) + (func $call-inferred/foo (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$d) (result f64) + (f64.const 42) ) - (func $call-inferred/foo (; 3 ;) (; has Stack IR ;) (type $ff) (param $0 f32) (result f32) - (get_local $0) + (func $call-inferred/foo (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$f) (result f32) + (f32.const 42) ) (func $start (; 4 ;) (; has Stack IR ;) (type $v) (if (i32.ne - (call $call-inferred/foo - (i32.const 42) - ) + (call $call-inferred/foo) (i32.const 42) ) (block @@ -38,9 +36,7 @@ ) (if (f64.ne - (call $call-inferred/foo - (f64.const 42) - ) + (call $call-inferred/foo) (f64.const 42) ) (block @@ -55,9 +51,7 @@ ) (if (f32.ne - (call $call-inferred/foo - (f32.const 42) - ) + (call $call-inferred/foo) (f32.const 42) ) (block @@ -72,9 +66,7 @@ ) (if (f32.ne - (call $call-inferred/foo - (f32.const 42) - ) + (call $call-inferred/foo) (f32.const 42) ) (block diff --git a/tests/compiler/class-overloading.optimized.wat b/tests/compiler/class-overloading.optimized.wat index 04b41a23..a07e8bbc 100644 --- a/tests/compiler/class-overloading.optimized.wat +++ b/tests/compiler/class-overloading.optimized.wat @@ -1,17 +1,16 @@ (module (type $iv (func (param i32))) (type $v (func)) + (type $FUNCSIG$v (func)) (memory $0 0) (export "memory" (memory $0)) (export "test" (func $class-overloading/test)) (start $start) - (func $class-overloading/Foo#baz (; 0 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $class-overloading/Foo#baz (; 0 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) (func $class-overloading/test (; 1 ;) (; has Stack IR ;) (type $iv) (param $0 i32) - (call $class-overloading/Foo#baz - (get_local $0) - ) + (call $class-overloading/Foo#baz) ) (func $start (; 2 ;) (; has Stack IR ;) (type $v) (call $class-overloading/test diff --git a/tests/compiler/class.optimized.wat b/tests/compiler/class.optimized.wat index a09c3c46..808d7356 100644 --- a/tests/compiler/class.optimized.wat +++ b/tests/compiler/class.optimized.wat @@ -1,70 +1,34 @@ (module - (type $iii (func (param i32 i32) (result i32))) - (type $fff (func (param f32 f32) (result f32))) (type $ii (func (param i32) (result i32))) - (type $iiii (func (param i32 i32 i32) (result i32))) - (type $ifff (func (param i32 f32 f32) (result f32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$f (func (result f32))) (global $class/Animal.ONE (mut i32) (i32.const 1)) (memory $0 1) (data (i32.const 8) "\08\00\00\00c\00l\00a\00s\00s\00.\00t\00s") (export "memory" (memory $0)) (export "test" (func $class/test)) (start $start) - (func $class/Animal.add (; 0 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $class/Animal.add (; 0 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) (get_global $class/Animal.ONE) + (i32.const 3) ) ) - (func $class/Animal.sub (; 1 ;) (; has Stack IR ;) (type $fff) (param $0 f32) (param $1 f32) (result f32) + (func $class/Animal.sub (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$f) (result f32) (f32.add - (f32.sub - (get_local $0) - (get_local $1) - ) + (f32.const -1) (f32.convert_s/i32 (get_global $class/Animal.ONE) ) ) ) - (func $class/Animal#instanceAdd (; 2 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (i32.add - (i32.add - (get_local $1) - (get_local $2) - ) - (get_global $class/Animal.ONE) - ) - ) - (func $class/Animal#instanceSub (; 3 ;) (; has Stack IR ;) (type $ifff) (param $0 i32) (param $1 f32) (param $2 f32) (result f32) - (f32.add - (f32.sub - (get_local $1) - (get_local $2) - ) - (f32.convert_s/i32 - (get_global $class/Animal.ONE) - ) - ) - ) - (func $class/test (; 4 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $class/test (; 2 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) (drop - (call $class/Animal#instanceAdd - (get_local $0) - (i32.const 1) - (i32.const 2) - ) + (call $class/Animal.add) ) (drop - (call $class/Animal#instanceSub - (get_local $0) - (f32.const 1) - (f32.const 2) - ) + (call $class/Animal.sub) ) (drop (i32.load @@ -95,18 +59,12 @@ ) (get_local $0) ) - (func $start (; 5 ;) (; has Stack IR ;) (type $v) + (func $start (; 3 ;) (; has Stack IR ;) (type $v) (drop - (call $class/Animal.add - (i32.const 1) - (i32.const 2) - ) + (call $class/Animal.add) ) (drop - (call $class/Animal.sub - (f32.const 1) - (f32.const 2) - ) + (call $class/Animal.sub) ) ) ) diff --git a/tests/compiler/exports.optimized.wat b/tests/compiler/exports.optimized.wat index 4c8ae858..c79e1595 100644 --- a/tests/compiler/exports.optimized.wat +++ b/tests/compiler/exports.optimized.wat @@ -5,6 +5,7 @@ (type $iiv (func (param i32 i32))) (type $iv (func (param i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $exports/Animal.CAT i32 (i32.const 0)) @@ -143,9 +144,9 @@ ) (get_local $1) ) - (func $~lib/memory/memory.allocate (; 4 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 4) ) ) (func $exports/Car#constructor (; 5 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) @@ -155,9 +156,7 @@ ) (i32.store (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 4) - ) + (call $~lib/memory/memory.allocate) ) (get_local $1) ) diff --git a/tests/compiler/function-types.optimized.wat b/tests/compiler/function-types.optimized.wat index e74c81bd..877445aa 100644 --- a/tests/compiler/function-types.optimized.wat +++ b/tests/compiler/function-types.optimized.wat @@ -6,6 +6,7 @@ (type $FFF (func (param f64 f64) (result f64))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $function-types/i32Adder (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) @@ -54,17 +55,18 @@ (get_local $2) ) ) - (func $function-types/doAdd (; 8 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $function-types/doAdd (; 8 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (set_global $~argc (i32.const 2) ) (call_indirect (type $iii) - (get_local $0) - (get_local $1) + (i32.const 3) + (i32.const 4) (call $function-types/makeAdder) ) ) - (func $function-types/makeAndAdd|trampoline (; 9 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $function-types/makeAndAdd|trampoline (; 9 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -77,14 +79,14 @@ ) (unreachable) ) - (set_local $2 + (set_local $0 (call $function-types/makeAdder) ) ) (call $function-types/doAddWithFn + (i32.const 1) + (i32.const 2) (get_local $0) - (get_local $1) - (get_local $2) ) ) (func $start (; 10 ;) (; has Stack IR ;) (type $v) @@ -181,10 +183,7 @@ ) (if (i32.ne - (call $function-types/doAdd - (i32.const 3) - (i32.const 4) - ) + (call $function-types/doAdd) (i32.const 7) ) (block @@ -221,11 +220,7 @@ ) (if (i32.ne - (call $function-types/makeAndAdd|trampoline - (i32.const 1) - (i32.const 2) - (i32.const 0) - ) + (call $function-types/makeAndAdd|trampoline) (i32.const 3) ) (block diff --git a/tests/compiler/function.optimized.wat b/tests/compiler/function.optimized.wat index 8da2053b..757cfef9 100644 --- a/tests/compiler/function.optimized.wat +++ b/tests/compiler/function.optimized.wat @@ -4,16 +4,11 @@ (type $I (func (result i64))) (type $f (func (result f32))) (type $F (func (result f64))) - (type $iv (func (param i32))) - (type $ii (func (param i32) (result i32))) - (type $II (func (param i64) (result i64))) - (type $ff (func (param f32) (result f32))) - (type $FF (func (param f64) (result f64))) - (type $iiv (func (param i32 i32))) - (type $iii (func (param i32 i32) (result i32))) - (type $IiI (func (param i64 i32) (result i64))) - (type $fff (func (param f32 f32) (result f32))) - (type $FFF (func (param f64 f64) (result f64))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$j (func (result i64))) + (type $FUNCSIG$f (func (result f32))) + (type $FUNCSIG$d (func (result f64))) (memory $0 0) (export "memory" (memory $0)) (start $start) @@ -32,51 +27,34 @@ (func $function/F (; 4 ;) (; has Stack IR ;) (type $F) (result f64) (f64.const 0) ) - (func $function/iv (; 5 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $function/iv (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) - (func $function/ii (; 6 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (get_local $0) + (func $function/ii (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const 0) ) - (func $function/II (; 7 ;) (; has Stack IR ;) (type $II) (param $0 i64) (result i64) - (get_local $0) + (func $function/II (; 7 ;) (; has Stack IR ;) (type $FUNCSIG$j) (result i64) + (i64.const 0) ) - (func $function/ff (; 8 ;) (; has Stack IR ;) (type $ff) (param $0 f32) (result f32) - (get_local $0) + (func $function/ff (; 8 ;) (; has Stack IR ;) (type $FUNCSIG$f) (result f32) + (f32.const 0) ) - (func $function/FF (; 9 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) - (get_local $0) + (func $function/FF (; 9 ;) (; has Stack IR ;) (type $FUNCSIG$d) (result f64) + (f64.const 0) ) - (func $function/iiv (; 10 ;) (; has Stack IR ;) (type $iiv) (param $0 i32) (param $1 i32) - (nop) + (func $function/iii (; 10 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const 3) ) - (func $function/iii (; 11 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (i32.add - (get_local $0) - (get_local $1) - ) + (func $function/III (; 11 ;) (; has Stack IR ;) (type $FUNCSIG$j) (result i64) + (i64.const 3) ) - (func $function/III (; 12 ;) (; has Stack IR ;) (type $IiI) (param $0 i64) (param $1 i32) (result i64) - (i64.add - (get_local $0) - (i64.extend_s/i32 - (get_local $1) - ) - ) + (func $function/fff (; 12 ;) (; has Stack IR ;) (type $FUNCSIG$f) (result f32) + (f32.const 3) ) - (func $function/fff (; 13 ;) (; has Stack IR ;) (type $fff) (param $0 f32) (param $1 f32) (result f32) - (f32.add - (get_local $0) - (get_local $1) - ) + (func $function/FFF (; 13 ;) (; has Stack IR ;) (type $FUNCSIG$d) (result f64) + (f64.const 3) ) - (func $function/FFF (; 14 ;) (; has Stack IR ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64) - (f64.add - (get_local $0) - (get_local $1) - ) - ) - (func $start (; 15 ;) (; has Stack IR ;) (type $v) + (func $start (; 14 ;) (; has Stack IR ;) (type $v) (call $function/v) (drop (call $function/i) @@ -90,56 +68,31 @@ (drop (call $function/F) ) - (call $function/iv - (i32.const 0) + (call $function/iv) + (drop + (call $function/ii) ) (drop - (call $function/ii - (i32.const 0) - ) + (call $function/II) ) (drop - (call $function/II - (i64.const 0) - ) + (call $function/ff) ) (drop - (call $function/ff - (f32.const 0) - ) + (call $function/FF) + ) + (call $function/iv) + (drop + (call $function/iii) ) (drop - (call $function/FF - (f64.const 0) - ) - ) - (call $function/iiv - (i32.const 1) - (i32.const 2) + (call $function/III) ) (drop - (call $function/iii - (i32.const 1) - (i32.const 2) - ) + (call $function/fff) ) (drop - (call $function/III - (i64.const 1) - (i32.const 2) - ) - ) - (drop - (call $function/fff - (f32.const 1) - (f32.const 2) - ) - ) - (drop - (call $function/FFF - (f64.const 1) - (f64.const 2) - ) + (call $function/FFF) ) ) ) diff --git a/tests/compiler/getter-call.optimized.wat b/tests/compiler/getter-call.optimized.wat index 53e54335..d3c8ff3d 100644 --- a/tests/compiler/getter-call.optimized.wat +++ b/tests/compiler/getter-call.optimized.wat @@ -2,6 +2,7 @@ (type $i (func (result i32))) (type $ii (func (param i32) (result i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) @@ -97,31 +98,27 @@ ) (get_local $1) ) - (func $~lib/memory/memory.allocate (; 1 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 0) ) ) (func $getter-call/C#get:x~anonymous|0 (; 2 ;) (; has Stack IR ;) (type $i) (result i32) (i32.const 42) ) - (func $getter-call/C#get:x (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $getter-call/C#get:x (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (i32.const 0) ) (func $getter-call/test (; 4 ;) (; has Stack IR ;) (type $i) (result i32) (local $0 i32) (set_local $0 - (call $~lib/memory/memory.allocate - (i32.const 0) - ) + (call $~lib/memory/memory.allocate) ) (set_global $~argc (i32.const 0) ) (call_indirect (type $i) - (call $getter-call/C#get:x - (get_local $0) - ) + (call $getter-call/C#get:x) ) ) (func $start (; 5 ;) (; has Stack IR ;) (type $v) diff --git a/tests/compiler/if.optimized.wat b/tests/compiler/if.optimized.wat index 5b47a92d..9246af52 100644 --- a/tests/compiler/if.optimized.wat +++ b/tests/compiler/if.optimized.wat @@ -28,11 +28,9 @@ (i32.const 0) ) (func $if/ifAlwaysReturns (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if + (if (result i32) (get_local $0) - (return - (i32.const 1) - ) + (i32.const 1) (block (call $~lib/env/abort (i32.const 0) diff --git a/tests/compiler/import.optimized.wat b/tests/compiler/import.optimized.wat index b83af45a..32115ef8 100644 --- a/tests/compiler/import.optimized.wat +++ b/tests/compiler/import.optimized.wat @@ -1,66 +1,36 @@ (module - (type $iii (func (param i32 i32) (result i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (memory $0 0) (export "memory" (memory $0)) (start $start) - (func $export/add (; 0 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (i32.add - (get_local $0) - (get_local $1) - ) + (func $export/add (; 0 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const 3) ) - (func $export/sub (; 1 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (i32.sub - (get_local $0) - (get_local $1) - ) + (func $export/sub (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const -1) ) - (func $export/mul (; 2 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (i32.mul - (get_local $0) - (get_local $1) - ) - ) - (func $export/ns.two (; 3 ;) (; has Stack IR ;) (type $v) + (func $export/ns.two (; 2 ;) (; has Stack IR ;) (type $v) (nop) ) - (func $start (; 4 ;) (; has Stack IR ;) (type $v) + (func $start (; 3 ;) (; has Stack IR ;) (type $v) (drop (i32.add (i32.add - (call $export/add - (i32.const 1) - (i32.const 2) - ) - (call $export/sub - (i32.const 2) - (i32.const 3) - ) - ) - (call $export/mul - (i32.const 3) - (i32.const 1) + (call $export/add) + (call $export/sub) ) + (call $export/add) ) ) (call $export/ns.two) (drop (i32.add (i32.add - (call $export/add - (i32.const 1) - (i32.const 2) - ) - (call $export/sub - (i32.const 2) - (i32.const 3) - ) - ) - (call $export/mul - (i32.const 3) - (i32.const 1) + (call $export/add) + (call $export/sub) ) + (call $export/add) ) ) (call $export/ns.two) diff --git a/tests/compiler/instanceof.optimized.wat b/tests/compiler/instanceof.optimized.wat index 61b1ede5..f8283ad3 100644 --- a/tests/compiler/instanceof.optimized.wat +++ b/tests/compiler/instanceof.optimized.wat @@ -1,29 +1,23 @@ (module (type $iiiiv (func (param i32 i32 i32 i32))) - (type $ii (func (param i32) (result i32))) - (type $Fi (func (param f64) (result i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $instanceof/an (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 8) "\0d\00\00\00i\00n\00s\00t\00a\00n\00c\00e\00o\00f\00.\00t\00s") (export "memory" (memory $0)) (start $start) - (func $instanceof/isI32 (; 1 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $instanceof/isI32 (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (i32.const 1) ) - (func $instanceof/isI32 (; 2 ;) (; has Stack IR ;) (type $Fi) (param $0 f64) (result i32) + (func $instanceof/isI32 (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (i32.const 0) ) - (func $instanceof/isI32 (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $start (; 4 ;) (; has Stack IR ;) (type $v) + (func $start (; 3 ;) (; has Stack IR ;) (type $v) (if (i32.eqz - (call $instanceof/isI32 - (i32.const 0) - ) + (call $instanceof/isI32) ) (block (call $~lib/env/abort @@ -36,9 +30,7 @@ ) ) (if - (call $instanceof/isI32 - (f64.const 0) - ) + (call $instanceof/isI32) (block (call $~lib/env/abort (i32.const 0) @@ -50,9 +42,7 @@ ) ) (if - (call $instanceof/isI32 - (i32.const 0) - ) + (call $instanceof/isI32) (block (call $~lib/env/abort (i32.const 0) diff --git a/tests/compiler/mandelbrot.optimized.wat b/tests/compiler/mandelbrot.optimized.wat index f88ce7e6..bbd7cf7a 100644 --- a/tests/compiler/mandelbrot.optimized.wat +++ b/tests/compiler/mandelbrot.optimized.wat @@ -2,7 +2,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $FF (func (param f64) (result f64))) (type $Fi (func (param f64) (result i32))) - (type $FFFF (func (param f64 f64 f64) (result f64))) + (type $FUNCSIG$dd (func (param f64) (result f64))) (memory $0 0) (export "memory" (memory $0)) (export "computeLine" (func $../../examples/mandelbrot/assembly/index/computeLine)) @@ -277,13 +277,13 @@ (f64.const 0) ) ) - (func $../../examples/mandelbrot/assembly/index/clamp (; 2 ;) (; has Stack IR ;) (type $FFFF) (param $0 f64) (param $1 f64) (param $2 f64) (result f64) + (func $../../examples/mandelbrot/assembly/index/clamp (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$dd) (param $0 f64) (result f64) (f64.min (f64.max (get_local $0) - (get_local $1) + (f64.const 0) ) - (get_local $2) + (f64.const 1) ) ) (func $../../examples/mandelbrot/assembly/index/computeLine (; 3 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) @@ -540,8 +540,6 @@ (get_local $3) ) ) - (f64.const 0) - (f64.const 1) ) ) ) diff --git a/tests/compiler/new-without-allocator.optimized.wat b/tests/compiler/new-without-allocator.optimized.wat index 1f96d2e1..9e7bb707 100644 --- a/tests/compiler/new-without-allocator.optimized.wat +++ b/tests/compiler/new-without-allocator.optimized.wat @@ -1,17 +1,15 @@ (module (type $i (func (result i32))) - (type $ii (func (param i32) (result i32))) + (type $FUNCSIG$i (func (result i32))) (memory $0 0) (export "memory" (memory $0)) (export "test" (func $new-without-allocator/test)) - (func $~lib/memory/memory.allocate (; 0 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 0 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (unreachable) ) (func $new-without-allocator/test (; 1 ;) (; has Stack IR ;) (type $i) (result i32) (drop - (call $~lib/memory/memory.allocate - (i32.const 0) - ) + (call $~lib/memory/memory.allocate) ) (i32.const 3) ) diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index ed367c09..aebb679e 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -2,9 +2,9 @@ (type $ii (func (param i32) (result i32))) (type $iv (func (param i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (type $iii (func (param i32 i32) (result i32))) - (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $v (func)) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -103,50 +103,42 @@ (get_local $0) ) ) - (func $~lib/internal/string/compareUnsafe (; 3 ;) (; has Stack IR ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) - (local $5 i32) - (set_local $1 - (i32.add - (get_local $0) - (i32.shl - (get_local $1) - (i32.const 1) - ) - ) - ) - (set_local $2 - (i32.add - (get_local $2) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) + (func $~lib/internal/string/compareUnsafe (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (get_local $0) ) (loop $continue|0 (if (tee_local $0 (if (result i32) - (get_local $4) + (get_local $2) (i32.eqz - (tee_local $5 + (tee_local $4 (i32.sub (i32.load16_u offset=4 - (get_local $1) + (get_local $3) ) (i32.load16_u offset=4 - (get_local $2) + (get_local $1) ) ) ) ) - (get_local $4) + (get_local $2) ) ) (block - (set_local $4 + (set_local $2 (i32.sub - (get_local $4) + (get_local $2) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) (i32.const 1) ) ) @@ -156,24 +148,18 @@ (i32.const 1) ) ) - (set_local $2 - (i32.add - (get_local $2) - (i32.const 1) - ) - ) (br $continue|0) ) ) ) - (get_local $5) + (get_local $4) ) - (func $~lib/string/String.__eq (; 4 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/string/String.__eq (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (if (i32.eq (get_local $0) - (get_local $1) + (i32.const 8) ) (return (i32.const 1) @@ -181,33 +167,31 @@ ) (if (i32.eqz - (tee_local $2 + (tee_local $1 (i32.eqz (get_local $0) ) ) ) - (set_local $2 - (i32.eqz - (get_local $1) - ) + (set_local $1 + (i32.const 0) ) ) (if - (get_local $2) + (get_local $1) (return (i32.const 0) ) ) (if (i32.ne - (tee_local $2 + (tee_local $1 (i32.load (get_local $0) ) ) (i32.load - (get_local $1) + (i32.const 8) ) ) (return @@ -217,10 +201,8 @@ (i32.eqz (call $~lib/internal/string/compareUnsafe (get_local $0) - (i32.const 0) + (i32.const 8) (get_local $1) - (i32.const 0) - (get_local $2) ) ) ) @@ -248,7 +230,6 @@ (i32.load offset=4 (get_local $0) ) - (i32.const 8) ) ) (block diff --git a/tests/compiler/rereexport.optimized.wat b/tests/compiler/rereexport.optimized.wat index 5e9d8d32..2a571d42 100644 --- a/tests/compiler/rereexport.optimized.wat +++ b/tests/compiler/rereexport.optimized.wat @@ -1,6 +1,6 @@ (module - (type $iii (func (param i32 i32) (result i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (memory $0 0) @@ -10,29 +10,17 @@ (export "renamed_b" (global $export/b)) (export "renamed_renamed_b" (global $export/b)) (start $start) - (func $export/add (; 0 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (i32.add - (get_local $0) - (get_local $1) - ) + (func $export/add (; 0 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const 3) ) - (func $export/mul (; 1 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (i32.mul - (get_local $0) - (get_local $1) - ) + (func $export/mul (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const 12) ) (func $start (; 2 ;) (; has Stack IR ;) (type $v) (drop (i32.add - (call $export/add - (i32.const 1) - (i32.const 2) - ) - (call $export/mul - (i32.const 3) - (i32.const 4) - ) + (call $export/add) + (call $export/mul) ) ) ) diff --git a/tests/compiler/retain-i32.optimized.wat b/tests/compiler/retain-i32.optimized.wat index 99900bd5..3d5a3803 100644 --- a/tests/compiler/retain-i32.optimized.wat +++ b/tests/compiler/retain-i32.optimized.wat @@ -1,7 +1,7 @@ (module - (type $iiv (func (param i32 i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $retain-i32/si (mut i32) (i32.const 0)) (global $retain-i32/ui (mut i32) (i32.const 0)) @@ -9,103 +9,34 @@ (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 ;) (; has Stack IR ;) (type $iiv) (param $0 i32) (param $1 i32) + (func $retain-i32/test (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) (func $start (; 2 ;) (; has Stack IR ;) (type $v) (local $0 i32) - (call $retain-i32/test - (i32.const 0) - (i32.const 127) - ) - (call $retain-i32/test - (i32.const 127) - (i32.const 0) - ) - (call $retain-i32/test - (i32.const 1) - (i32.const 127) - ) - (call $retain-i32/test - (i32.const 127) - (i32.const 1) - ) - (call $retain-i32/test - (i32.const -1) - (i32.const 127) - ) - (call $retain-i32/test - (i32.const 127) - (i32.const -1) - ) - (call $retain-i32/test - (i32.const 0) - (i32.const -128) - ) - (call $retain-i32/test - (i32.const -128) - (i32.const 0) - ) - (call $retain-i32/test - (i32.const 1) - (i32.const -128) - ) - (call $retain-i32/test - (i32.const -128) - (i32.const 1) - ) - (call $retain-i32/test - (i32.const -1) - (i32.const -128) - ) - (call $retain-i32/test - (i32.const -128) - (i32.const -1) - ) - (call $retain-i32/test - (i32.const 127) - (i32.const 127) - ) - (call $retain-i32/test - (i32.const -128) - (i32.const -128) - ) - (call $retain-i32/test - (i32.const 127) - (i32.const -128) - ) - (call $retain-i32/test - (i32.const -128) - (i32.const 127) - ) - (call $retain-i32/test - (i32.const 0) - (i32.const 255) - ) - (call $retain-i32/test - (i32.const 255) - (i32.const 0) - ) - (call $retain-i32/test - (i32.const 1) - (i32.const 255) - ) - (call $retain-i32/test - (i32.const 255) - (i32.const 1) - ) - (call $retain-i32/test - (i32.const -1) - (i32.const 255) - ) - (call $retain-i32/test - (i32.const 255) - (i32.const -1) - ) - (call $retain-i32/test - (i32.const 255) - (i32.const 255) - ) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) (block $break|0 (set_local $0 (i32.const -128) @@ -117,54 +48,18 @@ (i32.const 255) ) ) - (call $retain-i32/test - (i32.const 0) - (get_local $0) - ) - (call $retain-i32/test - (i32.const 1) - (get_local $0) - ) - (call $retain-i32/test - (i32.const -1) - (get_local $0) - ) - (call $retain-i32/test - (i32.const -128) - (get_local $0) - ) - (call $retain-i32/test - (i32.const 127) - (get_local $0) - ) - (call $retain-i32/test - (i32.const 255) - (get_local $0) - ) - (call $retain-i32/test - (i32.const -32768) - (get_local $0) - ) - (call $retain-i32/test - (i32.const 32767) - (get_local $0) - ) - (call $retain-i32/test - (i32.const 65535) - (get_local $0) - ) - (call $retain-i32/test - (i32.const 2147483647) - (get_local $0) - ) - (call $retain-i32/test - (i32.const -2147483648) - (get_local $0) - ) - (call $retain-i32/test - (i32.const -1) - (get_local $0) - ) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) + (call $retain-i32/test) (set_local $0 (i32.add (get_local $0) diff --git a/tests/compiler/scoped.optimized.wat b/tests/compiler/scoped.optimized.wat index 34be563a..64610f08 100644 --- a/tests/compiler/scoped.optimized.wat +++ b/tests/compiler/scoped.optimized.wat @@ -1,10 +1,10 @@ (module - (type $iv (func (param i32))) (type $v (func)) + (type $FUNCSIG$v (func)) (memory $0 0) (export "memory" (memory $0)) (start $start) - (func $scoped/fn (; 0 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $scoped/fn (; 0 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) (func $start (; 1 ;) (; has Stack IR ;) (type $v) @@ -46,8 +46,6 @@ (br $repeat|1) ) ) - (call $scoped/fn - (i32.const 42) - ) + (call $scoped/fn) ) ) diff --git a/tests/compiler/std/allocator_arena.optimized.wat b/tests/compiler/std/allocator_arena.optimized.wat index 09bae96f..afc7cd96 100644 --- a/tests/compiler/std/allocator_arena.optimized.wat +++ b/tests/compiler/std/allocator_arena.optimized.wat @@ -1,10 +1,12 @@ (module - (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $iiiv (func (param i32 i32 i32))) - (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iv (func (param i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -15,42 +17,26 @@ (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/__memory_allocate (; 1 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/allocator/arena/__memory_allocate (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (if (i32.gt_u - (get_local $0) - (i32.const 1073741824) - ) - (unreachable) - ) - (if - (i32.gt_u - (tee_local $2 + (tee_local $1 (i32.and (i32.add - (i32.add - (tee_local $1 - (get_global $~lib/allocator/arena/offset) - ) - (select - (get_local $0) - (i32.const 1) - (i32.gt_u - (get_local $0) - (i32.const 1) - ) - ) + (tee_local $0 + (get_global $~lib/allocator/arena/offset) ) - (i32.const 7) + (i32.const 49) ) (i32.const -8) ) ) (i32.shl - (tee_local $3 + (tee_local $2 (current_memory) ) (i32.const 16) @@ -60,14 +46,14 @@ (i32.lt_s (grow_memory (select - (get_local $3) - (tee_local $0 + (get_local $2) + (tee_local $3 (i32.shr_u (i32.and (i32.add (i32.sub - (get_local $2) (get_local $1) + (get_local $0) ) (i32.const 65535) ) @@ -77,8 +63,8 @@ ) ) (i32.gt_s + (get_local $2) (get_local $3) - (get_local $0) ) ) ) @@ -87,7 +73,7 @@ (if (i32.lt_s (grow_memory - (get_local $0) + (get_local $3) ) (i32.const 0) ) @@ -96,134 +82,87 @@ ) ) (set_global $~lib/allocator/arena/offset - (get_local $2) + (get_local $1) ) - (get_local $1) + (get_local $0) ) - (func $~lib/internal/memory/memset (; 2 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) - (if - (i32.eqz - (get_local $2) - ) - (return) - ) + (func $~lib/internal/memory/memset (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 18) ) (i32.store8 (i32.sub - (i32.add - (get_local $0) - (get_local $2) - ) - (i32.const 1) - ) - (get_local $1) - ) - (if - (i32.le_u - (get_local $2) - (i32.const 2) - ) - (return) - ) - (i32.store8 - (i32.add - (get_local $0) - (i32.const 1) - ) - (get_local $1) - ) - (i32.store8 - (i32.add - (get_local $0) - (i32.const 2) - ) - (get_local $1) - ) - (i32.store8 - (i32.sub - (tee_local $3 + (tee_local $1 (i32.add (get_local $0) - (get_local $2) + (i32.const 42) ) ) + (i32.const 1) + ) + (i32.const 18) + ) + (i32.store8 + (i32.add + (get_local $0) + (i32.const 1) + ) + (i32.const 18) + ) + (i32.store8 + (i32.add + (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 18) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $1) + (i32.const 2) + ) + (i32.const 18) + ) + (i32.store8 + (i32.sub + (get_local $1) (i32.const 3) ) - (get_local $1) - ) - (if - (i32.le_u - (get_local $2) - (i32.const 6) - ) - (return) + (i32.const 18) ) (i32.store8 (i32.add (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 18) ) (i32.store8 (i32.sub - (i32.add - (get_local $0) - (get_local $2) - ) + (get_local $1) (i32.const 4) ) - (get_local $1) - ) - (if - (i32.le_u - (get_local $2) - (i32.const 8) - ) - (return) - ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) + (i32.const 18) ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $1 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 303174162) ) (i32.store (i32.sub @@ -231,14 +170,17 @@ (get_local $0) (tee_local $2 (i32.and - (get_local $2) + (i32.sub + (i32.const 42) + (get_local $1) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 303174162) ) (if (i32.le_u @@ -252,18 +194,18 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $1 (i32.add (get_local $0) (get_local $2) @@ -271,14 +213,14 @@ ) (i32.const 12) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.sub - (get_local $3) + (get_local $1) (i32.const 8) ) - (get_local $1) + (i32.const 303174162) ) (if (i32.le_u @@ -292,32 +234,32 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $1 (i32.add (get_local $0) (get_local $2) @@ -325,33 +267,33 @@ ) (i32.const 28) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.sub - (get_local $3) + (get_local $1) (i32.const 24) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.sub - (get_local $3) + (get_local $1) (i32.const 20) ) - (get_local $1) + (i32.const 303174162) ) (i32.store (i32.sub - (get_local $3) + (get_local $1) (i32.const 16) ) - (get_local $1) + (i32.const 303174162) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $1 (i32.add (i32.and (get_local $0) @@ -365,20 +307,7 @@ (set_local $2 (i32.sub (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) + (get_local $1) ) ) (loop $continue|0 @@ -390,28 +319,28 @@ (block (i64.store (get_local $0) - (get_local $4) + (i64.const 1302123111085380114) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 1302123111085380114) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 1302123111085380114) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 1302123111085380114) ) (set_local $2 (i32.sub @@ -1816,9 +1745,13 @@ ) ) ) - (func $~lib/internal/memory/memmove (; 4 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memmove (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) + (set_local $2 + (i32.const 42) + ) (if (i32.eq (get_local $0) @@ -1832,7 +1765,7 @@ (i32.le_u (i32.add (get_local $1) - (get_local $2) + (i32.const 42) ) (get_local $0) ) @@ -1842,7 +1775,7 @@ (i32.le_u (i32.add (get_local $0) - (get_local $2) + (i32.const 42) ) (get_local $1) ) @@ -1854,7 +1787,7 @@ (call $~lib/internal/memory/memcpy (get_local $0) (get_local $1) - (get_local $2) + (i32.const 42) ) (return) ) @@ -2108,8 +2041,12 @@ ) ) ) - (func $~lib/internal/memory/memcmp (; 5 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/internal/memory/memcmp (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) + (set_local $2 + (i32.const 42) + ) (if (i32.eq (get_local $0) @@ -2178,7 +2115,7 @@ ) ) ) - (func $~lib/allocator/arena/__memory_free (; 6 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~lib/allocator/arena/__memory_free (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) (func $~lib/allocator/arena/__memory_reset (; 7 ;) (; has Stack IR ;) (type $v) @@ -2194,14 +2131,10 @@ (get_global $~lib/allocator/arena/startOffset) ) (set_global $std/allocator_arena/ptr1 - (call $~lib/allocator/arena/__memory_allocate - (i32.const 42) - ) + (call $~lib/allocator/arena/__memory_allocate) ) (set_global $std/allocator_arena/ptr2 - (call $~lib/allocator/arena/__memory_allocate - (i32.const 42) - ) + (call $~lib/allocator/arena/__memory_allocate) ) (if (i32.eq @@ -2220,8 +2153,6 @@ ) (call $~lib/internal/memory/memset (get_global $std/allocator_arena/ptr1) - (i32.const 18) - (i32.const 42) ) (block $break|0 (set_global $std/allocator_arena/i @@ -2268,7 +2199,6 @@ (call $~lib/internal/memory/memmove (get_global $std/allocator_arena/ptr2) (get_global $std/allocator_arena/ptr1) - (i32.const 42) ) (block $break|1 (set_global $std/allocator_arena/i @@ -2316,7 +2246,6 @@ (call $~lib/internal/memory/memcmp (get_global $std/allocator_arena/ptr1) (get_global $std/allocator_arena/ptr2) - (i32.const 42) ) (block (call $~lib/env/abort @@ -2328,17 +2257,11 @@ (unreachable) ) ) - (call $~lib/allocator/arena/__memory_free - (get_global $std/allocator_arena/ptr1) - ) - (call $~lib/allocator/arena/__memory_free - (get_global $std/allocator_arena/ptr2) - ) + (call $~lib/allocator/arena/__memory_free) + (call $~lib/allocator/arena/__memory_free) (call $~lib/allocator/arena/__memory_reset) (set_global $std/allocator_arena/ptr1 - (call $~lib/allocator/arena/__memory_allocate - (i32.const 42) - ) + (call $~lib/allocator/arena/__memory_allocate) ) (if (i32.ne diff --git a/tests/compiler/std/array-access.optimized.wat b/tests/compiler/std/array-access.optimized.wat index 6b8537a4..c11c6958 100644 --- a/tests/compiler/std/array-access.optimized.wat +++ b/tests/compiler/std/array-access.optimized.wat @@ -1,9 +1,9 @@ (module (type $ii (func (param i32) (result i32))) (type $iii (func (param i32 i32) (result i32))) - (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 16) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") @@ -60,8 +60,8 @@ ) ) ) - (func $~lib/internal/string/compareUnsafe (; 4 ;) (; has Stack IR ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) - (local $5 i32) + (func $~lib/internal/string/compareUnsafe (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) (set_local $1 (i32.add (get_local $0) @@ -71,22 +71,13 @@ ) ) ) - (set_local $2 - (i32.add - (get_local $2) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) - ) (loop $continue|0 (if (tee_local $0 (if (result i32) - (get_local $4) + (get_local $3) (i32.eqz - (tee_local $5 + (tee_local $4 (i32.sub (i32.load16_u offset=4 (get_local $1) @@ -97,13 +88,13 @@ ) ) ) - (get_local $4) + (get_local $3) ) ) (block - (set_local $4 + (set_local $3 (i32.sub - (get_local $4) + (get_local $3) (i32.const 1) ) ) @@ -123,11 +114,12 @@ ) ) ) - (get_local $5) + (get_local $4) ) - (func $~lib/string/String#startsWith (; 5 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#startsWith (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) (if (i32.eqz (get_local $0) @@ -142,47 +134,30 @@ (unreachable) ) ) - (if - (i32.eqz - (get_local $1) - ) - (set_local $1 - (i32.const 48) - ) - ) (if (i32.gt_s (i32.add - (tee_local $4 + (tee_local $2 (i32.load - (get_local $1) + (i32.const 8) ) ) (tee_local $3 (select - (tee_local $3 - (select - (get_local $2) - (i32.const 0) - (i32.gt_s - (get_local $2) - (i32.const 0) - ) - ) - ) - (tee_local $2 + (i32.const 0) + (tee_local $1 (i32.load (get_local $0) ) ) (i32.lt_s - (get_local $3) - (get_local $2) + (i32.const 0) + (get_local $1) ) ) ) ) - (get_local $2) + (get_local $1) ) (return (i32.const 0) @@ -192,9 +167,8 @@ (call $~lib/internal/string/compareUnsafe (get_local $0) (get_local $3) - (get_local $1) - (i32.const 0) - (get_local $4) + (i32.const 8) + (get_local $2) ) ) ) @@ -204,8 +178,6 @@ (get_local $0) (i32.const 0) ) - (i32.const 8) - (i32.const 0) ) ) (func $std/array-access/stringArrayArrayPropertyAccess (; 7 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) @@ -228,8 +200,6 @@ ) (i32.const 1) ) - (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 5bcadd76..59c6cdc8 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -4,6 +4,8 @@ (type $ii (func (param i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -204,37 +206,36 @@ ) (get_local $1) ) - (func $~lib/memory/memory.allocate (; 6 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 8) ) ) - (func $~lib/internal/memory/memset (; 7 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 7 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -244,37 +245,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -284,74 +285,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -361,37 +351,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -401,66 +391,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -471,60 +461,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -539,62 +516,38 @@ ) ) ) - (func $~lib/array/Array#constructor (; 8 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (if - (i32.gt_u - (get_local $1) - (i32.const 1073741816) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 136) - (i32.const 23) - (i32.const 39) - ) - (unreachable) - ) - ) - (set_local $2 + (func $~lib/array/Array#constructor (; 8 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (local $1 i32) + (set_local $1 (call $~lib/internal/arraybuffer/allocateUnsafe - (get_local $1) - ) - ) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 8) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) + (i32.const 3) ) ) (i32.store - (get_local $0) - (get_local $2) + (tee_local $0 + (call $~lib/memory/memory.allocate) + ) + (i32.const 0) ) (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store (get_local $0) (get_local $1) ) + (i32.store offset=4 + (get_local $0) + (i32.const 3) + ) (call $~lib/internal/memory/memset (i32.add - (get_local $2) + (get_local $1) (i32.const 8) ) - (i32.const 0) - (get_local $1) + (i32.const 3) ) (get_local $0) ) @@ -609,68 +562,38 @@ (get_local $2) ) ) - (func $~lib/array/Array#constructor (; 10 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (if - (i32.gt_u - (get_local $1) - (i32.const 268435454) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 136) - (i32.const 23) - (i32.const 39) - ) - (unreachable) - ) - ) - (set_local $2 + (func $~lib/array/Array#constructor (; 10 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (local $1 i32) + (set_local $1 (call $~lib/internal/arraybuffer/allocateUnsafe - (tee_local $3 - (i32.shl - (get_local $1) - (i32.const 2) - ) - ) - ) - ) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 8) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) + (i32.const 12) ) ) (i32.store - (get_local $0) - (get_local $2) + (tee_local $0 + (call $~lib/memory/memory.allocate) + ) + (i32.const 0) ) (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store (get_local $0) (get_local $1) ) + (i32.store offset=4 + (get_local $0) + (i32.const 3) + ) (call $~lib/internal/memory/memset (i32.add - (get_local $2) + (get_local $1) (i32.const 8) ) - (i32.const 0) - (get_local $3) + (i32.const 12) ) (get_local $0) ) @@ -857,10 +780,7 @@ ) (call $~lib/array/Array#__unchecked_set (tee_local $0 - (call $~lib/array/Array#constructor - (i32.const 0) - (i32.const 3) - ) + (call $~lib/array/Array#constructor) ) (i32.const 0) (get_global $std/array-literal/i) @@ -972,10 +892,7 @@ ) (call $~lib/array/Array#__unchecked_set (tee_local $0 - (call $~lib/array/Array#constructor - (i32.const 0) - (i32.const 3) - ) + (call $~lib/array/Array#constructor) ) (i32.const 0) (get_global $std/array-literal/i) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index bd1e7d2c..c167785b 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -17,9 +17,16 @@ (type $FFi (func (param f64 f64) (result i32))) (type $iiF (func (param i32 i32) (result f64))) (type $Fi (func (param f64) (result i32))) - (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) - (type $iiiiiv (func (param i32 i32 i32 i32 i32))) (type $v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) @@ -249,32 +256,31 @@ (get_local $0) ) ) - (func $~lib/internal/memory/memset (; 6 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -284,37 +290,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -324,74 +330,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -401,37 +396,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -441,66 +436,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -511,60 +506,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -579,12 +561,13 @@ ) ) ) - (func $~lib/array/Array#constructor (; 7 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 7 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (if (i32.gt_u - (get_local $1) + (get_local $0) (i32.const 268435454) ) (block @@ -601,48 +584,40 @@ (call $~lib/internal/arraybuffer/allocateUnsafe (tee_local $3 (i32.shl - (get_local $1) + (get_local $0) (i32.const 2) ) ) ) ) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 8) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) + (i32.store + (tee_local $1 + (call $~lib/memory/memory.allocate + (i32.const 8) ) ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) ) (i32.store - (get_local $0) + (get_local $1) (get_local $2) ) (i32.store offset=4 - (get_local $0) (get_local $1) + (get_local $0) ) (call $~lib/internal/memory/memset (i32.add (get_local $2) (i32.const 8) ) - (i32.const 0) (get_local $3) ) - (get_local $0) + (get_local $1) ) (func $std/array/internalCapacity (; 8 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) (i32.shr_s @@ -2383,7 +2358,6 @@ ) (get_local $2) ) - (i32.const 0) (i32.sub (get_local $1) (get_local $2) @@ -2414,7 +2388,6 @@ ) (get_local $2) ) - (i32.const 0) (i32.sub (get_local $1) (get_local $2) @@ -3030,101 +3003,66 @@ ) (i32.const 0) ) - (func $~lib/array/Array#splice (; 20 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (if - (i32.lt_s - (get_local $2) - (i32.const 1) - ) - (return) - ) - (set_local $3 - (i32.load offset=4 - (get_local $0) - ) - ) - (if - (i32.lt_s - (get_local $1) - (i32.const 0) - ) - (set_local $1 - (select - (tee_local $1 - (i32.add - (get_local $3) - (get_local $1) - ) - ) - (i32.const 0) - (i32.gt_s - (get_local $1) - (i32.const 0) - ) - ) - ) - ) + (func $~lib/array/Array#splice (; 20 ;) (; has Stack IR ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) (if (i32.ge_s - (get_local $1) - (get_local $3) + (i32.const 1) + (tee_local $2 + (i32.load offset=4 + (get_local $0) + ) + ) ) (return) ) (call $~lib/internal/memory/memmove (i32.add - (i32.add - (tee_local $4 + (tee_local $1 + (i32.add (i32.load (get_local $0) ) + (i32.const 8) ) - (i32.const 8) - ) - (i32.shl - (get_local $1) - (i32.const 2) ) + (i32.const 4) ) (i32.add - (i32.add - (get_local $4) - (i32.const 8) - ) + (get_local $1) (i32.shl (i32.add - (get_local $1) - (tee_local $2 + (tee_local $1 (select - (get_local $2) + (i32.const 1) (tee_local $1 (i32.sub - (get_local $3) - (get_local $1) + (get_local $2) + (i32.const 1) ) ) (i32.lt_s - (get_local $2) + (i32.const 1) (get_local $1) ) ) ) + (i32.const 1) ) (i32.const 2) ) ) (i32.shl - (get_local $2) + (get_local $1) (i32.const 2) ) ) (i32.store offset=4 (get_local $0) (i32.sub - (get_local $3) (get_local $2) + (get_local $1) ) ) ) @@ -3650,24 +3588,23 @@ (get_local $0) ) ) - (func $~lib/array/Array#map (; 45 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#map (; 45 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - (set_local $4 + (set_local $3 (i32.load (get_local $0) ) ) - (set_local $7 + (set_local $6 (i32.load - (tee_local $6 + (tee_local $5 (call $~lib/array/Array#constructor - (i32.const 0) - (tee_local $5 + (tee_local $4 (i32.load offset=4 (get_local $0) ) @@ -3679,15 +3616,15 @@ (block $break|0 (loop $repeat|0 (if - (tee_local $3 + (tee_local $2 (i32.lt_s - (get_local $2) - (get_local $5) + (get_local $1) + (get_local $4) ) ) - (set_local $3 + (set_local $2 (i32.lt_s - (get_local $2) + (get_local $1) (i32.load offset=4 (get_local $0) ) @@ -3696,7 +3633,7 @@ ) (br_if $break|0 (i32.eqz - (get_local $3) + (get_local $2) ) ) (set_global $~argc @@ -3704,37 +3641,36 @@ ) (f32.store offset=8 (i32.add - (get_local $7) - (i32.shl - (get_local $2) - (i32.const 2) + (get_local $6) + (tee_local $2 + (i32.shl + (get_local $1) + (i32.const 2) + ) ) ) (call_indirect (type $iiif) (i32.load offset=8 (i32.add - (get_local $4) - (i32.shl - (get_local $2) - (i32.const 2) - ) + (get_local $3) + (get_local $2) ) ) - (get_local $2) - (get_local $0) (get_local $1) + (get_local $0) + (i32.const 20) ) ) - (set_local $2 + (set_local $1 (i32.add - (get_local $2) + (get_local $1) (i32.const 1) ) ) (br $repeat|0) ) ) - (get_local $6) + (get_local $5) ) (func $~lib/array/Array#__get (; 46 ;) (; has Stack IR ;) (type $iif) (param $0 i32) (param $1 i32) (result f32) (if (result f32) @@ -3794,7 +3730,6 @@ (i32.load (tee_local $6 (call $~lib/array/Array#constructor - (i32.const 0) (tee_local $5 (i32.load offset=4 (get_local $0) @@ -3912,7 +3847,6 @@ (set_local $4 (call $~lib/array/Array#constructor (i32.const 0) - (i32.const 0) ) ) (block $break|0 @@ -4266,27 +4200,24 @@ ) ) ) - (func $~lib/internal/array/insertionSort (; 65 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/internal/array/insertionSort (; 65 ;) (; has Stack IR ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) - (local $5 i32) + (local $5 f32) (local $6 f32) - (local $7 f32) - (local $8 i32) + (local $7 i32) (block $break|0 (loop $repeat|0 (br_if $break|0 (i32.ge_s (get_local $4) - (get_local $2) + (get_local $1) ) ) - (set_local $6 + (set_local $5 (f32.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (get_local $4) (i32.const 2) @@ -4294,7 +4225,7 @@ ) ) ) - (set_local $5 + (set_local $3 (i32.sub (get_local $4) (i32.const 1) @@ -4304,19 +4235,16 @@ (loop $continue|1 (if (i32.ge_s - (get_local $5) + (get_local $3) (i32.const 0) ) (block - (set_local $7 + (set_local $6 (f32.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $5) + (get_local $3) (i32.const 2) ) ) @@ -4328,36 +4256,33 @@ (br_if $break|1 (i32.ge_s (call_indirect (type $ffi) + (get_local $5) (get_local $6) - (get_local $7) - (get_local $3) + (get_local $2) ) (i32.const 0) ) ) - (set_local $5 + (set_local $3 (i32.sub - (tee_local $8 - (get_local $5) + (tee_local $7 + (get_local $3) ) (i32.const 1) ) ) (f32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (i32.add - (get_local $8) + (get_local $7) (i32.const 1) ) (i32.const 2) ) ) - (get_local $7) + (get_local $6) ) (br $continue|1) ) @@ -4366,19 +4291,16 @@ ) (f32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (i32.add - (get_local $5) + (get_local $3) (i32.const 1) ) (i32.const 2) ) ) - (get_local $6) + (get_local $5) ) (set_local $4 (i32.add @@ -4390,24 +4312,24 @@ ) ) ) - (func $~lib/allocator/arena/__memory_free (; 66 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~lib/allocator/arena/__memory_free (; 66 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) - (func $~lib/internal/array/weakHeapSort (; 67 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/internal/array/weakHeapSort (; 67 ;) (; has Stack IR ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) + (local $6 f32) (local $7 f32) (local $8 i32) - (local $9 f32) (call $~lib/internal/memory/memset (tee_local $8 (call $~lib/allocator/arena/__memory_allocate - (tee_local $6 + (tee_local $5 (i32.shl (i32.shr_s (i32.add - (get_local $2) + (get_local $1) (i32.const 31) ) (i32.const 5) @@ -4417,31 +4339,30 @@ ) ) ) - (i32.const 0) - (get_local $6) + (get_local $5) ) (block $break|0 - (set_local $4 + (set_local $3 (i32.sub - (get_local $2) + (get_local $1) (i32.const 1) ) ) (loop $repeat|0 (br_if $break|0 (i32.le_s - (get_local $4) + (get_local $3) (i32.const 0) ) ) - (set_local $6 - (get_local $4) + (set_local $5 + (get_local $3) ) (loop $continue|1 (if (i32.eq (i32.and - (get_local $6) + (get_local $5) (i32.const 1) ) (i32.and @@ -4451,7 +4372,7 @@ (get_local $8) (i32.shl (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 6) ) (i32.const 2) @@ -4460,7 +4381,7 @@ ) (i32.and (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 1) ) (i32.const 31) @@ -4470,9 +4391,9 @@ ) ) (block - (set_local $6 + (set_local $5 (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 1) ) ) @@ -4480,17 +4401,14 @@ ) ) ) - (set_local $9 + (set_local $7 (f32.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (tee_local $5 + (tee_local $4 (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 1) ) ) @@ -4499,15 +4417,12 @@ ) ) ) - (set_local $7 + (set_local $6 (f32.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $4) + (get_local $3) (i32.const 2) ) ) @@ -4519,20 +4434,20 @@ (if (i32.lt_s (call_indirect (type $ffi) - (get_local $9) (get_local $7) - (get_local $3) + (get_local $6) + (get_local $2) ) (i32.const 0) ) (block (i32.store - (tee_local $6 + (tee_local $5 (i32.add (get_local $8) (i32.shl (i32.shr_s - (get_local $4) + (get_local $3) (i32.const 5) ) (i32.const 2) @@ -4541,12 +4456,12 @@ ) (i32.xor (i32.load - (get_local $6) + (get_local $5) ) (i32.shl (i32.const 1) (i32.and - (get_local $4) + (get_local $3) (i32.const 31) ) ) @@ -4554,35 +4469,29 @@ ) (f32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $4) - (i32.const 2) - ) - ) - (get_local $9) - ) - (f32.store offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) - (i32.shl - (get_local $5) + (get_local $3) (i32.const 2) ) ) (get_local $7) ) + (f32.store offset=8 + (i32.add + (get_local $0) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $6) + ) ) ) - (set_local $4 + (set_local $3 (i32.sub - (get_local $4) + (get_local $3) (i32.const 1) ) ) @@ -4590,68 +4499,52 @@ ) ) (block $break|2 - (set_local $4 + (set_local $3 (i32.sub - (get_local $2) + (get_local $1) (i32.const 1) ) ) (loop $repeat|2 (br_if $break|2 (i32.lt_s - (get_local $4) + (get_local $3) (i32.const 2) ) ) - (set_local $7 + (set_local $6 (f32.load offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) ) ) (f32.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (f32.load offset=8 - (i32.add + (tee_local $1 (i32.add (get_local $0) - (get_local $1) - ) - (i32.shl - (get_local $4) - (i32.const 2) + (i32.shl + (get_local $3) + (i32.const 2) + ) ) ) ) ) (f32.store offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) - (i32.shl - (get_local $4) - (i32.const 2) - ) - ) - (get_local $7) + (get_local $1) + (get_local $6) ) - (set_local $5 + (set_local $4 (i32.const 1) ) (loop $continue|3 (if (i32.lt_s - (tee_local $6 + (tee_local $5 (i32.add (i32.shl - (get_local $5) + (get_local $4) (i32.const 1) ) (i32.and @@ -4661,7 +4554,7 @@ (get_local $8) (i32.shl (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 5) ) (i32.const 2) @@ -4669,7 +4562,7 @@ ) ) (i32.and - (get_local $5) + (get_local $4) (i32.const 31) ) ) @@ -4677,11 +4570,11 @@ ) ) ) - (get_local $4) + (get_local $3) ) (block - (set_local $5 - (get_local $6) + (set_local $4 + (get_local $5) ) (br $continue|3) ) @@ -4690,27 +4583,21 @@ (loop $continue|4 (if (i32.gt_s - (get_local $5) + (get_local $4) (i32.const 0) ) (block + (set_local $6 + (f32.load offset=8 + (get_local $0) + ) + ) (set_local $7 (f32.load offset=8 (i32.add (get_local $0) - (get_local $1) - ) - ) - ) - (set_local $9 - (f32.load offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) (i32.shl - (get_local $5) + (get_local $4) (i32.const 2) ) ) @@ -4722,20 +4609,20 @@ (if (i32.lt_s (call_indirect (type $ffi) + (get_local $6) (get_local $7) - (get_local $9) - (get_local $3) + (get_local $2) ) (i32.const 0) ) (block (i32.store - (tee_local $2 + (tee_local $1 (i32.add (get_local $8) (i32.shl (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 5) ) (i32.const 2) @@ -4744,12 +4631,12 @@ ) (i32.xor (i32.load - (get_local $2) + (get_local $1) ) (i32.shl (i32.const 1) (i32.and - (get_local $5) + (get_local $4) (i32.const 31) ) ) @@ -4757,29 +4644,23 @@ ) (f32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $5) + (get_local $4) (i32.const 2) ) ) - (get_local $7) + (get_local $6) ) (f32.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) - (get_local $9) + (get_local $0) + (get_local $7) ) ) ) - (set_local $5 + (set_local $4 (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 1) ) ) @@ -4787,50 +4668,35 @@ ) ) ) - (set_local $4 + (set_local $3 (i32.sub - (get_local $4) + (get_local $3) (i32.const 1) ) ) (br $repeat|2) ) ) - (call $~lib/allocator/arena/__memory_free - (get_local $8) - ) - (set_local $7 + (call $~lib/allocator/arena/__memory_free) + (set_local $6 (f32.load offset=8 - (i32.add + (tee_local $1 (i32.add (get_local $0) - (get_local $1) + (i32.const 4) ) - (i32.const 4) ) ) ) (f32.store offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) - (i32.const 4) - ) + (get_local $1) (f32.load offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) ) ) (f32.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) - (get_local $7) + (get_local $0) + (get_local $6) ) ) (func $~lib/array/Array#sort (; 68 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) @@ -4927,13 +4793,11 @@ ) (call $~lib/internal/array/insertionSort (get_local $2) - (i32.const 0) (get_local $3) (get_local $1) ) (call $~lib/internal/array/weakHeapSort (get_local $2) - (i32.const 0) (get_local $3) (get_local $1) ) @@ -4984,7 +4848,8 @@ ) ) ) - (func $~lib/array/Array#sort|trampoline (; 70 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort|trampoline (; 70 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -5009,32 +4874,26 @@ (get_local $0) ) ) - (func $std/array/isArraysEqual (; 72 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 72 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) (if - (i32.eqz - (get_local $2) + (i32.ne + (i32.load offset=4 + (get_local $0) + ) + (i32.load + (i32.const 484) + ) ) - (block - (if - (i32.ne - (i32.load offset=4 - (get_local $0) - ) - (i32.load offset=4 - (get_local $1) - ) - ) - (return - (i32.const 0) - ) - ) - (set_local $2 - (i32.load offset=4 - (get_local $0) - ) - ) + (return + (i32.const 0) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $0) ) ) (block $break|0 @@ -5042,48 +4901,48 @@ (block $continue|0 (br_if $break|0 (i32.ge_s + (get_local $1) (get_local $3) - (get_local $2) ) ) (if - (tee_local $4 + (tee_local $2 (call $~lib/builtins/isNaN (call $~lib/array/Array#__get (get_local $0) - (get_local $3) + (get_local $1) ) ) ) - (set_local $4 + (set_local $2 (i32.eq (call $~lib/builtins/isNaN (call $~lib/array/Array#__get (get_local $0) - (get_local $3) + (get_local $1) ) ) (call $~lib/builtins/isNaN (call $~lib/array/Array#__get + (i32.const 480) (get_local $1) - (get_local $3) ) ) ) ) ) (br_if $continue|0 - (get_local $4) + (get_local $2) ) (if (f32.ne (call $~lib/array/Array#__get (get_local $0) - (get_local $3) + (get_local $1) ) (call $~lib/array/Array#__get + (i32.const 480) (get_local $1) - (get_local $3) ) ) (return @@ -5091,9 +4950,9 @@ ) ) ) - (set_local $3 + (set_local $1 (i32.add - (get_local $3) + (get_local $1) (i32.const 1) ) ) @@ -5102,27 +4961,24 @@ ) (i32.const 1) ) - (func $~lib/internal/array/insertionSort (; 73 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/internal/array/insertionSort (; 73 ;) (; has Stack IR ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) - (local $5 i32) + (local $5 f64) (local $6 f64) - (local $7 f64) - (local $8 i32) + (local $7 i32) (block $break|0 (loop $repeat|0 (br_if $break|0 (i32.ge_s (get_local $4) - (get_local $2) + (get_local $1) ) ) - (set_local $6 + (set_local $5 (f64.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (get_local $4) (i32.const 3) @@ -5130,7 +4986,7 @@ ) ) ) - (set_local $5 + (set_local $3 (i32.sub (get_local $4) (i32.const 1) @@ -5140,19 +4996,16 @@ (loop $continue|1 (if (i32.ge_s - (get_local $5) + (get_local $3) (i32.const 0) ) (block - (set_local $7 + (set_local $6 (f64.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $5) + (get_local $3) (i32.const 3) ) ) @@ -5164,36 +5017,33 @@ (br_if $break|1 (i32.ge_s (call_indirect (type $FFi) + (get_local $5) (get_local $6) - (get_local $7) - (get_local $3) + (get_local $2) ) (i32.const 0) ) ) - (set_local $5 + (set_local $3 (i32.sub - (tee_local $8 - (get_local $5) + (tee_local $7 + (get_local $3) ) (i32.const 1) ) ) (f64.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (i32.add - (get_local $8) + (get_local $7) (i32.const 1) ) (i32.const 3) ) ) - (get_local $7) + (get_local $6) ) (br $continue|1) ) @@ -5202,19 +5052,16 @@ ) (f64.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (i32.add - (get_local $5) + (get_local $3) (i32.const 1) ) (i32.const 3) ) ) - (get_local $6) + (get_local $5) ) (set_local $4 (i32.add @@ -5226,21 +5073,21 @@ ) ) ) - (func $~lib/internal/array/weakHeapSort (; 74 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/internal/array/weakHeapSort (; 74 ;) (; has Stack IR ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) + (local $6 f64) (local $7 f64) (local $8 i32) - (local $9 f64) (call $~lib/internal/memory/memset (tee_local $8 (call $~lib/allocator/arena/__memory_allocate - (tee_local $6 + (tee_local $5 (i32.shl (i32.shr_s (i32.add - (get_local $2) + (get_local $1) (i32.const 31) ) (i32.const 5) @@ -5250,31 +5097,30 @@ ) ) ) - (i32.const 0) - (get_local $6) + (get_local $5) ) (block $break|0 - (set_local $4 + (set_local $3 (i32.sub - (get_local $2) + (get_local $1) (i32.const 1) ) ) (loop $repeat|0 (br_if $break|0 (i32.le_s - (get_local $4) + (get_local $3) (i32.const 0) ) ) - (set_local $6 - (get_local $4) + (set_local $5 + (get_local $3) ) (loop $continue|1 (if (i32.eq (i32.and - (get_local $6) + (get_local $5) (i32.const 1) ) (i32.and @@ -5284,7 +5130,7 @@ (get_local $8) (i32.shl (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 6) ) (i32.const 2) @@ -5293,7 +5139,7 @@ ) (i32.and (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 1) ) (i32.const 31) @@ -5303,9 +5149,9 @@ ) ) (block - (set_local $6 + (set_local $5 (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 1) ) ) @@ -5313,17 +5159,14 @@ ) ) ) - (set_local $9 + (set_local $7 (f64.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (tee_local $5 + (tee_local $4 (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 1) ) ) @@ -5332,15 +5175,12 @@ ) ) ) - (set_local $7 + (set_local $6 (f64.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $4) + (get_local $3) (i32.const 3) ) ) @@ -5352,20 +5192,20 @@ (if (i32.lt_s (call_indirect (type $FFi) - (get_local $9) (get_local $7) - (get_local $3) + (get_local $6) + (get_local $2) ) (i32.const 0) ) (block (i32.store - (tee_local $6 + (tee_local $5 (i32.add (get_local $8) (i32.shl (i32.shr_s - (get_local $4) + (get_local $3) (i32.const 5) ) (i32.const 2) @@ -5374,12 +5214,12 @@ ) (i32.xor (i32.load - (get_local $6) + (get_local $5) ) (i32.shl (i32.const 1) (i32.and - (get_local $4) + (get_local $3) (i32.const 31) ) ) @@ -5387,35 +5227,29 @@ ) (f64.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $4) - (i32.const 3) - ) - ) - (get_local $9) - ) - (f64.store offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) - (i32.shl - (get_local $5) + (get_local $3) (i32.const 3) ) ) (get_local $7) ) + (f64.store offset=8 + (i32.add + (get_local $0) + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (get_local $6) + ) ) ) - (set_local $4 + (set_local $3 (i32.sub - (get_local $4) + (get_local $3) (i32.const 1) ) ) @@ -5423,68 +5257,52 @@ ) ) (block $break|2 - (set_local $4 + (set_local $3 (i32.sub - (get_local $2) + (get_local $1) (i32.const 1) ) ) (loop $repeat|2 (br_if $break|2 (i32.lt_s - (get_local $4) + (get_local $3) (i32.const 2) ) ) - (set_local $7 + (set_local $6 (f64.load offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) ) ) (f64.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (f64.load offset=8 - (i32.add + (tee_local $1 (i32.add (get_local $0) - (get_local $1) - ) - (i32.shl - (get_local $4) - (i32.const 3) + (i32.shl + (get_local $3) + (i32.const 3) + ) ) ) ) ) (f64.store offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) - (i32.shl - (get_local $4) - (i32.const 3) - ) - ) - (get_local $7) + (get_local $1) + (get_local $6) ) - (set_local $5 + (set_local $4 (i32.const 1) ) (loop $continue|3 (if (i32.lt_s - (tee_local $6 + (tee_local $5 (i32.add (i32.shl - (get_local $5) + (get_local $4) (i32.const 1) ) (i32.and @@ -5494,7 +5312,7 @@ (get_local $8) (i32.shl (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 5) ) (i32.const 2) @@ -5502,7 +5320,7 @@ ) ) (i32.and - (get_local $5) + (get_local $4) (i32.const 31) ) ) @@ -5510,11 +5328,11 @@ ) ) ) - (get_local $4) + (get_local $3) ) (block - (set_local $5 - (get_local $6) + (set_local $4 + (get_local $5) ) (br $continue|3) ) @@ -5523,27 +5341,21 @@ (loop $continue|4 (if (i32.gt_s - (get_local $5) + (get_local $4) (i32.const 0) ) (block + (set_local $6 + (f64.load offset=8 + (get_local $0) + ) + ) (set_local $7 (f64.load offset=8 (i32.add (get_local $0) - (get_local $1) - ) - ) - ) - (set_local $9 - (f64.load offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) (i32.shl - (get_local $5) + (get_local $4) (i32.const 3) ) ) @@ -5555,20 +5367,20 @@ (if (i32.lt_s (call_indirect (type $FFi) + (get_local $6) (get_local $7) - (get_local $9) - (get_local $3) + (get_local $2) ) (i32.const 0) ) (block (i32.store - (tee_local $2 + (tee_local $1 (i32.add (get_local $8) (i32.shl (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 5) ) (i32.const 2) @@ -5577,12 +5389,12 @@ ) (i32.xor (i32.load - (get_local $2) + (get_local $1) ) (i32.shl (i32.const 1) (i32.and - (get_local $5) + (get_local $4) (i32.const 31) ) ) @@ -5590,29 +5402,23 @@ ) (f64.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $5) + (get_local $4) (i32.const 3) ) ) - (get_local $7) + (get_local $6) ) (f64.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) - (get_local $9) + (get_local $0) + (get_local $7) ) ) ) - (set_local $5 + (set_local $4 (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 1) ) ) @@ -5620,50 +5426,35 @@ ) ) ) - (set_local $4 + (set_local $3 (i32.sub - (get_local $4) + (get_local $3) (i32.const 1) ) ) (br $repeat|2) ) ) - (call $~lib/allocator/arena/__memory_free - (get_local $8) - ) - (set_local $7 + (call $~lib/allocator/arena/__memory_free) + (set_local $6 (f64.load offset=8 - (i32.add + (tee_local $1 (i32.add (get_local $0) - (get_local $1) + (i32.const 8) ) - (i32.const 8) ) ) ) (f64.store offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) - (i32.const 8) - ) + (get_local $1) (f64.load offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) ) ) (f64.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) - (get_local $7) + (get_local $0) + (get_local $6) ) ) (func $~lib/array/Array#sort (; 75 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) @@ -5760,13 +5551,11 @@ ) (call $~lib/internal/array/insertionSort (get_local $2) - (i32.const 0) (get_local $3) (get_local $1) ) (call $~lib/internal/array/weakHeapSort (get_local $2) - (i32.const 0) (get_local $3) (get_local $1) ) @@ -5817,7 +5606,8 @@ ) ) ) - (func $~lib/array/Array#sort|trampoline (; 77 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort|trampoline (; 77 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -5869,32 +5659,26 @@ (get_local $0) ) ) - (func $std/array/isArraysEqual (; 80 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 80 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) (if - (i32.eqz - (get_local $2) + (i32.ne + (i32.load offset=4 + (get_local $0) + ) + (i32.load + (i32.const 756) + ) ) - (block - (if - (i32.ne - (i32.load offset=4 - (get_local $0) - ) - (i32.load offset=4 - (get_local $1) - ) - ) - (return - (i32.const 0) - ) - ) - (set_local $2 - (i32.load offset=4 - (get_local $0) - ) - ) + (return + (i32.const 0) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $0) ) ) (block $break|0 @@ -5902,48 +5686,48 @@ (block $continue|0 (br_if $break|0 (i32.ge_s + (get_local $1) (get_local $3) - (get_local $2) ) ) (if - (tee_local $4 + (tee_local $2 (call $~lib/builtins/isNaN (call $~lib/array/Array#__get (get_local $0) - (get_local $3) + (get_local $1) ) ) ) - (set_local $4 + (set_local $2 (i32.eq (call $~lib/builtins/isNaN (call $~lib/array/Array#__get (get_local $0) - (get_local $3) + (get_local $1) ) ) (call $~lib/builtins/isNaN (call $~lib/array/Array#__get + (i32.const 752) (get_local $1) - (get_local $3) ) ) ) ) ) (br_if $continue|0 - (get_local $4) + (get_local $2) ) (if (f64.ne (call $~lib/array/Array#__get (get_local $0) - (get_local $3) + (get_local $1) ) (call $~lib/array/Array#__get + (i32.const 752) (get_local $1) - (get_local $3) ) ) (return @@ -5951,9 +5735,9 @@ ) ) ) - (set_local $3 + (set_local $1 (i32.add - (get_local $3) + (get_local $1) (i32.const 1) ) ) @@ -5962,27 +5746,24 @@ ) (i32.const 1) ) - (func $~lib/internal/array/insertionSort (; 81 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/internal/array/insertionSort (; 81 ;) (; has Stack IR ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) (block $break|0 (loop $repeat|0 (br_if $break|0 (i32.ge_s (get_local $4) - (get_local $2) + (get_local $1) ) ) - (set_local $7 + (set_local $6 (i32.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (get_local $4) (i32.const 2) @@ -5990,7 +5771,7 @@ ) ) ) - (set_local $5 + (set_local $3 (i32.sub (get_local $4) (i32.const 1) @@ -6000,19 +5781,16 @@ (loop $continue|1 (if (i32.ge_s - (get_local $5) + (get_local $3) (i32.const 0) ) (block - (set_local $6 + (set_local $5 (i32.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $5) + (get_local $3) (i32.const 2) ) ) @@ -6024,38 +5802,36 @@ (br_if $break|1 (i32.ge_s (call_indirect (type $iii) - (get_local $7) - (tee_local $8 - (get_local $6) - ) - (get_local $3) + (get_local $6) + (get_local $5) + (get_local $2) ) (i32.const 0) ) ) - (set_local $5 + (set_local $7 + (get_local $5) + ) + (set_local $3 (i32.sub - (tee_local $6 - (get_local $5) + (tee_local $5 + (get_local $3) ) (i32.const 1) ) ) (i32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (i32.add - (get_local $6) + (get_local $5) (i32.const 1) ) (i32.const 2) ) ) - (get_local $8) + (get_local $7) ) (br $continue|1) ) @@ -6064,19 +5840,16 @@ ) (i32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl (i32.add - (get_local $5) + (get_local $3) (i32.const 1) ) (i32.const 2) ) ) - (get_local $7) + (get_local $6) ) (set_local $4 (i32.add @@ -6088,21 +5861,21 @@ ) ) ) - (func $~lib/internal/array/weakHeapSort (; 82 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/internal/array/weakHeapSort (; 82 ;) (; has Stack IR ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) (call $~lib/internal/memory/memset - (tee_local $8 + (tee_local $7 (call $~lib/allocator/arena/__memory_allocate - (tee_local $7 + (tee_local $6 (i32.shl (i32.shr_s (i32.add - (get_local $2) + (get_local $1) (i32.const 31) ) (i32.const 5) @@ -6112,41 +5885,40 @@ ) ) ) - (i32.const 0) - (get_local $7) + (get_local $6) ) (block $break|0 - (set_local $4 + (set_local $3 (i32.sub - (get_local $2) + (get_local $1) (i32.const 1) ) ) (loop $repeat|0 (br_if $break|0 (i32.le_s - (get_local $4) + (get_local $3) (i32.const 0) ) ) - (set_local $5 - (get_local $4) + (set_local $4 + (get_local $3) ) (loop $continue|1 (if (i32.eq (i32.and - (get_local $5) + (get_local $4) (i32.const 1) ) (i32.and (i32.shr_u (i32.load (i32.add - (get_local $8) + (get_local $7) (i32.shl (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 6) ) (i32.const 2) @@ -6155,7 +5927,7 @@ ) (i32.and (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 1) ) (i32.const 31) @@ -6165,9 +5937,9 @@ ) ) (block - (set_local $5 + (set_local $4 (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 1) ) ) @@ -6175,17 +5947,14 @@ ) ) ) - (set_local $5 + (set_local $4 (i32.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (tee_local $6 + (tee_local $5 (i32.shr_s - (get_local $5) + (get_local $4) (i32.const 1) ) ) @@ -6194,15 +5963,12 @@ ) ) ) - (set_local $7 + (set_local $6 (i32.load offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $4) + (get_local $3) (i32.const 2) ) ) @@ -6214,20 +5980,20 @@ (if (i32.lt_s (call_indirect (type $iii) - (get_local $5) - (get_local $7) - (get_local $3) + (get_local $4) + (get_local $6) + (get_local $2) ) (i32.const 0) ) (block (i32.store - (tee_local $9 + (tee_local $8 (i32.add - (get_local $8) + (get_local $7) (i32.shl (i32.shr_s - (get_local $4) + (get_local $3) (i32.const 5) ) (i32.const 2) @@ -6236,12 +6002,12 @@ ) (i32.xor (i32.load - (get_local $9) + (get_local $8) ) (i32.shl (i32.const 1) (i32.and - (get_local $4) + (get_local $3) (i32.const 31) ) ) @@ -6249,35 +6015,29 @@ ) (i32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $4) + (get_local $3) (i32.const 2) ) ) - (get_local $5) + (get_local $4) ) (i32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $6) + (get_local $5) (i32.const 2) ) ) - (get_local $7) + (get_local $6) ) ) ) - (set_local $4 + (set_local $3 (i32.sub - (get_local $4) + (get_local $3) (i32.const 1) ) ) @@ -6285,78 +6045,62 @@ ) ) (block $break|2 - (set_local $4 + (set_local $3 (i32.sub - (get_local $2) + (get_local $1) (i32.const 1) ) ) (loop $repeat|2 (br_if $break|2 (i32.lt_s - (get_local $4) + (get_local $3) (i32.const 2) ) ) - (set_local $7 + (set_local $6 (i32.load offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) ) ) (i32.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.load offset=8 - (i32.add + (tee_local $1 (i32.add (get_local $0) - (get_local $1) - ) - (i32.shl - (get_local $4) - (i32.const 2) + (i32.shl + (get_local $3) + (i32.const 2) + ) ) ) ) ) (i32.store offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) - (i32.shl - (get_local $4) - (i32.const 2) - ) - ) - (get_local $7) + (get_local $1) + (get_local $6) ) - (set_local $6 + (set_local $5 (i32.const 1) ) (loop $continue|3 (if (i32.lt_s - (tee_local $5 + (tee_local $4 (i32.add (i32.shl - (get_local $6) + (get_local $5) (i32.const 1) ) (i32.and (i32.shr_u (i32.load (i32.add - (get_local $8) + (get_local $7) (i32.shl (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 5) ) (i32.const 2) @@ -6364,7 +6108,7 @@ ) ) (i32.and - (get_local $6) + (get_local $5) (i32.const 31) ) ) @@ -6372,11 +6116,11 @@ ) ) ) - (get_local $4) + (get_local $3) ) (block - (set_local $6 - (get_local $5) + (set_local $5 + (get_local $4) ) (br $continue|3) ) @@ -6385,27 +6129,21 @@ (loop $continue|4 (if (i32.gt_s - (get_local $6) + (get_local $5) (i32.const 0) ) (block - (set_local $7 + (set_local $6 + (i32.load offset=8 + (get_local $0) + ) + ) + (set_local $4 (i32.load offset=8 (i32.add (get_local $0) - (get_local $1) - ) - ) - ) - (set_local $5 - (i32.load offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) (i32.shl - (get_local $6) + (get_local $5) (i32.const 2) ) ) @@ -6417,20 +6155,20 @@ (if (i32.lt_s (call_indirect (type $iii) - (get_local $7) - (get_local $5) - (get_local $3) + (get_local $6) + (get_local $4) + (get_local $2) ) (i32.const 0) ) (block (i32.store - (tee_local $2 + (tee_local $1 (i32.add - (get_local $8) + (get_local $7) (i32.shl (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 5) ) (i32.const 2) @@ -6439,12 +6177,12 @@ ) (i32.xor (i32.load - (get_local $2) + (get_local $1) ) (i32.shl (i32.const 1) (i32.and - (get_local $6) + (get_local $5) (i32.const 31) ) ) @@ -6452,29 +6190,23 @@ ) (i32.store offset=8 (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) + (get_local $0) (i32.shl - (get_local $6) + (get_local $5) (i32.const 2) ) ) - (get_local $7) + (get_local $6) ) (i32.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) - (get_local $5) + (get_local $0) + (get_local $4) ) ) ) - (set_local $6 + (set_local $5 (i32.shr_s - (get_local $6) + (get_local $5) (i32.const 1) ) ) @@ -6482,50 +6214,35 @@ ) ) ) - (set_local $4 + (set_local $3 (i32.sub - (get_local $4) + (get_local $3) (i32.const 1) ) ) (br $repeat|2) ) ) - (call $~lib/allocator/arena/__memory_free - (get_local $8) - ) - (set_local $2 + (call $~lib/allocator/arena/__memory_free) + (set_local $1 (i32.load offset=8 - (i32.add + (tee_local $2 (i32.add (get_local $0) - (get_local $1) + (i32.const 4) ) - (i32.const 4) ) ) ) (i32.store offset=8 - (i32.add - (i32.add - (get_local $0) - (get_local $1) - ) - (i32.const 4) - ) - (i32.load offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) - ) - ) - (i32.store offset=8 - (i32.add - (get_local $0) - (get_local $1) - ) (get_local $2) + (i32.load offset=8 + (get_local $0) + ) + ) + (i32.store offset=8 + (get_local $0) + (get_local $1) ) ) (func $~lib/array/Array#sort (; 83 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) @@ -6621,13 +6338,11 @@ ) (call $~lib/internal/array/insertionSort (get_local $3) - (i32.const 0) (get_local $2) (get_local $1) ) (call $~lib/internal/array/weakHeapSort (get_local $3) - (i32.const 0) (get_local $2) (get_local $1) ) @@ -6640,7 +6355,8 @@ (get_local $1) ) ) - (func $~lib/array/Array#sort|trampoline (; 85 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort|trampoline (; 85 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -6734,7 +6450,8 @@ ) ) ) - (func $~lib/array/Array#sort|trampoline (; 88 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort|trampoline (; 88 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -6757,7 +6474,6 @@ (local $1 i32) (set_local $1 (call $~lib/array/Array#constructor - (i32.const 0) (get_local $0) ) ) @@ -6871,7 +6587,6 @@ (local $1 i32) (set_local $0 (call $~lib/array/Array#constructor - (i32.const 0) (get_local $0) ) ) @@ -7001,18 +6716,15 @@ (get_local $0) ) ) - (func $std/array/createReverseOrderedNestedArray (; 96 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $std/array/createReverseOrderedNestedArray (; 96 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (local $1 i32) (set_local $1 (call $~lib/array/Array#constructor - (i32.const 0) - (get_local $0) + (i32.const 512) ) ) (block $break|0 - (set_local $0 - (i32.const 0) - ) (loop $repeat|0 (br_if $break|0 (i32.ge_s @@ -7026,7 +6738,6 @@ (get_local $1) (get_local $0) (call $~lib/array/Array#constructor - (i32.const 0) (i32.const 1) ) ) @@ -7157,7 +6868,6 @@ ) (call $~lib/internal/array/insertionSort (get_local $3) - (i32.const 0) (get_local $2) (get_local $1) ) @@ -7185,34 +6895,27 @@ ) ) ) - (func $std/array/Proxy#constructor (; 100 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 4) - ) + (func $std/array/Proxy#constructor (; 100 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (i32.store + (tee_local $1 + (call $~lib/memory/memory.allocate + (i32.const 4) ) - (get_local $1) ) + (get_local $0) ) - (get_local $0) + (get_local $1) ) - (func $std/array/createReverseOrderedElementsArray (; 101 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $std/array/createReverseOrderedElementsArray (; 101 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (local $1 i32) (set_local $1 (call $~lib/array/Array#constructor - (i32.const 0) - (get_local $0) + (i32.const 512) ) ) (block $break|0 - (set_local $0 - (i32.const 0) - ) (loop $repeat|0 (br_if $break|0 (i32.ge_s @@ -7226,7 +6929,6 @@ (get_local $1) (get_local $0) (call $std/array/Proxy#constructor - (i32.const 0) (i32.sub (i32.sub (i32.load offset=4 @@ -7259,50 +6961,42 @@ ) ) ) - (func $~lib/internal/string/compareUnsafe (; 103 ;) (; has Stack IR ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) - (local $5 i32) - (set_local $1 - (i32.add - (get_local $0) - (i32.shl - (get_local $1) - (i32.const 1) - ) - ) - ) - (set_local $2 - (i32.add - (get_local $2) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) + (func $~lib/internal/string/compareUnsafe (; 103 ;) (; has Stack IR ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (get_local $0) ) (loop $continue|0 (if (tee_local $0 (if (result i32) - (get_local $4) + (get_local $2) (i32.eqz - (tee_local $5 + (tee_local $4 (i32.sub (i32.load16_u offset=4 - (get_local $1) + (get_local $3) ) (i32.load16_u offset=4 - (get_local $2) + (get_local $1) ) ) ) ) - (get_local $4) + (get_local $2) ) ) (block - (set_local $4 + (set_local $2 (i32.sub - (get_local $4) + (get_local $2) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) (i32.const 1) ) ) @@ -7312,17 +7006,11 @@ (i32.const 1) ) ) - (set_local $2 - (i32.add - (get_local $2) - (i32.const 1) - ) - ) (br $continue|0) ) ) ) - (get_local $5) + (get_local $4) ) (func $~lib/string/String.__gt (; 104 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -7386,9 +7074,7 @@ (i32.gt_s (call $~lib/internal/string/compareUnsafe (get_local $0) - (i32.const 0) (get_local $1) - (i32.const 0) (select (get_local $2) (get_local $3) @@ -7463,9 +7149,7 @@ (i32.lt_s (call $~lib/internal/string/compareUnsafe (get_local $0) - (i32.const 0) (get_local $1) - (i32.const 0) (select (get_local $2) (get_local $3) @@ -7539,9 +7223,7 @@ (i32.eqz (call $~lib/internal/string/compareUnsafe (get_local $0) - (i32.const 0) (get_local $1) - (i32.const 0) (get_local $2) ) ) @@ -7554,59 +7236,53 @@ ) ) ) - (func $std/array/isArraysEqual (; 109 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 109 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (if - (i32.eqz - (get_local $2) + (i32.ne + (i32.load offset=4 + (get_local $0) + ) + (i32.load offset=4 + (get_local $1) + ) ) - (block - (if - (i32.ne - (i32.load offset=4 - (get_local $0) - ) - (i32.load offset=4 - (get_local $1) - ) - ) - (return - (i32.const 0) - ) - ) - (set_local $2 - (i32.load offset=4 - (get_local $0) - ) - ) + (return + (i32.const 0) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $0) ) ) (block $break|0 (loop $repeat|0 (br_if $break|0 (i32.ge_s - (get_local $3) (get_local $2) + (get_local $3) ) ) (if (call $~lib/string/String.__ne (call $~lib/array/Array#__get (get_local $0) - (get_local $3) + (get_local $2) ) (call $~lib/array/Array#__get (get_local $1) - (get_local $3) + (get_local $2) ) ) (return (i32.const 0) ) (block - (set_local $3 + (set_local $2 (i32.add - (get_local $3) + (get_local $2) (i32.const 1) ) ) @@ -7663,27 +7339,13 @@ ) (get_local $1) ) - (func $~lib/string/String#charAt (; 111 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (if - (i32.eqz - (get_local $0) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 1296) - (i32.const 54) - (i32.const 4) - ) - (unreachable) - ) - ) + (func $~lib/string/String#charAt (; 111 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (if (i32.ge_u - (get_local $1) + (get_local $0) (i32.load - (get_local $0) + (i32.const 168) ) ) (return @@ -7691,24 +7353,24 @@ ) ) (i32.store16 offset=4 - (tee_local $2 + (tee_local $1 (call $~lib/internal/string/allocateUnsafe (i32.const 1) ) ) (i32.load16_u offset=4 (i32.add - (get_local $0) (i32.shl - (get_local $1) + (get_local $0) (i32.const 1) ) + (i32.const 168) ) ) ) - (get_local $2) + (get_local $1) ) - (func $~lib/internal/string/copyUnsafe (; 112 ;) (; has Stack IR ;) (type $iiiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (func $~lib/internal/string/copyUnsafe (; 112 ;) (; has Stack IR ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (call $~lib/internal/memory/memmove (i32.add (i32.add @@ -7721,17 +7383,11 @@ (i32.const 4) ) (i32.add - (i32.add - (get_local $2) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) + (get_local $2) (i32.const 4) ) (i32.shl - (get_local $4) + (get_local $3) (i32.const 1) ) ) @@ -7791,14 +7447,12 @@ ) (i32.const 0) (get_local $0) - (i32.const 0) (get_local $3) ) (call $~lib/internal/string/copyUnsafe (get_local $2) (get_local $3) (get_local $1) - (i32.const 0) (get_local $4) ) (get_local $2) @@ -7835,7 +7489,6 @@ (call $~lib/string/String.__concat (get_local $1) (call $~lib/string/String#charAt - (i32.const 168) (i32.trunc_s/f64 (f64.floor (f64.mul @@ -7862,18 +7515,15 @@ ) (get_local $1) ) - (func $std/array/createRandomStringArray (; 116 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $std/array/createRandomStringArray (; 116 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (local $1 i32) (set_local $1 (call $~lib/array/Array#constructor - (i32.const 0) - (get_local $0) + (i32.const 400) ) ) (block $break|0 - (set_local $0 - (i32.const 0) - ) (loop $repeat|0 (br_if $break|0 (i32.ge_s @@ -7916,7 +7566,6 @@ (set_global $std/array/arr (call $~lib/array/Array#constructor (i32.const 0) - (i32.const 0) ) ) (if @@ -9298,8 +8947,6 @@ ) (call $~lib/array/Array#splice (get_global $std/array/arr) - (i32.const 1) - (i32.const 1) ) (if (i32.ne @@ -10064,7 +9711,6 @@ (set_global $std/array/newArr (call $~lib/array/Array#map (get_global $std/array/arr) - (i32.const 20) ) ) (if @@ -10872,15 +10518,12 @@ (drop (call $~lib/array/Array#sort|trampoline (get_global $std/array/f32ArrayTyped) - (i32.const 0) ) ) (if (i32.eqz (call $std/array/isArraysEqual (get_global $std/array/f32ArrayTyped) - (i32.const 480) - (i32.const 0) ) ) (block @@ -10899,15 +10542,12 @@ (drop (call $~lib/array/Array#sort|trampoline (get_global $std/array/f64ArrayTyped) - (i32.const 0) ) ) (if (i32.eqz (call $std/array/isArraysEqual (get_global $std/array/f64ArrayTyped) - (i32.const 752) - (i32.const 0) ) ) (block @@ -10926,7 +10566,6 @@ (drop (call $~lib/array/Array#sort|trampoline (get_global $std/array/i32ArrayTyped) - (i32.const 0) ) ) (if @@ -10953,7 +10592,6 @@ (drop (call $~lib/array/Array#sort|trampoline (get_global $std/array/u32ArrayTyped) - (i32.const 0) ) ) (if @@ -11179,18 +10817,14 @@ (i32.const 50) ) (set_global $std/array/reversedNested512 - (call $std/array/createReverseOrderedNestedArray - (i32.const 512) - ) + (call $std/array/createReverseOrderedNestedArray) ) (call $std/array/assertSorted> (get_global $std/array/reversedNested512) (i32.const 51) ) (set_global $std/array/reversedElements512 - (call $std/array/createReverseOrderedElementsArray - (i32.const 512) - ) + (call $std/array/createReverseOrderedElementsArray) ) (call $std/array/assertSorted> (get_global $std/array/reversedElements512) @@ -11205,7 +10839,6 @@ (call $std/array/isArraysEqual (get_global $std/array/randomStringsActual) (get_global $std/array/randomStringsExpected) - (i32.const 0) ) ) (block @@ -11219,9 +10852,7 @@ ) ) (set_global $std/array/randomStrings400 - (call $std/array/createRandomStringArray - (i32.const 400) - ) + (call $std/array/createRandomStringArray) ) (call $std/array/assertSorted> (get_global $std/array/randomStrings400) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 9e182d6d..cf19515c 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -4,6 +4,9 @@ (type $ii (func (param i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -144,32 +147,31 @@ ) (get_local $1) ) - (func $~lib/internal/memory/memset (; 4 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -179,37 +181,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -219,74 +221,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -296,37 +287,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -336,66 +327,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -406,60 +397,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -474,45 +452,20 @@ ) ) ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (; 5 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (if - (i32.gt_u - (get_local $1) - (i32.const 1073741816) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 8) - (i32.const 13) - (i32.const 40) + (func $~lib/arraybuffer/ArrayBuffer#constructor (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (call $~lib/internal/memory/memset + (i32.add + (tee_local $0 + (call $~lib/internal/arraybuffer/allocateUnsafe + (i32.const 8) + ) ) - (unreachable) + (i32.const 8) ) + (i32.const 8) ) - (set_local $3 - (call $~lib/internal/arraybuffer/allocateUnsafe - (get_local $1) - ) - ) - (if - (i32.eqz - (i32.and - (get_local $2) - (i32.const 1) - ) - ) - (call $~lib/internal/memory/memset - (i32.add - (get_local $3) - (i32.const 8) - ) - (i32.const 0) - (get_local $1) - ) - ) - (get_local $3) + (get_local $0) ) (func $~lib/internal/memory/memcpy (; 6 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -2297,7 +2250,8 @@ ) (get_local $3) ) - (func $~lib/arraybuffer/ArrayBuffer#slice|trampoline (; 9 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer#slice|trampoline (; 9 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (block $2of2 (block $1of2 (block $0of2 @@ -2330,11 +2284,7 @@ (get_global $~lib/allocator/arena/startOffset) ) (set_global $std/arraybuffer/buffer - (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) - (i32.const 8) - (i32.const 0) - ) + (call $~lib/arraybuffer/ArrayBuffer#constructor) ) (if (i32.ne @@ -2360,7 +2310,6 @@ (call $~lib/arraybuffer/ArrayBuffer#slice|trampoline (get_global $std/arraybuffer/buffer) (i32.const 0) - (i32.const 0) ) ) (if @@ -2402,7 +2351,6 @@ (call $~lib/arraybuffer/ArrayBuffer#slice|trampoline (get_global $std/arraybuffer/buffer) (i32.const 1) - (i32.const 0) ) ) (if @@ -2429,7 +2377,6 @@ (call $~lib/arraybuffer/ArrayBuffer#slice|trampoline (get_global $std/arraybuffer/buffer) (i32.const -1) - (i32.const 0) ) ) (if @@ -2552,7 +2499,6 @@ (call $~lib/arraybuffer/ArrayBuffer#slice|trampoline (get_global $std/arraybuffer/buffer) (i32.const 42) - (i32.const 0) ) ) (if diff --git a/tests/compiler/std/constructor.optimized.wat b/tests/compiler/std/constructor.optimized.wat index 4255bd70..bb52720c 100644 --- a/tests/compiler/std/constructor.optimized.wat +++ b/tests/compiler/std/constructor.optimized.wat @@ -1,6 +1,7 @@ (module (type $ii (func (param i32) (result i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $std/constructor/emptyCtor (mut i32) (i32.const 0)) @@ -107,86 +108,60 @@ (get_local $0) ) ) - (func $std/constructor/EmptyCtor#constructor (; 2 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if (result i32) - (get_local $0) - (get_local $0) - (call $~lib/memory/memory.allocate - (i32.const 0) - ) + (func $std/constructor/EmptyCtor#constructor (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (call $~lib/memory/memory.allocate + (i32.const 0) ) ) - (func $std/constructor/EmptyCtorWithFieldInit#constructor (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 4) - ) + (func $std/constructor/EmptyCtorWithFieldInit#constructor (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (i32.store + (tee_local $0 + (call $~lib/memory/memory.allocate + (i32.const 4) ) - (i32.const 1) ) + (i32.const 1) ) (get_local $0) ) - (func $std/constructor/EmptyCtorWithFieldNoInit#constructor (; 4 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 4) - ) + (func $std/constructor/EmptyCtorWithFieldNoInit#constructor (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (i32.store + (tee_local $0 + (call $~lib/memory/memory.allocate + (i32.const 4) ) - (i32.const 0) ) + (i32.const 0) ) (get_local $0) ) - (func $std/constructor/CtorReturns#constructor (; 5 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $std/constructor/CtorReturns#constructor (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate (i32.const 0) ) ) - (func $std/constructor/CtorConditionallyReturns#constructor (; 6 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $std/constructor/CtorConditionallyReturns#constructor (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (if (get_global $std/constructor/b) (return - (tee_local $0 - (call $~lib/allocator/arena/__memory_allocate - (i32.const 0) - ) - ) - ) - ) - (if - (i32.eqz - (get_local $0) - ) - (set_local $0 - (call $~lib/memory/memory.allocate + (call $~lib/allocator/arena/__memory_allocate (i32.const 0) ) ) ) - (get_local $0) + (call $~lib/memory/memory.allocate + (i32.const 0) + ) ) - (func $std/constructor/CtorConditionallyAllocates#constructor (; 7 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $std/constructor/CtorConditionallyAllocates#constructor (; 7 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (if (get_global $std/constructor/b) - (if - (i32.eqz - (get_local $0) - ) - (set_local $0 - (call $~lib/memory/memory.allocate - (i32.const 0) - ) + (set_local $0 + (call $~lib/memory/memory.allocate + (i32.const 0) ) ) ) @@ -211,19 +186,13 @@ (get_global $~lib/allocator/arena/startOffset) ) (set_global $std/constructor/emptyCtor - (call $std/constructor/EmptyCtor#constructor - (i32.const 0) - ) + (call $std/constructor/EmptyCtor#constructor) ) (set_global $std/constructor/emptyCtorWithFieldInit - (call $std/constructor/EmptyCtorWithFieldInit#constructor - (i32.const 0) - ) + (call $std/constructor/EmptyCtorWithFieldInit#constructor) ) (set_global $std/constructor/emptyCtorWithFieldNoInit - (call $std/constructor/EmptyCtorWithFieldNoInit#constructor - (i32.const 0) - ) + (call $std/constructor/EmptyCtorWithFieldNoInit#constructor) ) (set_global $std/constructor/none (call $~lib/memory/memory.allocate @@ -253,24 +222,16 @@ (get_local $0) ) (set_global $std/constructor/ctorReturns - (call $std/constructor/CtorReturns#constructor - (i32.const 0) - ) + (call $std/constructor/CtorReturns#constructor) ) (set_global $std/constructor/ctorConditionallyReturns - (call $std/constructor/CtorConditionallyReturns#constructor - (i32.const 0) - ) + (call $std/constructor/CtorConditionallyReturns#constructor) ) (set_global $std/constructor/ctorAllocates - (call $std/constructor/EmptyCtor#constructor - (i32.const 0) - ) + (call $std/constructor/EmptyCtor#constructor) ) (set_global $std/constructor/ctorConditionallyAllocates - (call $std/constructor/CtorConditionallyAllocates#constructor - (i32.const 0) - ) + (call $std/constructor/CtorConditionallyAllocates#constructor) ) ) ) diff --git a/tests/compiler/std/gc-array.optimized.wat b/tests/compiler/std/gc-array.optimized.wat index 86a2e7b7..fc635243 100644 --- a/tests/compiler/std/gc-array.optimized.wat +++ b/tests/compiler/std/gc-array.optimized.wat @@ -7,6 +7,8 @@ (type $iiiv (func (param i32 i32 i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $i (func (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -378,9 +380,7 @@ (i32.const 1) ) ) - (call $~iterateRoots - (i32.const 2) - ) + (call $~iterateRoots) (set_global $~lib/collector/itcm/state (i32.const 2) ) @@ -419,9 +419,7 @@ ) ) (block - (call $~iterateRoots - (i32.const 2) - ) + (call $~iterateRoots) (if (i32.eq (call $~lib/collector/itcm/ManagedObject#get:next @@ -576,32 +574,31 @@ ) ) ) - (func $~lib/internal/memory/memset (; 19 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 19 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -611,37 +608,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -651,74 +648,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -728,37 +714,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -768,66 +754,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -838,60 +824,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -2665,7 +2638,6 @@ ) (get_local $2) ) - (i32.const 0) (i32.sub (get_local $1) (get_local $2) @@ -2696,7 +2668,6 @@ ) (get_local $2) ) - (i32.const 0) (i32.sub (get_local $1) (get_local $2) @@ -2899,10 +2870,10 @@ ) (call $~lib/gc/gc.collect) ) - (func $~iterateRoots (; 28 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~iterateRoots (; 28 ;) (; has Stack IR ;) (type $FUNCSIG$v) (call_indirect (type $iv) (get_global $std/gc-array/arr) - (get_local $0) + (i32.const 2) ) ) ) diff --git a/tests/compiler/std/gc-basics.optimized.wat b/tests/compiler/std/gc-basics.optimized.wat index b073d116..3f85be27 100644 --- a/tests/compiler/std/gc-basics.optimized.wat +++ b/tests/compiler/std/gc-basics.optimized.wat @@ -1,11 +1,12 @@ (module (type $iv (func (param i32))) - (type $iii (func (param i32 i32) (result i32))) (type $v (func)) (type $ii (func (param i32) (result i32))) (type $iiv (func (param i32 i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $i (func (result i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -321,9 +322,7 @@ (i32.const 1) ) ) - (call $~iterateRoots - (i32.const 1) - ) + (call $~iterateRoots) (set_global $~lib/collector/itcm/state (i32.const 2) ) @@ -362,9 +361,7 @@ ) ) (block - (call $~iterateRoots - (i32.const 1) - ) + (call $~iterateRoots) (if (i32.eq (call $~lib/collector/itcm/ManagedObject#get:next @@ -435,25 +432,16 @@ ) ) ) - (func $~lib/collector/itcm/__gc_allocate (; 13 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (if - (i32.gt_u - (get_local $0) - (i32.const 1073741808) - ) - (unreachable) - ) + (func $~lib/collector/itcm/__gc_allocate (; 13 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (call $~lib/collector/itcm/step) (i32.store offset=8 (tee_local $0 (call $~lib/allocator/arena/__memory_allocate - (i32.add - (get_local $0) - (i32.const 16) - ) + (i32.const 20) ) ) - (get_local $1) + (i32.const 0) ) (call $~lib/collector/itcm/ManagedObject#set:color (get_local $0) @@ -545,10 +533,7 @@ (i32.const 0) ) (set_global $std/gc-basics/obj - (call $~lib/collector/itcm/__gc_allocate - (i32.const 4) - (i32.const 0) - ) + (call $~lib/collector/itcm/__gc_allocate) ) (i32.store (get_global $std/gc-basics/obj) @@ -659,14 +644,14 @@ ) (call $~lib/gc/gc.collect) ) - (func $~iterateRoots (; 19 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~iterateRoots (; 19 ;) (; has Stack IR ;) (type $FUNCSIG$v) (call_indirect (type $iv) (get_global $std/gc-basics/obj) - (get_local $0) + (i32.const 1) ) (call_indirect (type $iv) (get_global $std/gc-basics/obj2) - (get_local $0) + (i32.const 1) ) ) ) diff --git a/tests/compiler/std/gc-integration.optimized.wat b/tests/compiler/std/gc-integration.optimized.wat index 40163fcd..85e216ff 100644 --- a/tests/compiler/std/gc-integration.optimized.wat +++ b/tests/compiler/std/gc-integration.optimized.wat @@ -2,6 +2,7 @@ (type $iv (func (param i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $std/gc-integration/B.d (mut i32) (i32.const 16)) (global $std/gc-integration/a_ref (mut i32) (i32.const 24)) @@ -41,9 +42,7 @@ ) ) (func $start (; 2 ;) (; has Stack IR ;) (type $v) - (call $~iterateRoots - (i32.const 0) - ) + (call $~iterateRoots) (if (i32.ne (get_global $std/gc-integration/i) @@ -60,22 +59,22 @@ ) ) ) - (func $~iterateRoots (; 3 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~iterateRoots (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$v) (call_indirect (type $iv) (i32.const 8) - (get_local $0) + (i32.const 0) ) (call_indirect (type $iv) (get_global $std/gc-integration/B.d) - (get_local $0) + (i32.const 0) ) (call_indirect (type $iv) (get_global $std/gc-integration/a_ref) - (get_local $0) + (i32.const 0) ) (call_indirect (type $iv) (get_global $std/gc-integration/b_ref) - (get_local $0) + (i32.const 0) ) ) ) diff --git a/tests/compiler/std/gc-object.optimized.wat b/tests/compiler/std/gc-object.optimized.wat index 68c85a3f..58a76677 100644 --- a/tests/compiler/std/gc-object.optimized.wat +++ b/tests/compiler/std/gc-object.optimized.wat @@ -1,9 +1,10 @@ (module - (type $iii (func (param i32 i32) (result i32))) (type $v (func)) (type $ii (func (param i32) (result i32))) (type $iv (func (param i32))) (type $iiv (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $~lib/collector/itcm/state (mut i32) (i32.const 0)) @@ -256,7 +257,7 @@ ) ) ) - (func $~lib/allocator/arena/__memory_free (; 10 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~lib/allocator/arena/__memory_free (; 10 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) (func $~lib/collector/itcm/step (; 11 ;) (; has Stack IR ;) (type $v) @@ -316,9 +317,7 @@ (i32.const 1) ) ) - (call $~iterateRoots - (i32.const 0) - ) + (call $~iterateRoots) (set_global $~lib/collector/itcm/state (i32.const 2) ) @@ -357,9 +356,7 @@ ) ) (block - (call $~iterateRoots - (i32.const 0) - ) + (call $~iterateRoots) (if (i32.eq (call $~lib/collector/itcm/ManagedObject#get:next @@ -414,9 +411,7 @@ (get_local $0) (i32.const 8) ) - (call $~lib/allocator/arena/__memory_free - (get_local $0) - ) + (call $~lib/allocator/arena/__memory_free) ) ) (block @@ -430,25 +425,16 @@ ) ) ) - (func $~lib/collector/itcm/__gc_allocate (; 12 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (if - (i32.gt_u - (get_local $0) - (i32.const 1073741808) - ) - (unreachable) - ) + (func $~lib/collector/itcm/__gc_allocate (; 12 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (call $~lib/collector/itcm/step) (i32.store offset=8 (tee_local $0 (call $~lib/allocator/arena/__memory_allocate - (i32.add - (get_local $0) - (i32.const 16) - ) + (i32.const 24) ) ) - (get_local $1) + (i32.const 1) ) (call $~lib/collector/itcm/ManagedObject#set:color (get_local $0) @@ -559,10 +545,7 @@ ) (i32.store (tee_local $0 - (call $~lib/collector/itcm/__gc_allocate - (i32.const 8) - (i32.const 1) - ) + (call $~lib/collector/itcm/__gc_allocate) ) (i32.const 0) ) @@ -584,10 +567,10 @@ ) (call $~lib/gc/gc.collect) ) - (func $~iterateRoots (; 19 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~iterateRoots (; 19 ;) (; has Stack IR ;) (type $FUNCSIG$v) (call_indirect (type $iv) (get_global $std/gc-object/obj) - (get_local $0) + (i32.const 0) ) ) ) diff --git a/tests/compiler/std/libm.optimized.wat b/tests/compiler/std/libm.optimized.wat index 90ac8dbd..f6724e9d 100644 --- a/tests/compiler/std/libm.optimized.wat +++ b/tests/compiler/std/libm.optimized.wat @@ -4,6 +4,7 @@ (type $FFF (func (param f64 f64) (result f64))) (type $FiF (func (param f64 i32) (result f64))) (type $Ff (func (param f64) (result f32))) + (type $FUNCSIG$d (func (result f64))) (global $std/libm/E f64 (f64.const 2.718281828459045)) (global $std/libm/LN10 f64 (f64.const 2.302585092994046)) (global $std/libm/LN2 f64 (f64.const 0.6931471805599453)) @@ -2344,13 +2345,11 @@ ) ) ) - (func $~lib/math/NativeMath.cos (; 23 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) + (func $~lib/math/NativeMath.cos (; 23 ;) (; has Stack IR ;) (type $FUNCSIG$d) (result f64) (unreachable) ) (func $std/libm/cos (; 24 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) - (call $~lib/math/NativeMath.cos - (get_local $0) - ) + (call $~lib/math/NativeMath.cos) ) (func $~lib/math/NativeMath.expm1 (; 25 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) (local $1 f64) diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index c5ae6fd0..f43cae64 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -17,6 +17,9 @@ (type $iFi (func (param i32 f64) (result i32))) (type $iFii (func (param i32 f64 i32) (result i32))) (type $iFiv (func (param i32 f64 i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -111,9 +114,9 @@ ) (get_local $1) ) - (func $~lib/memory/memory.allocate (; 2 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 24) ) ) (func $~lib/internal/arraybuffer/computeSize (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) @@ -159,32 +162,31 @@ ) (get_local $1) ) - (func $~lib/internal/memory/memset (; 5 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -194,37 +196,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -234,74 +236,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -311,37 +302,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -351,66 +342,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -421,60 +412,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -489,11 +467,11 @@ ) ) ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (; 6 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/arraybuffer/ArrayBuffer#constructor (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (if (i32.gt_u - (get_local $1) + (get_local $0) (i32.const 1073741816) ) (block @@ -506,34 +484,32 @@ (unreachable) ) ) - (set_local $3 + (set_local $2 (call $~lib/internal/arraybuffer/allocateUnsafe - (get_local $1) + (get_local $0) ) ) (if (i32.eqz (i32.and - (get_local $2) + (get_local $1) (i32.const 1) ) ) (call $~lib/internal/memory/memset (i32.add - (get_local $3) + (get_local $2) (i32.const 8) ) - (i32.const 0) - (get_local $1) + (get_local $0) ) ) - (get_local $3) + (get_local $2) ) (func $~lib/map/Map#clear (; 7 ;) (; has Stack IR ;) (type $iv) (param $0 i32) (i32.store (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 16) (i32.const 0) ) @@ -545,7 +521,6 @@ (i32.store offset=8 (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 48) (i32.const 1) ) @@ -563,41 +538,33 @@ (i32.const 0) ) ) - (func $~lib/map/Map#constructor (; 8 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 24) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=12 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=16 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=20 - (get_local $0) - (i32.const 0) - ) + (func $~lib/map/Map#constructor (; 8 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (i32.store + (tee_local $0 + (call $~lib/memory/memory.allocate) ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $0) + (i32.const 0) ) (call $~lib/map/Map#clear (get_local $0) @@ -707,7 +674,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -722,7 +688,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.mul (tee_local $7 (i32.trunc_s/f64 @@ -1138,9 +1103,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -1645,7 +1608,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -1660,7 +1622,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.mul (tee_local $7 (i32.trunc_s/f64 @@ -2062,9 +2023,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -2638,7 +2597,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -2653,7 +2611,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.mul (tee_local $7 (i32.trunc_s/f64 @@ -3064,9 +3021,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -3571,7 +3526,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -3586,7 +3540,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.mul (tee_local $7 (i32.trunc_s/f64 @@ -3988,9 +3941,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -4579,7 +4530,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -4594,7 +4544,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.mul (tee_local $7 (i32.trunc_s/f64 @@ -4987,9 +4936,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -5431,9 +5378,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -5875,7 +5820,6 @@ (i32.store (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 16) (i32.const 0) ) @@ -5887,7 +5831,6 @@ (i32.store offset=8 (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 64) (i32.const 1) ) @@ -5905,41 +5848,33 @@ (i32.const 0) ) ) - (func $~lib/map/Map#constructor (; 48 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 24) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=12 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=16 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=20 - (get_local $0) - (i32.const 0) - ) + (func $~lib/map/Map#constructor (; 48 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (i32.store + (tee_local $0 + (call $~lib/memory/memory.allocate) ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $0) + (i32.const 0) ) (call $~lib/map/Map#clear (get_local $0) @@ -6130,7 +6065,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -6145,7 +6079,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -6539,9 +6472,7 @@ (local $0 i64) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -6997,9 +6928,7 @@ (local $0 i64) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -7538,7 +7467,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -7553,7 +7481,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.mul (tee_local $7 (i32.trunc_s/f64 @@ -7955,9 +7882,7 @@ (local $0 f32) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 @@ -8504,7 +8429,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -8519,7 +8443,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -8921,9 +8844,7 @@ (local $0 f64) (local $1 i32) (set_local $1 - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (block $break|0 (loop $repeat|0 diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 12ae19df..8e177a07 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -8,8 +8,6 @@ (type $fi (func (param f32) (result i32))) (type $ffff (func (param f32 f32 f32) (result f32))) (type $fif (func (param f32 i32) (result f32))) - (type $FiFFii (func (param f64 i32 f64 f64 i32) (result i32))) - (type $fiffii (func (param f32 i32 f32 f32 i32) (result i32))) (type $FF (func (param f64) (result f64))) (type $ff (func (param f32) (result f32))) (type $FFFFii (func (param f64 f64 f64 f64 i32) (result i32))) @@ -22,6 +20,16 @@ (type $f (func (result f32))) (type $IiI (func (param i64 i32) (result i64))) (type $v (func)) + (type $FUNCSIG$iddd (func (param f64 f64 f64) (result i32))) + (type $FUNCSIG$ifff (func (param f32 f32 f32) (result i32))) + (type $FUNCSIG$ididi (func (param f64 i32 f64 i32) (result i32))) + (type $FUNCSIG$ififi (func (param f32 i32 f32 i32) (result i32))) + (type $FUNCSIG$idd (func (param f64 f64) (result i32))) + (type $FUNCSIG$iff (func (param f32 f32) (result i32))) + (type $FUNCSIG$iddi (func (param f64 f64 i32) (result i32))) + (type $FUNCSIG$iffi (func (param f32 f32 i32) (result i32))) + (type $FUNCSIG$idddi (func (param f64 f64 f64 i32) (result i32))) + (type $FUNCSIG$ifffi (func (param f32 f32 f32 i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "JSMath" "E" (global $~lib/math/JSMath.E f64)) (import "JSMath" "LN2" (global $~lib/math/JSMath.LN2 f64)) @@ -317,7 +325,7 @@ (get_local $2) ) ) - (func $std/math/check (; 36 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) + (func $std/math/check (; 36 ;) (; has Stack IR ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) (if (f64.eq (get_local $0) @@ -598,7 +606,7 @@ (get_local $2) ) ) - (func $std/math/check (; 43 ;) (; has Stack IR ;) (type $fffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) + (func $std/math/check (; 43 ;) (; has Stack IR ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) (if (f32.eq (get_local $0) @@ -635,42 +643,39 @@ ) (i32.const 1) ) - (func $std/math/test_scalbn (; 44 ;) (; has Stack IR ;) (type $FiFFii) (param $0 f64) (param $1 i32) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) + (func $std/math/test_scalbn (; 44 ;) (; has Stack IR ;) (type $FUNCSIG$ididi) (param $0 f64) (param $1 i32) (param $2 f64) (param $3 i32) (result i32) (call $std/math/check (call $~lib/math/NativeMath.scalbn (get_local $0) (get_local $1) ) (get_local $2) - (get_local $3) - (get_local $4) + (f64.const 0) ) ) - (func $std/math/test_scalbnf (; 45 ;) (; has Stack IR ;) (type $fiffii) (param $0 f32) (param $1 i32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32) + (func $std/math/test_scalbnf (; 45 ;) (; has Stack IR ;) (type $FUNCSIG$ififi) (param $0 f32) (param $1 i32) (param $2 f32) (param $3 i32) (result i32) (call $std/math/check (call $~lib/math/NativeMathf.scalbn (get_local $0) (get_local $1) ) (get_local $2) - (get_local $3) - (get_local $4) + (f32.const 0) ) ) - (func $std/math/test_abs (; 46 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) - (tee_local $3 - (if (result i32) - (tee_local $4 - (call $std/math/check - (f64.abs - (get_local $0) - ) - (get_local $1) - (get_local $2) - (get_local $3) + (func $std/math/test_abs (; 46 ;) (; has Stack IR ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) + (local $2 i32) + (if + (tee_local $2 + (call $std/math/check + (f64.abs + (get_local $0) ) + (get_local $1) + (f64.const 0) ) + ) + (set_local $2 (call $std/math/check (tee_local $0 (call $~lib/math/JSMath.abs @@ -678,21 +683,19 @@ ) ) (get_local $1) - (get_local $2) - (get_local $3) + (f64.const 0) ) - (get_local $4) ) ) + (get_local $2) ) - (func $std/math/test_absf (; 47 ;) (; has Stack IR ;) (type $fffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) + (func $std/math/test_absf (; 47 ;) (; has Stack IR ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) (call $std/math/check (f32.abs (get_local $0) ) (get_local $1) - (get_local $2) - (get_local $3) + (f32.const 0) ) ) (func $~lib/math/R (; 48 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -963,7 +966,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -974,7 +976,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -1196,7 +1197,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $~lib/math/NativeMath.log1p (; 54 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -1853,7 +1853,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -1864,7 +1863,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -2409,7 +2407,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $~lib/math/NativeMath.asin (; 62 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -2631,7 +2628,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -2642,7 +2638,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -2792,7 +2787,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $~lib/math/NativeMath.asinh (; 66 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -2925,7 +2919,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -2936,7 +2929,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -3060,7 +3052,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $~lib/math/NativeMath.atan (; 70 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -3437,7 +3428,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -3448,7 +3438,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -3783,7 +3772,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $~lib/math/NativeMath.atanh (; 74 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -3896,7 +3884,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -3907,7 +3894,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -4008,7 +3994,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $~lib/math/NativeMath.atan2 (; 78 ;) (; has Stack IR ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64) @@ -4373,7 +4358,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) ) (call $std/math/check @@ -4385,7 +4369,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) (get_local $5) ) @@ -4711,7 +4694,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) ) (func $~lib/math/NativeMath.cbrt (; 82 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -4908,7 +4890,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -4919,7 +4900,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -5076,23 +5056,20 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) - (func $std/math/test_ceil (; 86 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) - (tee_local $3 - (if (result i32) - (tee_local $4 - (call $std/math/check - (f64.ceil - (get_local $0) - ) - (get_local $1) - (get_local $2) - (get_local $3) + (func $std/math/test_ceil (; 86 ;) (; has Stack IR ;) (type $FUNCSIG$iddi) (param $0 f64) (param $1 f64) (param $2 i32) (result i32) + (if + (tee_local $2 + (call $std/math/check + (f64.ceil + (get_local $0) ) + (get_local $1) + (f64.const 0) ) + ) + (set_local $2 (call $std/math/check (tee_local $0 (call $~lib/math/JSMath.ceil @@ -5100,21 +5077,19 @@ ) ) (get_local $1) - (get_local $2) - (get_local $3) + (f64.const 0) ) - (get_local $4) ) ) + (get_local $2) ) - (func $std/math/test_ceilf (; 87 ;) (; has Stack IR ;) (type $fffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) + (func $std/math/test_ceilf (; 87 ;) (; has Stack IR ;) (type $FUNCSIG$iffi) (param $0 f32) (param $1 f32) (param $2 i32) (result i32) (call $std/math/check (f32.ceil (get_local $0) ) (get_local $1) - (get_local $2) - (get_local $3) + (f32.const 0) ) ) (func $~lib/math/NativeMath.expm1 (; 88 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -5877,7 +5852,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -5888,7 +5862,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -6605,7 +6578,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $std/math/test_exp (; 98 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) @@ -6619,7 +6591,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -6630,7 +6601,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -6643,7 +6613,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $std/math/test_expm1 (; 100 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) @@ -6657,7 +6626,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -6668,7 +6636,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -6681,23 +6648,20 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) - (func $std/math/test_floor (; 102 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) - (tee_local $3 - (if (result i32) - (tee_local $4 - (call $std/math/check - (f64.floor - (get_local $0) - ) - (get_local $1) - (get_local $2) - (get_local $3) + (func $std/math/test_floor (; 102 ;) (; has Stack IR ;) (type $FUNCSIG$iddi) (param $0 f64) (param $1 f64) (param $2 i32) (result i32) + (if + (tee_local $2 + (call $std/math/check + (f64.floor + (get_local $0) ) + (get_local $1) + (f64.const 0) ) + ) + (set_local $2 (call $std/math/check (tee_local $0 (call $~lib/math/JSMath.floor @@ -6705,21 +6669,19 @@ ) ) (get_local $1) - (get_local $2) - (get_local $3) + (f64.const 0) ) - (get_local $4) ) ) + (get_local $2) ) - (func $std/math/test_floorf (; 103 ;) (; has Stack IR ;) (type $fffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) + (func $std/math/test_floorf (; 103 ;) (; has Stack IR ;) (type $FUNCSIG$iffi) (param $0 f32) (param $1 f32) (param $2 i32) (result i32) (call $std/math/check (f32.floor (get_local $0) ) (get_local $1) - (get_local $2) - (get_local $3) + (f32.const 0) ) ) (func $~lib/math/NativeMath.hypot (; 104 ;) (; has Stack IR ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64) @@ -7007,7 +6969,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) ) (call $std/math/check @@ -7019,7 +6980,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) (get_local $5) ) @@ -7202,7 +7162,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) ) (func $std/math/test_log (; 108 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) @@ -7216,7 +7175,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -7227,20 +7185,18 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) ) ) - (func $std/math/test_logf (; 109 ;) (; has Stack IR ;) (type $fffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) + (func $std/math/test_logf (; 109 ;) (; has Stack IR ;) (type $FUNCSIG$iffi) (param $0 f32) (param $1 f32) (param $2 i32) (result i32) (call $std/math/check (call $~lib/math/NativeMathf.log (get_local $0) ) (get_local $1) - (get_local $2) - (get_local $3) + (f32.const 0) ) ) (func $~lib/math/NativeMath.log10 (; 110 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -7577,7 +7533,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -7588,7 +7543,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -7840,7 +7794,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $std/math/test_log1p (; 114 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) @@ -7854,7 +7807,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -7865,7 +7817,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -7878,7 +7829,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $~lib/math/NativeMath.log2 (; 116 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -8203,7 +8153,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -8214,7 +8163,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -8454,24 +8402,22 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) - (func $std/math/test_max (; 120 ;) (; has Stack IR ;) (type $FFFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) - (local $5 i32) - (tee_local $4 - (if (result i32) - (tee_local $5 - (call $std/math/check - (f64.max - (get_local $0) - (get_local $1) - ) - (get_local $2) - (get_local $3) - (get_local $4) + (func $std/math/test_max (; 120 ;) (; has Stack IR ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) + (local $3 i32) + (if + (tee_local $3 + (call $std/math/check + (f64.max + (get_local $0) + (get_local $1) ) + (get_local $2) + (f64.const 0) ) + ) + (set_local $3 (call $std/math/check (tee_local $0 (call $~lib/math/JSMath.max @@ -8480,39 +8426,36 @@ ) ) (get_local $2) - (get_local $3) - (get_local $4) + (f64.const 0) ) - (get_local $5) ) ) + (get_local $3) ) - (func $std/math/test_maxf (; 121 ;) (; has Stack IR ;) (type $ffffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32) + (func $std/math/test_maxf (; 121 ;) (; has Stack IR ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) (call $std/math/check (f32.max (get_local $0) (get_local $1) ) (get_local $2) - (get_local $3) - (get_local $4) + (f32.const 0) ) ) - (func $std/math/test_min (; 122 ;) (; has Stack IR ;) (type $FFFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) - (local $5 i32) - (tee_local $4 - (if (result i32) - (tee_local $5 - (call $std/math/check - (f64.min - (get_local $0) - (get_local $1) - ) - (get_local $2) - (get_local $3) - (get_local $4) + (func $std/math/test_min (; 122 ;) (; has Stack IR ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) + (local $3 i32) + (if + (tee_local $3 + (call $std/math/check + (f64.min + (get_local $0) + (get_local $1) ) + (get_local $2) + (f64.const 0) ) + ) + (set_local $3 (call $std/math/check (tee_local $0 (call $~lib/math/JSMath.min @@ -8521,22 +8464,20 @@ ) ) (get_local $2) - (get_local $3) - (get_local $4) + (f64.const 0) ) - (get_local $5) ) ) + (get_local $3) ) - (func $std/math/test_minf (; 123 ;) (; has Stack IR ;) (type $ffffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32) + (func $std/math/test_minf (; 123 ;) (; has Stack IR ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) (call $std/math/check (f32.min (get_local $0) (get_local $1) ) (get_local $2) - (get_local $3) - (get_local $4) + (f32.const 0) ) ) (func $~lib/math/NativeMath.mod (; 124 ;) (; has Stack IR ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64) @@ -8914,21 +8855,19 @@ (get_local $0) ) ) - (func $std/math/test_mod (; 125 ;) (; has Stack IR ;) (type $FFFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) - (local $5 i32) - (tee_local $4 - (if (result i32) - (tee_local $5 - (call $std/math/check - (call $~lib/math/NativeMath.mod - (get_local $0) - (get_local $1) - ) - (get_local $2) - (get_local $3) - (get_local $4) + (func $std/math/test_mod (; 125 ;) (; has Stack IR ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) + (if + (tee_local $3 + (call $std/math/check + (call $~lib/math/NativeMath.mod + (get_local $0) + (get_local $1) ) + (get_local $2) + (f64.const 0) ) + ) + (set_local $3 (call $std/math/check (tee_local $0 (call $std/math/JSOp.mod @@ -8937,12 +8876,11 @@ ) ) (get_local $2) - (get_local $3) - (get_local $4) + (f64.const 0) ) - (get_local $5) ) ) + (get_local $3) ) (func $~lib/math/NativeMathf.mod (; 126 ;) (; has Stack IR ;) (type $fff) (param $0 f32) (param $1 f32) (result f32) (local $2 i32) @@ -9292,15 +9230,14 @@ (get_local $0) ) ) - (func $std/math/test_modf (; 127 ;) (; has Stack IR ;) (type $ffffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32) + (func $std/math/test_modf (; 127 ;) (; has Stack IR ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) (call $std/math/check (call $~lib/math/NativeMathf.mod (get_local $0) (get_local $1) ) (get_local $2) - (get_local $3) - (get_local $4) + (f32.const 0) ) ) (func $~lib/math/NativeMath.pow (; 128 ;) (; has Stack IR ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64) @@ -10742,7 +10679,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) ) (call $std/math/check @@ -10754,7 +10690,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) (get_local $5) ) @@ -11955,7 +11890,6 @@ ) (get_local $2) (get_local $3) - (get_local $4) ) ) (func $~lib/math/murmurHash3 (; 132 ;) (; has Stack IR ;) (type $II) (param $0 i64) (result i64) @@ -12236,14 +12170,13 @@ ) ) ) - (func $std/math/test_round (; 137 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) + (func $std/math/test_round (; 137 ;) (; has Stack IR ;) (type $FUNCSIG$iddi) (param $0 f64) (param $1 f64) (param $2 i32) (result i32) (call $std/math/check (call $~lib/math/NativeMath.round (get_local $0) ) (get_local $1) - (get_local $2) - (get_local $3) + (f64.const 0) ) ) (func $~lib/math/NativeMathf.round (; 138 ;) (; has Stack IR ;) (type $ff) (param $0 f32) (result f32) @@ -12374,40 +12307,38 @@ ) ) ) - (func $std/math/test_roundf (; 139 ;) (; has Stack IR ;) (type $fffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) + (func $std/math/test_roundf (; 139 ;) (; has Stack IR ;) (type $FUNCSIG$iffi) (param $0 f32) (param $1 f32) (param $2 i32) (result i32) (call $std/math/check (call $~lib/math/NativeMathf.round (get_local $0) ) (get_local $1) - (get_local $2) - (get_local $3) + (f32.const 0) ) ) - (func $std/math/test_sign (; 140 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) - (tee_local $3 - (if (result i32) - (tee_local $4 - (call $std/math/check - (if (result f64) - (f64.gt - (f64.abs - (get_local $0) - ) - (f64.const 0) - ) - (f64.copysign - (f64.const 1) + (func $std/math/test_sign (; 140 ;) (; has Stack IR ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) + (local $2 i32) + (if + (tee_local $2 + (call $std/math/check + (if (result f64) + (f64.gt + (f64.abs (get_local $0) ) + (f64.const 0) + ) + (f64.copysign + (f64.const 1) (get_local $0) ) - (get_local $1) - (get_local $2) - (get_local $3) + (get_local $0) ) + (get_local $1) + (f64.const 0) ) + ) + (set_local $2 (call $std/math/check (tee_local $0 (call $~lib/math/JSMath.sign @@ -12415,14 +12346,13 @@ ) ) (get_local $1) - (get_local $2) - (get_local $3) + (f64.const 0) ) - (get_local $4) ) ) + (get_local $2) ) - (func $std/math/test_signf (; 141 ;) (; has Stack IR ;) (type $fffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) + (func $std/math/test_signf (; 141 ;) (; has Stack IR ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) (call $std/math/check (if (result f32) (f32.gt @@ -12438,8 +12368,7 @@ (get_local $0) ) (get_local $1) - (get_local $2) - (get_local $3) + (f32.const 0) ) ) (func $~lib/math/NativeMath.rem (; 142 ;) (; has Stack IR ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64) @@ -12910,15 +12839,14 @@ ) (get_local $0) ) - (func $std/math/test_rem (; 143 ;) (; has Stack IR ;) (type $FFFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32) + (func $std/math/test_rem (; 143 ;) (; has Stack IR ;) (type $FUNCSIG$idddi) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) (call $std/math/check (call $~lib/math/NativeMath.rem (get_local $0) (get_local $1) ) (get_local $2) - (get_local $3) - (get_local $4) + (f64.const 0) ) ) (func $~lib/math/NativeMathf.rem (; 144 ;) (; has Stack IR ;) (type $fff) (param $0 f32) (param $1 f32) (result f32) @@ -13356,15 +13284,14 @@ ) (get_local $0) ) - (func $std/math/test_remf (; 145 ;) (; has Stack IR ;) (type $ffffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32) + (func $std/math/test_remf (; 145 ;) (; has Stack IR ;) (type $FUNCSIG$ifffi) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) (call $std/math/check (call $~lib/math/NativeMathf.rem (get_local $0) (get_local $1) ) (get_local $2) - (get_local $3) - (get_local $4) + (f32.const 0) ) ) (func $~lib/math/NativeMath.sinh (; 146 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -13495,7 +13422,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -13506,7 +13432,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -13625,7 +13550,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $std/math/test_sqrt (; 150 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) @@ -13639,7 +13563,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -13650,7 +13573,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -13663,7 +13585,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (func $~lib/math/NativeMath.tanh (; 152 ;) (; has Stack IR ;) (type $FF) (param $0 f64) (result f64) @@ -13802,7 +13723,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) (call $std/math/check @@ -13813,7 +13733,6 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) (get_local $4) ) @@ -13941,23 +13860,20 @@ ) (get_local $1) (get_local $2) - (get_local $3) ) ) - (func $std/math/test_trunc (; 156 ;) (; has Stack IR ;) (type $FFFii) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32) - (local $4 i32) - (tee_local $3 - (if (result i32) - (tee_local $4 - (call $std/math/check - (f64.trunc - (get_local $0) - ) - (get_local $1) - (get_local $2) - (get_local $3) + (func $std/math/test_trunc (; 156 ;) (; has Stack IR ;) (type $FUNCSIG$iddi) (param $0 f64) (param $1 f64) (param $2 i32) (result i32) + (if + (tee_local $2 + (call $std/math/check + (f64.trunc + (get_local $0) ) + (get_local $1) + (f64.const 0) ) + ) + (set_local $2 (call $std/math/check (tee_local $0 (call $~lib/math/JSMath.trunc @@ -13965,21 +13881,19 @@ ) ) (get_local $1) - (get_local $2) - (get_local $3) + (f64.const 0) ) - (get_local $4) ) ) + (get_local $2) ) - (func $std/math/test_truncf (; 157 ;) (; has Stack IR ;) (type $fffii) (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32) + (func $std/math/test_truncf (; 157 ;) (; has Stack IR ;) (type $FUNCSIG$iffi) (param $0 f32) (param $1 f32) (param $2 i32) (result i32) (call $std/math/check (f32.trunc (get_local $0) ) (get_local $1) - (get_local $2) - (get_local $3) + (f32.const 0) ) ) (func $~lib/math/ipow64 (; 158 ;) (; has Stack IR ;) (type $IiI) (param $0 i64) (param $1 i32) (result i64) @@ -14263,7 +14177,6 @@ (f64.const 2.718281828459045) (get_global $~lib/math/JSMath.E) (f64.const 0) - (i32.const 0) ) ) (block @@ -14282,7 +14195,6 @@ (f64.const 0.6931471805599453) (get_global $~lib/math/JSMath.LN2) (f64.const 0) - (i32.const 0) ) ) (block @@ -14301,7 +14213,6 @@ (f64.const 2.302585092994046) (get_global $~lib/math/JSMath.LN10) (f64.const 0) - (i32.const 0) ) ) (block @@ -14320,7 +14231,6 @@ (f64.const 1.4426950408889634) (get_global $~lib/math/JSMath.LOG2E) (f64.const 0) - (i32.const 0) ) ) (block @@ -14339,7 +14249,6 @@ (f64.const 3.141592653589793) (get_global $~lib/math/JSMath.PI) (f64.const 0) - (i32.const 0) ) ) (block @@ -14358,7 +14267,6 @@ (f64.const 0.7071067811865476) (get_global $~lib/math/JSMath.SQRT1_2) (f64.const 0) - (i32.const 0) ) ) (block @@ -14377,7 +14285,6 @@ (f64.const 1.4142135623730951) (get_global $~lib/math/JSMath.SQRT2) (f64.const 0) - (i32.const 0) ) ) (block @@ -14398,7 +14305,6 @@ (get_global $~lib/math/JSMath.E) ) (f32.const 0) - (i32.const 0) ) ) (block @@ -14419,7 +14325,6 @@ (get_global $~lib/math/JSMath.LN2) ) (f32.const 0) - (i32.const 0) ) ) (block @@ -14440,7 +14345,6 @@ (get_global $~lib/math/JSMath.LN10) ) (f32.const 0) - (i32.const 0) ) ) (block @@ -14461,7 +14365,6 @@ (get_global $~lib/math/JSMath.LOG2E) ) (f32.const 0) - (i32.const 0) ) ) (block @@ -14482,7 +14385,6 @@ (get_global $~lib/math/JSMath.PI) ) (f32.const 0) - (i32.const 0) ) ) (block @@ -14503,7 +14405,6 @@ (get_global $~lib/math/JSMath.SQRT1_2) ) (f32.const 0) - (i32.const 0) ) ) (block @@ -14524,7 +14425,6 @@ (get_global $~lib/math/JSMath.SQRT2) ) (f32.const 0) - (i32.const 0) ) ) (block @@ -14543,7 +14443,6 @@ (f64.const -8.06684839057968) (i32.const -2) (f64.const -2.01671209764492) - (f64.const 0) (i32.const 0) ) ) @@ -14563,7 +14462,6 @@ (f64.const 4.345239849338305) (i32.const -1) (f64.const 2.1726199246691524) - (f64.const 0) (i32.const 0) ) ) @@ -14583,7 +14481,6 @@ (f64.const -8.38143342755525) (i32.const 0) (f64.const -8.38143342755525) - (f64.const 0) (i32.const 0) ) ) @@ -14603,7 +14500,6 @@ (f64.const -6.531673581913484) (i32.const 1) (f64.const -13.063347163826968) - (f64.const 0) (i32.const 0) ) ) @@ -14623,7 +14519,6 @@ (f64.const 9.267056966972586) (i32.const 2) (f64.const 37.06822786789034) - (f64.const 0) (i32.const 0) ) ) @@ -14643,7 +14538,6 @@ (f64.const 0.6619858980995045) (i32.const 3) (f64.const 5.295887184796036) - (f64.const 0) (i32.const 0) ) ) @@ -14663,7 +14557,6 @@ (f64.const -0.4066039223853553) (i32.const 4) (f64.const -6.505662758165685) - (f64.const 0) (i32.const 0) ) ) @@ -14683,7 +14576,6 @@ (f64.const 0.5617597462207241) (i32.const 5) (f64.const 17.97631187906317) - (f64.const 0) (i32.const 0) ) ) @@ -14703,7 +14595,6 @@ (f64.const 0.7741522965913037) (i32.const 6) (f64.const 49.545746981843436) - (f64.const 0) (i32.const 0) ) ) @@ -14723,7 +14614,6 @@ (f64.const -0.6787637026394024) (i32.const 7) (f64.const -86.88175393784351) - (f64.const 0) (i32.const 0) ) ) @@ -14743,7 +14633,6 @@ (f64.const 0) (i32.const 2147483647) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -14763,7 +14652,6 @@ (f64.const 0) (i32.const -2147483647) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -14783,7 +14671,6 @@ (f64.const -0) (i32.const 2147483647) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -14803,7 +14690,6 @@ (f64.const nan:0x8000000000000) (i32.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -14823,7 +14709,6 @@ (f64.const inf) (i32.const 0) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -14843,7 +14728,6 @@ (f64.const -inf) (i32.const 0) (f64.const -inf) - (f64.const 0) (i32.const 0) ) ) @@ -14863,7 +14747,6 @@ (f64.const 1) (i32.const 0) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -14883,7 +14766,6 @@ (f64.const 1) (i32.const 1) (f64.const 2) - (f64.const 0) (i32.const 0) ) ) @@ -14903,7 +14785,6 @@ (f64.const 1) (i32.const -1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -14923,7 +14804,6 @@ (f64.const 1) (i32.const 2147483647) (f64.const inf) - (f64.const 0) (i32.const 17) ) ) @@ -14943,7 +14823,6 @@ (f64.const nan:0x8000000000000) (i32.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -14963,7 +14842,6 @@ (f64.const inf) (i32.const 2147483647) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -14983,7 +14861,6 @@ (f64.const inf) (i32.const -2147483647) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -15003,7 +14880,6 @@ (f64.const -inf) (i32.const 2147483647) (f64.const -inf) - (f64.const 0) (i32.const 0) ) ) @@ -15023,7 +14899,6 @@ (f64.const 8988465674311579538646525e283) (i32.const -2097) (f64.const 5e-324) - (f64.const 0) (i32.const 0) ) ) @@ -15043,7 +14918,6 @@ (f64.const 5e-324) (i32.const 2097) (f64.const 8988465674311579538646525e283) - (f64.const 0) (i32.const 0) ) ) @@ -15063,7 +14937,6 @@ (f64.const 1.000244140625) (i32.const -1074) (f64.const 5e-324) - (f64.const 0) (i32.const 9) ) ) @@ -15083,7 +14956,6 @@ (f64.const 0.7499999999999999) (i32.const -1073) (f64.const 5e-324) - (f64.const 0) (i32.const 9) ) ) @@ -15103,7 +14975,6 @@ (f64.const 0.5000000000000012) (i32.const -1024) (f64.const 2.781342323134007e-309) - (f64.const 0) (i32.const 9) ) ) @@ -15123,7 +14994,6 @@ (f32.const -8.066848754882812) (i32.const -2) (f32.const -2.016712188720703) - (f32.const 0) (i32.const 0) ) ) @@ -15143,7 +15013,6 @@ (f32.const 4.345239639282227) (i32.const -1) (f32.const 2.1726198196411133) - (f32.const 0) (i32.const 0) ) ) @@ -15163,7 +15032,6 @@ (f32.const -8.381433486938477) (i32.const 0) (f32.const -8.381433486938477) - (f32.const 0) (i32.const 0) ) ) @@ -15183,7 +15051,6 @@ (f32.const -6.531673431396484) (i32.const 1) (f32.const -13.063346862792969) - (f32.const 0) (i32.const 0) ) ) @@ -15203,7 +15070,6 @@ (f32.const 9.267057418823242) (i32.const 2) (f32.const 37.06822967529297) - (f32.const 0) (i32.const 0) ) ) @@ -15223,7 +15089,6 @@ (f32.const 0.6619858741760254) (i32.const 3) (f32.const 5.295886993408203) - (f32.const 0) (i32.const 0) ) ) @@ -15243,7 +15108,6 @@ (f32.const -0.40660393238067627) (i32.const 4) (f32.const -6.50566291809082) - (f32.const 0) (i32.const 0) ) ) @@ -15263,7 +15127,6 @@ (f32.const 0.5617597699165344) (i32.const 5) (f32.const 17.9763126373291) - (f32.const 0) (i32.const 0) ) ) @@ -15283,7 +15146,6 @@ (f32.const 0.7741522789001465) (i32.const 6) (f32.const 49.545745849609375) - (f32.const 0) (i32.const 0) ) ) @@ -15303,7 +15165,6 @@ (f32.const -0.6787636876106262) (i32.const 7) (f32.const -86.88175201416016) - (f32.const 0) (i32.const 0) ) ) @@ -15323,7 +15184,6 @@ (f32.const 0) (i32.const 2147483647) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -15343,7 +15203,6 @@ (f32.const 0) (i32.const -2147483647) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -15363,7 +15222,6 @@ (f32.const -0) (i32.const 2147483647) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -15383,7 +15241,6 @@ (f32.const nan:0x400000) (i32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -15403,7 +15260,6 @@ (f32.const inf) (i32.const 0) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -15423,7 +15279,6 @@ (f32.const -inf) (i32.const 0) (f32.const -inf) - (f32.const 0) (i32.const 0) ) ) @@ -15443,7 +15298,6 @@ (f32.const 1) (i32.const 0) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -15463,7 +15317,6 @@ (f32.const 1) (i32.const 1) (f32.const 2) - (f32.const 0) (i32.const 0) ) ) @@ -15483,7 +15336,6 @@ (f32.const 1) (i32.const -1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -15503,7 +15355,6 @@ (f32.const 1) (i32.const 2147483647) (f32.const inf) - (f32.const 0) (i32.const 17) ) ) @@ -15523,7 +15374,6 @@ (f32.const nan:0x400000) (i32.const 1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -15543,7 +15393,6 @@ (f32.const inf) (i32.const 2147483647) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -15563,7 +15412,6 @@ (f32.const inf) (i32.const -2147483647) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -15583,7 +15431,6 @@ (f32.const -inf) (i32.const 2147483647) (f32.const -inf) - (f32.const 0) (i32.const 0) ) ) @@ -15603,7 +15450,6 @@ (f32.const 1701411834604692317316873e14) (i32.const -276) (f32.const 1.401298464324817e-45) - (f32.const 0) (i32.const 0) ) ) @@ -15623,7 +15469,6 @@ (f32.const 1.401298464324817e-45) (i32.const 276) (f32.const 1701411834604692317316873e14) - (f32.const 0) (i32.const 0) ) ) @@ -15643,7 +15488,6 @@ (f32.const 1.000244140625) (i32.const -149) (f32.const 1.401298464324817e-45) - (f32.const 0) (i32.const 9) ) ) @@ -15663,7 +15507,6 @@ (f32.const 0.7499999403953552) (i32.const -148) (f32.const 1.401298464324817e-45) - (f32.const 0) (i32.const 9) ) ) @@ -15683,7 +15526,6 @@ (f32.const 0.5000006556510925) (i32.const -128) (f32.const 1.4693693398263237e-39) - (f32.const 0) (i32.const 9) ) ) @@ -15702,8 +15544,6 @@ (call $std/math/test_abs (f64.const -8.06684839057968) (f64.const 8.06684839057968) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15721,8 +15561,6 @@ (call $std/math/test_abs (f64.const 4.345239849338305) (f64.const 4.345239849338305) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15740,8 +15578,6 @@ (call $std/math/test_abs (f64.const -8.38143342755525) (f64.const 8.38143342755525) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15759,8 +15595,6 @@ (call $std/math/test_abs (f64.const -6.531673581913484) (f64.const 6.531673581913484) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15778,8 +15612,6 @@ (call $std/math/test_abs (f64.const 9.267056966972586) (f64.const 9.267056966972586) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15797,8 +15629,6 @@ (call $std/math/test_abs (f64.const 0.6619858980995045) (f64.const 0.6619858980995045) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15816,8 +15646,6 @@ (call $std/math/test_abs (f64.const -0.4066039223853553) (f64.const 0.4066039223853553) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15835,8 +15663,6 @@ (call $std/math/test_abs (f64.const 0.5617597462207241) (f64.const 0.5617597462207241) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15854,8 +15680,6 @@ (call $std/math/test_abs (f64.const 0.7741522965913037) (f64.const 0.7741522965913037) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15873,8 +15697,6 @@ (call $std/math/test_abs (f64.const -0.6787637026394024) (f64.const 0.6787637026394024) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15892,8 +15714,6 @@ (call $std/math/test_abs (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15911,8 +15731,6 @@ (call $std/math/test_abs (f64.const -0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15930,8 +15748,6 @@ (call $std/math/test_abs (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15949,8 +15765,6 @@ (call $std/math/test_abs (f64.const -1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15968,8 +15782,6 @@ (call $std/math/test_abs (f64.const inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -15987,8 +15799,6 @@ (call $std/math/test_abs (f64.const -inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -16006,8 +15816,6 @@ (call $std/math/test_abs (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -16025,8 +15833,6 @@ (call $std/math/test_absf (f32.const -8.066848754882812) (f32.const 8.066848754882812) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16044,8 +15850,6 @@ (call $std/math/test_absf (f32.const 4.345239639282227) (f32.const 4.345239639282227) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16063,8 +15867,6 @@ (call $std/math/test_absf (f32.const -8.381433486938477) (f32.const 8.381433486938477) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16082,8 +15884,6 @@ (call $std/math/test_absf (f32.const -6.531673431396484) (f32.const 6.531673431396484) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16101,8 +15901,6 @@ (call $std/math/test_absf (f32.const 9.267057418823242) (f32.const 9.267057418823242) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16120,8 +15918,6 @@ (call $std/math/test_absf (f32.const 0.6619858741760254) (f32.const 0.6619858741760254) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16139,8 +15935,6 @@ (call $std/math/test_absf (f32.const -0.40660393238067627) (f32.const 0.40660393238067627) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16158,8 +15952,6 @@ (call $std/math/test_absf (f32.const 0.5617597699165344) (f32.const 0.5617597699165344) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16177,8 +15969,6 @@ (call $std/math/test_absf (f32.const 0.7741522789001465) (f32.const 0.7741522789001465) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16196,8 +15986,6 @@ (call $std/math/test_absf (f32.const -0.6787636876106262) (f32.const 0.6787636876106262) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16215,8 +16003,6 @@ (call $std/math/test_absf (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16234,8 +16020,6 @@ (call $std/math/test_absf (f32.const -0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16253,8 +16037,6 @@ (call $std/math/test_absf (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16272,8 +16054,6 @@ (call $std/math/test_absf (f32.const -1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16291,8 +16071,6 @@ (call $std/math/test_absf (f32.const inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16310,8 +16088,6 @@ (call $std/math/test_absf (f32.const -inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -16329,8 +16105,6 @@ (call $std/math/test_absf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -23076,7 +22850,6 @@ (call $std/math/test_ceil (f64.const -8.06684839057968) (f64.const -8) - (f64.const 0) (i32.const 1) ) ) @@ -23095,7 +22868,6 @@ (call $std/math/test_ceil (f64.const 4.345239849338305) (f64.const 5) - (f64.const 0) (i32.const 1) ) ) @@ -23114,7 +22886,6 @@ (call $std/math/test_ceil (f64.const -8.38143342755525) (f64.const -8) - (f64.const 0) (i32.const 1) ) ) @@ -23133,7 +22904,6 @@ (call $std/math/test_ceil (f64.const -6.531673581913484) (f64.const -6) - (f64.const 0) (i32.const 1) ) ) @@ -23152,7 +22922,6 @@ (call $std/math/test_ceil (f64.const 9.267056966972586) (f64.const 10) - (f64.const 0) (i32.const 1) ) ) @@ -23171,7 +22940,6 @@ (call $std/math/test_ceil (f64.const 0.6619858980995045) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23190,7 +22958,6 @@ (call $std/math/test_ceil (f64.const -0.4066039223853553) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -23209,7 +22976,6 @@ (call $std/math/test_ceil (f64.const 0.5617597462207241) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23228,7 +22994,6 @@ (call $std/math/test_ceil (f64.const 0.7741522965913037) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23247,7 +23012,6 @@ (call $std/math/test_ceil (f64.const -0.6787637026394024) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -23266,7 +23030,6 @@ (call $std/math/test_ceil (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -23285,7 +23048,6 @@ (call $std/math/test_ceil (f64.const inf) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -23304,7 +23066,6 @@ (call $std/math/test_ceil (f64.const -inf) (f64.const -inf) - (f64.const 0) (i32.const 0) ) ) @@ -23321,7 +23082,6 @@ (if (i32.eqz (call $std/math/test_ceil - (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) @@ -23342,7 +23102,6 @@ (call $std/math/test_ceil (f64.const -0) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -23361,7 +23120,6 @@ (call $std/math/test_ceil (f64.const 1) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -23380,7 +23138,6 @@ (call $std/math/test_ceil (f64.const -1) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -23399,7 +23156,6 @@ (call $std/math/test_ceil (f64.const 0.5) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23418,7 +23174,6 @@ (call $std/math/test_ceil (f64.const -0.5) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -23437,7 +23192,6 @@ (call $std/math/test_ceil (f64.const 1.0000152587890625) (f64.const 2) - (f64.const 0) (i32.const 1) ) ) @@ -23456,7 +23210,6 @@ (call $std/math/test_ceil (f64.const -1.0000152587890625) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -23475,7 +23228,6 @@ (call $std/math/test_ceil (f64.const 0.9999923706054688) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23494,7 +23246,6 @@ (call $std/math/test_ceil (f64.const -0.9999923706054688) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -23513,7 +23264,6 @@ (call $std/math/test_ceil (f64.const 7.888609052210118e-31) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23532,7 +23282,6 @@ (call $std/math/test_ceil (f64.const -7.888609052210118e-31) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -23551,7 +23300,6 @@ (call $std/math/test_ceil (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -23570,7 +23318,6 @@ (call $std/math/test_ceil (f64.const inf) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -23589,7 +23336,6 @@ (call $std/math/test_ceil (f64.const -inf) (f64.const -inf) - (f64.const 0) (i32.const 0) ) ) @@ -23606,7 +23352,6 @@ (if (i32.eqz (call $std/math/test_ceil - (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) @@ -23627,7 +23372,6 @@ (call $std/math/test_ceil (f64.const -0) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -23646,7 +23390,6 @@ (call $std/math/test_ceil (f64.const 1) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -23665,7 +23408,6 @@ (call $std/math/test_ceil (f64.const -1) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -23684,7 +23426,6 @@ (call $std/math/test_ceil (f64.const 0.5) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23703,7 +23444,6 @@ (call $std/math/test_ceil (f64.const -0.5) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -23722,7 +23462,6 @@ (call $std/math/test_ceil (f64.const 1.0000152587890625) (f64.const 2) - (f64.const 0) (i32.const 1) ) ) @@ -23741,7 +23480,6 @@ (call $std/math/test_ceil (f64.const -1.0000152587890625) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -23760,7 +23498,6 @@ (call $std/math/test_ceil (f64.const 0.9999923706054688) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23779,7 +23516,6 @@ (call $std/math/test_ceil (f64.const -0.9999923706054688) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -23798,7 +23534,6 @@ (call $std/math/test_ceil (f64.const 7.888609052210118e-31) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23817,7 +23552,6 @@ (call $std/math/test_ceil (f64.const -7.888609052210118e-31) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -23836,7 +23570,6 @@ (call $std/math/test_ceil (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -23855,7 +23588,6 @@ (call $std/math/test_ceil (f64.const inf) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -23874,7 +23606,6 @@ (call $std/math/test_ceil (f64.const -inf) (f64.const -inf) - (f64.const 0) (i32.const 0) ) ) @@ -23891,7 +23622,6 @@ (if (i32.eqz (call $std/math/test_ceil - (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) @@ -23912,7 +23642,6 @@ (call $std/math/test_ceil (f64.const -0) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -23931,7 +23660,6 @@ (call $std/math/test_ceil (f64.const 1) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -23950,7 +23678,6 @@ (call $std/math/test_ceil (f64.const -1) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -23969,7 +23696,6 @@ (call $std/math/test_ceil (f64.const 0.5) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -23988,7 +23714,6 @@ (call $std/math/test_ceil (f64.const -0.5) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -24007,7 +23732,6 @@ (call $std/math/test_ceil (f64.const 1.0000152587890625) (f64.const 2) - (f64.const 0) (i32.const 1) ) ) @@ -24026,7 +23750,6 @@ (call $std/math/test_ceil (f64.const -1.0000152587890625) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -24045,7 +23768,6 @@ (call $std/math/test_ceil (f64.const 0.9999923706054688) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -24064,7 +23786,6 @@ (call $std/math/test_ceil (f64.const -0.9999923706054688) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -24083,7 +23804,6 @@ (call $std/math/test_ceil (f64.const 7.888609052210118e-31) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -24102,7 +23822,6 @@ (call $std/math/test_ceil (f64.const -7.888609052210118e-31) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -24121,7 +23840,6 @@ (call $std/math/test_ceilf (f32.const -8.066848754882812) (f32.const -8) - (f32.const 0) (i32.const 1) ) ) @@ -24140,7 +23858,6 @@ (call $std/math/test_ceilf (f32.const 4.345239639282227) (f32.const 5) - (f32.const 0) (i32.const 1) ) ) @@ -24159,7 +23876,6 @@ (call $std/math/test_ceilf (f32.const -8.381433486938477) (f32.const -8) - (f32.const 0) (i32.const 1) ) ) @@ -24178,7 +23894,6 @@ (call $std/math/test_ceilf (f32.const -6.531673431396484) (f32.const -6) - (f32.const 0) (i32.const 1) ) ) @@ -24197,7 +23912,6 @@ (call $std/math/test_ceilf (f32.const 9.267057418823242) (f32.const 10) - (f32.const 0) (i32.const 1) ) ) @@ -24216,7 +23930,6 @@ (call $std/math/test_ceilf (f32.const 0.6619858741760254) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24235,7 +23948,6 @@ (call $std/math/test_ceilf (f32.const -0.40660393238067627) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -24254,7 +23966,6 @@ (call $std/math/test_ceilf (f32.const 0.5617597699165344) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24273,7 +23984,6 @@ (call $std/math/test_ceilf (f32.const 0.7741522789001465) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24292,7 +24002,6 @@ (call $std/math/test_ceilf (f32.const -0.6787636876106262) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -24311,7 +24020,6 @@ (call $std/math/test_ceilf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -24330,7 +24038,6 @@ (call $std/math/test_ceilf (f32.const inf) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -24349,7 +24056,6 @@ (call $std/math/test_ceilf (f32.const -inf) (f32.const -inf) - (f32.const 0) (i32.const 0) ) ) @@ -24366,7 +24072,6 @@ (if (i32.eqz (call $std/math/test_ceilf - (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) @@ -24387,7 +24092,6 @@ (call $std/math/test_ceilf (f32.const -0) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -24406,7 +24110,6 @@ (call $std/math/test_ceilf (f32.const 1) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -24425,7 +24128,6 @@ (call $std/math/test_ceilf (f32.const -1) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -24444,7 +24146,6 @@ (call $std/math/test_ceilf (f32.const 0.5) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24463,7 +24164,6 @@ (call $std/math/test_ceilf (f32.const -0.5) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -24482,7 +24182,6 @@ (call $std/math/test_ceilf (f32.const 1.0000152587890625) (f32.const 2) - (f32.const 0) (i32.const 1) ) ) @@ -24501,7 +24200,6 @@ (call $std/math/test_ceilf (f32.const -1.0000152587890625) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -24520,7 +24218,6 @@ (call $std/math/test_ceilf (f32.const 0.9999923706054688) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24539,7 +24236,6 @@ (call $std/math/test_ceilf (f32.const -0.9999923706054688) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -24558,7 +24254,6 @@ (call $std/math/test_ceilf (f32.const 7.888609052210118e-31) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24577,7 +24272,6 @@ (call $std/math/test_ceilf (f32.const -7.888609052210118e-31) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -24596,7 +24290,6 @@ (call $std/math/test_ceilf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -24615,7 +24308,6 @@ (call $std/math/test_ceilf (f32.const inf) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -24634,7 +24326,6 @@ (call $std/math/test_ceilf (f32.const -inf) (f32.const -inf) - (f32.const 0) (i32.const 0) ) ) @@ -24651,7 +24342,6 @@ (if (i32.eqz (call $std/math/test_ceilf - (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) @@ -24672,7 +24362,6 @@ (call $std/math/test_ceilf (f32.const -0) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -24691,7 +24380,6 @@ (call $std/math/test_ceilf (f32.const 1) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -24710,7 +24398,6 @@ (call $std/math/test_ceilf (f32.const -1) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -24729,7 +24416,6 @@ (call $std/math/test_ceilf (f32.const 0.5) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24748,7 +24434,6 @@ (call $std/math/test_ceilf (f32.const -0.5) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -24767,7 +24452,6 @@ (call $std/math/test_ceilf (f32.const 1.0000152587890625) (f32.const 2) - (f32.const 0) (i32.const 1) ) ) @@ -24786,7 +24470,6 @@ (call $std/math/test_ceilf (f32.const -1.0000152587890625) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -24805,7 +24488,6 @@ (call $std/math/test_ceilf (f32.const 0.9999923706054688) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24824,7 +24506,6 @@ (call $std/math/test_ceilf (f32.const -0.9999923706054688) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -24843,7 +24524,6 @@ (call $std/math/test_ceilf (f32.const 7.888609052210118e-31) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -24862,7 +24542,6 @@ (call $std/math/test_ceilf (f32.const -7.888609052210118e-31) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -24881,7 +24560,6 @@ (call $std/math/test_ceilf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -24900,7 +24578,6 @@ (call $std/math/test_ceilf (f32.const inf) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -24919,7 +24596,6 @@ (call $std/math/test_ceilf (f32.const -inf) (f32.const -inf) - (f32.const 0) (i32.const 0) ) ) @@ -24936,7 +24612,6 @@ (if (i32.eqz (call $std/math/test_ceilf - (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) @@ -24957,7 +24632,6 @@ (call $std/math/test_ceilf (f32.const -0) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -24976,7 +24650,6 @@ (call $std/math/test_ceilf (f32.const 1) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -24995,7 +24668,6 @@ (call $std/math/test_ceilf (f32.const -1) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -25014,7 +24686,6 @@ (call $std/math/test_ceilf (f32.const 0.5) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -25033,7 +24704,6 @@ (call $std/math/test_ceilf (f32.const -0.5) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -25052,7 +24722,6 @@ (call $std/math/test_ceilf (f32.const 1.0000152587890625) (f32.const 2) - (f32.const 0) (i32.const 1) ) ) @@ -25071,7 +24740,6 @@ (call $std/math/test_ceilf (f32.const -1.0000152587890625) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -25090,7 +24758,6 @@ (call $std/math/test_ceilf (f32.const 0.9999923706054688) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -25109,7 +24776,6 @@ (call $std/math/test_ceilf (f32.const -0.9999923706054688) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -25128,7 +24794,6 @@ (call $std/math/test_ceilf (f32.const 7.888609052210118e-31) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -25147,7 +24812,6 @@ (call $std/math/test_ceilf (f32.const -7.888609052210118e-31) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -27275,7 +26939,6 @@ (call $std/math/test_floor (f64.const -8.06684839057968) (f64.const -9) - (f64.const 0) (i32.const 1) ) ) @@ -27294,7 +26957,6 @@ (call $std/math/test_floor (f64.const 4.345239849338305) (f64.const 4) - (f64.const 0) (i32.const 1) ) ) @@ -27313,7 +26975,6 @@ (call $std/math/test_floor (f64.const -8.38143342755525) (f64.const -9) - (f64.const 0) (i32.const 1) ) ) @@ -27332,7 +26993,6 @@ (call $std/math/test_floor (f64.const -6.531673581913484) (f64.const -7) - (f64.const 0) (i32.const 1) ) ) @@ -27351,7 +27011,6 @@ (call $std/math/test_floor (f64.const 9.267056966972586) (f64.const 9) - (f64.const 0) (i32.const 1) ) ) @@ -27370,7 +27029,6 @@ (call $std/math/test_floor (f64.const 0.6619858980995045) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -27389,7 +27047,6 @@ (call $std/math/test_floor (f64.const -0.4066039223853553) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -27408,7 +27065,6 @@ (call $std/math/test_floor (f64.const 0.5617597462207241) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -27427,7 +27083,6 @@ (call $std/math/test_floor (f64.const 0.7741522965913037) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -27446,7 +27101,6 @@ (call $std/math/test_floor (f64.const -0.6787637026394024) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -27465,7 +27119,6 @@ (call $std/math/test_floor (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -27484,7 +27137,6 @@ (call $std/math/test_floor (f64.const inf) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -27503,7 +27155,6 @@ (call $std/math/test_floor (f64.const -inf) (f64.const -inf) - (f64.const 0) (i32.const 0) ) ) @@ -27520,7 +27171,6 @@ (if (i32.eqz (call $std/math/test_floor - (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) @@ -27541,7 +27191,6 @@ (call $std/math/test_floor (f64.const -0) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -27560,7 +27209,6 @@ (call $std/math/test_floor (f64.const 1) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -27579,7 +27227,6 @@ (call $std/math/test_floor (f64.const -1) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -27598,7 +27245,6 @@ (call $std/math/test_floor (f64.const 0.5) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -27617,7 +27263,6 @@ (call $std/math/test_floor (f64.const -0.5) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -27636,7 +27281,6 @@ (call $std/math/test_floor (f64.const 1.0000152587890625) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -27655,7 +27299,6 @@ (call $std/math/test_floor (f64.const -1.0000152587890625) (f64.const -2) - (f64.const 0) (i32.const 1) ) ) @@ -27674,7 +27317,6 @@ (call $std/math/test_floor (f64.const 0.9999923706054688) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -27693,7 +27335,6 @@ (call $std/math/test_floor (f64.const -0.9999923706054688) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -27712,7 +27353,6 @@ (call $std/math/test_floor (f64.const 7.888609052210118e-31) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -27731,7 +27371,6 @@ (call $std/math/test_floor (f64.const -7.888609052210118e-31) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -27750,7 +27389,6 @@ (call $std/math/test_floorf (f32.const -8.066848754882812) (f32.const -9) - (f32.const 0) (i32.const 1) ) ) @@ -27769,7 +27407,6 @@ (call $std/math/test_floorf (f32.const 4.345239639282227) (f32.const 4) - (f32.const 0) (i32.const 1) ) ) @@ -27788,7 +27425,6 @@ (call $std/math/test_floorf (f32.const -8.381433486938477) (f32.const -9) - (f32.const 0) (i32.const 1) ) ) @@ -27807,7 +27443,6 @@ (call $std/math/test_floorf (f32.const -6.531673431396484) (f32.const -7) - (f32.const 0) (i32.const 1) ) ) @@ -27826,7 +27461,6 @@ (call $std/math/test_floorf (f32.const 9.267057418823242) (f32.const 9) - (f32.const 0) (i32.const 1) ) ) @@ -27845,7 +27479,6 @@ (call $std/math/test_floorf (f32.const 0.6619858741760254) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -27864,7 +27497,6 @@ (call $std/math/test_floorf (f32.const -0.40660393238067627) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -27883,7 +27515,6 @@ (call $std/math/test_floorf (f32.const 0.5617597699165344) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -27902,7 +27533,6 @@ (call $std/math/test_floorf (f32.const 0.7741522789001465) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -27921,7 +27551,6 @@ (call $std/math/test_floorf (f32.const -0.6787636876106262) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -27940,7 +27569,6 @@ (call $std/math/test_floorf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -27959,7 +27587,6 @@ (call $std/math/test_floorf (f32.const inf) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -27978,7 +27605,6 @@ (call $std/math/test_floorf (f32.const -inf) (f32.const -inf) - (f32.const 0) (i32.const 0) ) ) @@ -27995,7 +27621,6 @@ (if (i32.eqz (call $std/math/test_floorf - (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) @@ -28016,7 +27641,6 @@ (call $std/math/test_floorf (f32.const -0) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -28035,7 +27659,6 @@ (call $std/math/test_floorf (f32.const 1) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -28054,7 +27677,6 @@ (call $std/math/test_floorf (f32.const -1) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -28073,7 +27695,6 @@ (call $std/math/test_floorf (f32.const 0.5) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -28092,7 +27713,6 @@ (call $std/math/test_floorf (f32.const -0.5) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -28111,7 +27731,6 @@ (call $std/math/test_floorf (f32.const 1.0000152587890625) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -28130,7 +27749,6 @@ (call $std/math/test_floorf (f32.const -1.0000152587890625) (f32.const -2) - (f32.const 0) (i32.const 1) ) ) @@ -28149,7 +27767,6 @@ (call $std/math/test_floorf (f32.const 0.9999923706054688) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -28168,7 +27785,6 @@ (call $std/math/test_floorf (f32.const -0.9999923706054688) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -28187,7 +27803,6 @@ (call $std/math/test_floorf (f32.const 7.888609052210118e-31) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -28206,7 +27821,6 @@ (call $std/math/test_floorf (f32.const -7.888609052210118e-31) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -29727,7 +29341,6 @@ (call $std/math/test_logf (f32.const 0) (f32.const -inf) - (f32.const 0) (i32.const 4) ) ) @@ -29746,7 +29359,6 @@ (call $std/math/test_logf (f32.const -0) (f32.const -inf) - (f32.const 0) (i32.const 4) ) ) @@ -29765,7 +29377,6 @@ (call $std/math/test_logf (f32.const -7.888609052210118e-31) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -29784,7 +29395,6 @@ (call $std/math/test_logf (f32.const 1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -29803,7 +29413,6 @@ (call $std/math/test_logf (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -29822,7 +29431,6 @@ (call $std/math/test_logf (f32.const inf) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -29841,7 +29449,6 @@ (call $std/math/test_logf (f32.const -inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -29860,7 +29467,6 @@ (call $std/math/test_logf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -29879,7 +29485,6 @@ (call $std/math/test_logf (f32.const 0) (f32.const -inf) - (f32.const 0) (i32.const 4) ) ) @@ -29898,7 +29503,6 @@ (call $std/math/test_logf (f32.const -0) (f32.const -inf) - (f32.const 0) (i32.const 4) ) ) @@ -29917,7 +29521,6 @@ (call $std/math/test_logf (f32.const -7.888609052210118e-31) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -29936,7 +29539,6 @@ (call $std/math/test_logf (f32.const 1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -29955,7 +29557,6 @@ (call $std/math/test_logf (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -29974,7 +29575,6 @@ (call $std/math/test_logf (f32.const inf) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -29993,7 +29593,6 @@ (call $std/math/test_logf (f32.const -inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -30012,7 +29611,6 @@ (call $std/math/test_logf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -32103,8 +31701,6 @@ (f64.const -8.06684839057968) (f64.const 4.535662560676869) (f64.const 4.535662560676869) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32123,8 +31719,6 @@ (f64.const 4.345239849338305) (f64.const -8.88799136300345) (f64.const 4.345239849338305) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32143,8 +31737,6 @@ (f64.const -8.38143342755525) (f64.const -2.763607337379588) (f64.const -2.763607337379588) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32163,8 +31755,6 @@ (f64.const -6.531673581913484) (f64.const 4.567535276842744) (f64.const 4.567535276842744) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32183,8 +31773,6 @@ (f64.const 9.267056966972586) (f64.const 4.811392084359796) (f64.const 9.267056966972586) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32203,8 +31791,6 @@ (f64.const -6.450045556060236) (f64.const 0.6620717923376739) (f64.const 0.6620717923376739) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32223,8 +31809,6 @@ (f64.const 7.858890253041697) (f64.const 0.05215452675006225) (f64.const 7.858890253041697) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32243,8 +31827,6 @@ (f64.const -0.792054511984896) (f64.const 7.67640268511754) (f64.const 7.67640268511754) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32263,8 +31845,6 @@ (f64.const 0.615702673197924) (f64.const 2.0119025790324803) (f64.const 2.0119025790324803) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32283,8 +31863,6 @@ (f64.const -0.5587586823609152) (f64.const 0.03223983060263804) (f64.const 0.03223983060263804) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32303,8 +31881,6 @@ (f64.const 0) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32323,8 +31899,6 @@ (f64.const -0) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32343,8 +31917,6 @@ (f64.const 0.5) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32363,8 +31935,6 @@ (f64.const -0.5) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32383,8 +31953,6 @@ (f64.const 1) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32403,8 +31971,6 @@ (f64.const -1) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32423,8 +31989,6 @@ (f64.const inf) (f64.const 1) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32443,8 +32007,6 @@ (f64.const -inf) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32463,8 +32025,6 @@ (f64.const nan:0x8000000000000) (f64.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32483,8 +32043,6 @@ (f64.const 0) (f64.const -1) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32503,8 +32061,6 @@ (f64.const -0) (f64.const -1) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32523,8 +32079,6 @@ (f64.const 0.5) (f64.const -1) (f64.const 0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32543,8 +32097,6 @@ (f64.const -0.5) (f64.const -1) (f64.const -0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32563,8 +32115,6 @@ (f64.const 1) (f64.const -1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32583,8 +32133,6 @@ (f64.const -1) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32603,8 +32151,6 @@ (f64.const inf) (f64.const -1) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32623,8 +32169,6 @@ (f64.const -inf) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32643,8 +32187,6 @@ (f64.const nan:0x8000000000000) (f64.const -1) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32663,8 +32205,6 @@ (f64.const 0) (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32683,8 +32223,6 @@ (f64.const 0) (f64.const -0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32703,8 +32241,6 @@ (f64.const 0) (f64.const inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32723,8 +32259,6 @@ (f64.const 0) (f64.const -inf) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32743,8 +32277,6 @@ (f64.const 0) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32763,8 +32295,6 @@ (f64.const -0) (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32783,8 +32313,6 @@ (f64.const -0) (f64.const -0) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32803,8 +32331,6 @@ (f64.const -0) (f64.const inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32823,8 +32349,6 @@ (f64.const -0) (f64.const -inf) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32843,8 +32367,6 @@ (f64.const -0) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32863,8 +32385,6 @@ (f64.const 1) (f64.const 0) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32883,8 +32403,6 @@ (f64.const -1) (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32903,8 +32421,6 @@ (f64.const inf) (f64.const 0) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32923,8 +32439,6 @@ (f64.const -inf) (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32943,8 +32457,6 @@ (f64.const nan:0x8000000000000) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32963,8 +32475,6 @@ (f64.const -1) (f64.const -0) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -32983,8 +32493,6 @@ (f64.const inf) (f64.const -0) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33003,8 +32511,6 @@ (f64.const -inf) (f64.const -0) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33023,8 +32529,6 @@ (f64.const nan:0x8000000000000) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33043,8 +32547,6 @@ (f64.const inf) (f64.const 2) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33063,8 +32565,6 @@ (f64.const inf) (f64.const -0.5) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33083,8 +32583,6 @@ (f64.const inf) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33103,8 +32601,6 @@ (f64.const -inf) (f64.const 2) (f64.const 2) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33123,8 +32619,6 @@ (f64.const -inf) (f64.const -0.5) (f64.const -0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33143,8 +32637,6 @@ (f64.const -inf) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33163,8 +32655,6 @@ (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33183,8 +32673,6 @@ (f64.const 1) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33203,8 +32691,6 @@ (f64.const -1) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33223,8 +32709,6 @@ (f64.const 1) (f64.const inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33243,8 +32727,6 @@ (f64.const -1) (f64.const inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33263,8 +32745,6 @@ (f64.const inf) (f64.const inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33283,8 +32763,6 @@ (f64.const -inf) (f64.const inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33303,8 +32781,6 @@ (f64.const 1) (f64.const -inf) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33323,8 +32799,6 @@ (f64.const -1) (f64.const -inf) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33343,8 +32817,6 @@ (f64.const inf) (f64.const -inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33363,8 +32835,6 @@ (f64.const -inf) (f64.const -inf) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33383,8 +32853,6 @@ (f64.const 1.75) (f64.const 0.5) (f64.const 1.75) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33403,8 +32871,6 @@ (f64.const -1.75) (f64.const 0.5) (f64.const 0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33423,8 +32889,6 @@ (f64.const 1.75) (f64.const -0.5) (f64.const 1.75) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33443,8 +32907,6 @@ (f64.const -1.75) (f64.const -0.5) (f64.const -0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -33463,8 +32925,6 @@ (f32.const -8.066848754882812) (f32.const 4.535662651062012) (f32.const 4.535662651062012) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33483,8 +32943,6 @@ (f32.const 4.345239639282227) (f32.const -8.887990951538086) (f32.const 4.345239639282227) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33503,8 +32961,6 @@ (f32.const -8.381433486938477) (f32.const -2.7636072635650635) (f32.const -2.7636072635650635) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33523,8 +32979,6 @@ (f32.const -6.531673431396484) (f32.const 4.567535400390625) (f32.const 4.567535400390625) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33543,8 +32997,6 @@ (f32.const 9.267057418823242) (f32.const 4.811392307281494) (f32.const 9.267057418823242) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33563,8 +33015,6 @@ (f32.const -6.450045585632324) (f32.const 0.6620717644691467) (f32.const 0.6620717644691467) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33583,8 +33033,6 @@ (f32.const 7.858890056610107) (f32.const 0.052154526114463806) (f32.const 7.858890056610107) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33603,8 +33051,6 @@ (f32.const -0.7920545339584351) (f32.const 7.676402568817139) (f32.const 7.676402568817139) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33623,8 +33069,6 @@ (f32.const 0.6157026886940002) (f32.const 2.0119025707244873) (f32.const 2.0119025707244873) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33643,8 +33087,6 @@ (f32.const -0.5587586760520935) (f32.const 0.03223983198404312) (f32.const 0.03223983198404312) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33663,8 +33105,6 @@ (f32.const 0) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33683,8 +33123,6 @@ (f32.const -0) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33703,8 +33141,6 @@ (f32.const 0.5) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33723,8 +33159,6 @@ (f32.const -0.5) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33743,8 +33177,6 @@ (f32.const 1) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33763,8 +33195,6 @@ (f32.const -1) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33783,8 +33213,6 @@ (f32.const inf) (f32.const 1) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33803,8 +33231,6 @@ (f32.const -inf) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33823,8 +33249,6 @@ (f32.const nan:0x400000) (f32.const 1) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33843,8 +33267,6 @@ (f32.const 0) (f32.const -1) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33863,8 +33285,6 @@ (f32.const -0) (f32.const -1) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33883,8 +33303,6 @@ (f32.const 0.5) (f32.const -1) (f32.const 0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33903,8 +33321,6 @@ (f32.const -0.5) (f32.const -1) (f32.const -0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33923,8 +33339,6 @@ (f32.const 1) (f32.const -1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33943,8 +33357,6 @@ (f32.const -1) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33963,8 +33375,6 @@ (f32.const inf) (f32.const -1) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -33983,8 +33393,6 @@ (f32.const -inf) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34003,8 +33411,6 @@ (f32.const nan:0x400000) (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34023,8 +33429,6 @@ (f32.const 0) (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34043,8 +33447,6 @@ (f32.const 0) (f32.const -0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34063,8 +33465,6 @@ (f32.const 0) (f32.const inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34083,8 +33483,6 @@ (f32.const 0) (f32.const -inf) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34103,8 +33501,6 @@ (f32.const 0) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34123,8 +33519,6 @@ (f32.const -0) (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34143,8 +33537,6 @@ (f32.const -0) (f32.const -0) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34163,8 +33555,6 @@ (f32.const -0) (f32.const inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34183,8 +33573,6 @@ (f32.const -0) (f32.const -inf) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34203,8 +33591,6 @@ (f32.const -0) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34223,8 +33609,6 @@ (f32.const 1) (f32.const 0) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34243,8 +33627,6 @@ (f32.const -1) (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34263,8 +33645,6 @@ (f32.const inf) (f32.const 0) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34283,8 +33663,6 @@ (f32.const -inf) (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34303,8 +33681,6 @@ (f32.const nan:0x400000) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34323,8 +33699,6 @@ (f32.const -1) (f32.const -0) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34343,8 +33717,6 @@ (f32.const inf) (f32.const -0) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34363,8 +33735,6 @@ (f32.const -inf) (f32.const -0) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34383,8 +33753,6 @@ (f32.const nan:0x400000) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34403,8 +33771,6 @@ (f32.const inf) (f32.const 2) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34423,8 +33789,6 @@ (f32.const inf) (f32.const -0.5) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34443,8 +33807,6 @@ (f32.const inf) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34463,8 +33825,6 @@ (f32.const -inf) (f32.const 2) (f32.const 2) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34483,8 +33843,6 @@ (f32.const -inf) (f32.const -0.5) (f32.const -0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34503,8 +33861,6 @@ (f32.const -inf) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34523,8 +33879,6 @@ (f32.const nan:0x400000) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34543,8 +33897,6 @@ (f32.const 1) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34563,8 +33915,6 @@ (f32.const -1) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34583,8 +33933,6 @@ (f32.const 1) (f32.const inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34603,8 +33951,6 @@ (f32.const -1) (f32.const inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34623,8 +33969,6 @@ (f32.const inf) (f32.const inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34643,8 +33987,6 @@ (f32.const -inf) (f32.const inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34663,8 +34005,6 @@ (f32.const 1) (f32.const -inf) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34683,8 +34023,6 @@ (f32.const -1) (f32.const -inf) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34703,8 +34041,6 @@ (f32.const inf) (f32.const -inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34723,8 +34059,6 @@ (f32.const -inf) (f32.const -inf) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34743,8 +34077,6 @@ (f32.const 1.75) (f32.const 0.5) (f32.const 1.75) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34763,8 +34095,6 @@ (f32.const -1.75) (f32.const 0.5) (f32.const 0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34783,8 +34113,6 @@ (f32.const 1.75) (f32.const -0.5) (f32.const 1.75) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34803,8 +34131,6 @@ (f32.const -1.75) (f32.const -0.5) (f32.const -0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -34823,8 +34149,6 @@ (f64.const -8.06684839057968) (f64.const 4.535662560676869) (f64.const -8.06684839057968) - (f64.const 0) - (i32.const 0) ) ) (block @@ -34843,8 +34167,6 @@ (f64.const 4.345239849338305) (f64.const -8.88799136300345) (f64.const -8.88799136300345) - (f64.const 0) - (i32.const 0) ) ) (block @@ -34863,8 +34185,6 @@ (f64.const -8.38143342755525) (f64.const -2.763607337379588) (f64.const -8.38143342755525) - (f64.const 0) - (i32.const 0) ) ) (block @@ -34883,8 +34203,6 @@ (f64.const -6.531673581913484) (f64.const 4.567535276842744) (f64.const -6.531673581913484) - (f64.const 0) - (i32.const 0) ) ) (block @@ -34903,8 +34221,6 @@ (f64.const 9.267056966972586) (f64.const 4.811392084359796) (f64.const 4.811392084359796) - (f64.const 0) - (i32.const 0) ) ) (block @@ -34923,8 +34239,6 @@ (f64.const -6.450045556060236) (f64.const 0.6620717923376739) (f64.const -6.450045556060236) - (f64.const 0) - (i32.const 0) ) ) (block @@ -34943,8 +34257,6 @@ (f64.const 7.858890253041697) (f64.const 0.05215452675006225) (f64.const 0.05215452675006225) - (f64.const 0) - (i32.const 0) ) ) (block @@ -34963,8 +34275,6 @@ (f64.const -0.792054511984896) (f64.const 7.67640268511754) (f64.const -0.792054511984896) - (f64.const 0) - (i32.const 0) ) ) (block @@ -34983,8 +34293,6 @@ (f64.const 0.615702673197924) (f64.const 2.0119025790324803) (f64.const 0.615702673197924) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35003,8 +34311,6 @@ (f64.const -0.5587586823609152) (f64.const 0.03223983060263804) (f64.const -0.5587586823609152) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35023,8 +34329,6 @@ (f64.const 0) (f64.const 1) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35043,8 +34347,6 @@ (f64.const -0) (f64.const 1) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35063,8 +34365,6 @@ (f64.const 0.5) (f64.const 1) (f64.const 0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35083,8 +34383,6 @@ (f64.const -0.5) (f64.const 1) (f64.const -0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35103,8 +34401,6 @@ (f64.const 1) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35123,8 +34419,6 @@ (f64.const -1) (f64.const 1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35143,8 +34437,6 @@ (f64.const inf) (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35163,8 +34455,6 @@ (f64.const -inf) (f64.const 1) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35183,8 +34473,6 @@ (f64.const nan:0x8000000000000) (f64.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35203,8 +34491,6 @@ (f64.const 0) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35223,8 +34509,6 @@ (f64.const -0) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35243,8 +34527,6 @@ (f64.const 0.5) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35263,8 +34545,6 @@ (f64.const -0.5) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35283,8 +34563,6 @@ (f64.const 1) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35303,8 +34581,6 @@ (f64.const -1) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35323,8 +34599,6 @@ (f64.const inf) (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35343,8 +34617,6 @@ (f64.const -inf) (f64.const -1) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35363,8 +34635,6 @@ (f64.const nan:0x8000000000000) (f64.const -1) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35383,8 +34653,6 @@ (f64.const 0) (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35403,8 +34671,6 @@ (f64.const 0) (f64.const -0) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35423,8 +34689,6 @@ (f64.const 0) (f64.const inf) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35443,8 +34707,6 @@ (f64.const 0) (f64.const -inf) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35463,8 +34725,6 @@ (f64.const 0) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35483,8 +34743,6 @@ (f64.const -0) (f64.const 0) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35503,8 +34761,6 @@ (f64.const -0) (f64.const -0) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35523,8 +34779,6 @@ (f64.const -0) (f64.const inf) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35543,8 +34797,6 @@ (f64.const -0) (f64.const -inf) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35563,8 +34815,6 @@ (f64.const -0) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35583,8 +34833,6 @@ (f64.const 1) (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35603,8 +34851,6 @@ (f64.const -1) (f64.const 0) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35623,8 +34869,6 @@ (f64.const inf) (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35643,8 +34887,6 @@ (f64.const -inf) (f64.const 0) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35663,8 +34905,6 @@ (f64.const nan:0x8000000000000) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35683,8 +34923,6 @@ (f64.const -1) (f64.const -0) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35703,8 +34941,6 @@ (f64.const inf) (f64.const -0) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35723,8 +34959,6 @@ (f64.const -inf) (f64.const -0) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35743,8 +34977,6 @@ (f64.const nan:0x8000000000000) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35763,8 +34995,6 @@ (f64.const inf) (f64.const 2) (f64.const 2) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35783,8 +35013,6 @@ (f64.const inf) (f64.const -0.5) (f64.const -0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35803,8 +35031,6 @@ (f64.const inf) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35823,8 +35049,6 @@ (f64.const -inf) (f64.const 2) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35843,8 +35067,6 @@ (f64.const -inf) (f64.const -0.5) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35863,8 +35085,6 @@ (f64.const -inf) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35883,8 +35103,6 @@ (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35903,8 +35121,6 @@ (f64.const 1) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35923,8 +35139,6 @@ (f64.const -1) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35943,8 +35157,6 @@ (f64.const 1) (f64.const inf) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35963,8 +35175,6 @@ (f64.const -1) (f64.const inf) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -35983,8 +35193,6 @@ (f64.const inf) (f64.const inf) (f64.const inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36003,8 +35211,6 @@ (f64.const -inf) (f64.const inf) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36023,8 +35229,6 @@ (f64.const 1) (f64.const -inf) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36043,8 +35247,6 @@ (f64.const -1) (f64.const -inf) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36063,8 +35265,6 @@ (f64.const inf) (f64.const -inf) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36083,8 +35283,6 @@ (f64.const -inf) (f64.const -inf) (f64.const -inf) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36103,8 +35301,6 @@ (f64.const 1.75) (f64.const 0.5) (f64.const 0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36123,8 +35319,6 @@ (f64.const -1.75) (f64.const 0.5) (f64.const -1.75) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36143,8 +35337,6 @@ (f64.const 1.75) (f64.const -0.5) (f64.const -0.5) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36163,8 +35355,6 @@ (f64.const -1.75) (f64.const -0.5) (f64.const -1.75) - (f64.const 0) - (i32.const 0) ) ) (block @@ -36183,8 +35373,6 @@ (f32.const -8.066848754882812) (f32.const 4.535662651062012) (f32.const -8.066848754882812) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36203,8 +35391,6 @@ (f32.const 4.345239639282227) (f32.const -8.887990951538086) (f32.const -8.887990951538086) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36223,8 +35409,6 @@ (f32.const -8.381433486938477) (f32.const -2.7636072635650635) (f32.const -8.381433486938477) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36243,8 +35427,6 @@ (f32.const -6.531673431396484) (f32.const 4.567535400390625) (f32.const -6.531673431396484) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36263,8 +35445,6 @@ (f32.const 9.267057418823242) (f32.const 4.811392307281494) (f32.const 4.811392307281494) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36283,8 +35463,6 @@ (f32.const -6.450045585632324) (f32.const 0.6620717644691467) (f32.const -6.450045585632324) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36303,8 +35481,6 @@ (f32.const 7.858890056610107) (f32.const 0.052154526114463806) (f32.const 0.052154526114463806) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36323,8 +35499,6 @@ (f32.const -0.7920545339584351) (f32.const 7.676402568817139) (f32.const -0.7920545339584351) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36343,8 +35517,6 @@ (f32.const 0.6157026886940002) (f32.const 2.0119025707244873) (f32.const 0.6157026886940002) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36363,8 +35535,6 @@ (f32.const -0.5587586760520935) (f32.const 0.03223983198404312) (f32.const -0.5587586760520935) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36383,8 +35553,6 @@ (f32.const 0) (f32.const 1) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36403,8 +35571,6 @@ (f32.const -0) (f32.const 1) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36423,8 +35589,6 @@ (f32.const 0.5) (f32.const 1) (f32.const 0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36443,8 +35607,6 @@ (f32.const -0.5) (f32.const 1) (f32.const -0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36463,8 +35625,6 @@ (f32.const 1) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36483,8 +35643,6 @@ (f32.const -1) (f32.const 1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36503,8 +35661,6 @@ (f32.const inf) (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36523,8 +35679,6 @@ (f32.const -inf) (f32.const 1) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36543,8 +35697,6 @@ (f32.const nan:0x400000) (f32.const 1) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36563,8 +35715,6 @@ (f32.const 0) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36583,8 +35733,6 @@ (f32.const -0) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36603,8 +35751,6 @@ (f32.const 0.5) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36623,8 +35769,6 @@ (f32.const -0.5) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36643,8 +35787,6 @@ (f32.const 1) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36663,8 +35805,6 @@ (f32.const -1) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36683,8 +35823,6 @@ (f32.const inf) (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36703,8 +35841,6 @@ (f32.const -inf) (f32.const -1) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36723,8 +35859,6 @@ (f32.const nan:0x400000) (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36743,8 +35877,6 @@ (f32.const 0) (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36763,8 +35895,6 @@ (f32.const 0) (f32.const -0) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36783,8 +35913,6 @@ (f32.const 0) (f32.const inf) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36803,8 +35931,6 @@ (f32.const 0) (f32.const -inf) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36823,8 +35949,6 @@ (f32.const 0) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36843,8 +35967,6 @@ (f32.const -0) (f32.const 0) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36863,8 +35985,6 @@ (f32.const -0) (f32.const -0) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36883,8 +36003,6 @@ (f32.const -0) (f32.const inf) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36903,8 +36021,6 @@ (f32.const -0) (f32.const -inf) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36923,8 +36039,6 @@ (f32.const -0) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36943,8 +36057,6 @@ (f32.const 1) (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36963,8 +36075,6 @@ (f32.const -1) (f32.const 0) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -36983,8 +36093,6 @@ (f32.const inf) (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37003,8 +36111,6 @@ (f32.const -inf) (f32.const 0) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37023,8 +36129,6 @@ (f32.const nan:0x400000) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37043,8 +36147,6 @@ (f32.const -1) (f32.const -0) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37063,8 +36165,6 @@ (f32.const inf) (f32.const -0) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37083,8 +36183,6 @@ (f32.const -inf) (f32.const -0) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37103,8 +36201,6 @@ (f32.const nan:0x400000) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37123,8 +36219,6 @@ (f32.const inf) (f32.const 2) (f32.const 2) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37143,8 +36237,6 @@ (f32.const inf) (f32.const -0.5) (f32.const -0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37163,8 +36255,6 @@ (f32.const inf) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37183,8 +36273,6 @@ (f32.const -inf) (f32.const 2) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37203,8 +36291,6 @@ (f32.const -inf) (f32.const -0.5) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37223,8 +36309,6 @@ (f32.const -inf) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37243,8 +36327,6 @@ (f32.const nan:0x400000) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37263,8 +36345,6 @@ (f32.const 1) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37283,8 +36363,6 @@ (f32.const -1) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37303,8 +36381,6 @@ (f32.const 1) (f32.const inf) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37323,8 +36399,6 @@ (f32.const -1) (f32.const inf) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37343,8 +36417,6 @@ (f32.const inf) (f32.const inf) (f32.const inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37363,8 +36435,6 @@ (f32.const -inf) (f32.const inf) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37383,8 +36453,6 @@ (f32.const 1) (f32.const -inf) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37403,8 +36471,6 @@ (f32.const -1) (f32.const -inf) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37423,8 +36489,6 @@ (f32.const inf) (f32.const -inf) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37443,8 +36507,6 @@ (f32.const -inf) (f32.const -inf) (f32.const -inf) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37463,8 +36525,6 @@ (f32.const 1.75) (f32.const 0.5) (f32.const 0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37483,8 +36543,6 @@ (f32.const -1.75) (f32.const 0.5) (f32.const -1.75) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37503,8 +36561,6 @@ (f32.const 1.75) (f32.const -0.5) (f32.const -0.5) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37523,8 +36579,6 @@ (f32.const -1.75) (f32.const -0.5) (f32.const -1.75) - (f32.const 0) - (i32.const 0) ) ) (block @@ -37543,7 +36597,6 @@ (f64.const -8.06684839057968) (f64.const 4.535662560676869) (f64.const -3.531185829902812) - (f64.const 0) (i32.const 0) ) ) @@ -37563,7 +36616,6 @@ (f64.const 4.345239849338305) (f64.const -8.88799136300345) (f64.const 4.345239849338305) - (f64.const 0) (i32.const 0) ) ) @@ -37583,7 +36635,6 @@ (f64.const -8.38143342755525) (f64.const -2.763607337379588) (f64.const -0.09061141541648476) - (f64.const 0) (i32.const 0) ) ) @@ -37603,7 +36654,6 @@ (f64.const -6.531673581913484) (f64.const 4.567535276842744) (f64.const -1.9641383050707404) - (f64.const 0) (i32.const 0) ) ) @@ -37623,7 +36673,6 @@ (f64.const 9.267056966972586) (f64.const 4.811392084359796) (f64.const 4.45566488261279) - (f64.const 0) (i32.const 0) ) ) @@ -37643,7 +36692,6 @@ (f64.const -6.450045556060236) (f64.const 0.6620717923376739) (f64.const -0.4913994250211714) - (f64.const 0) (i32.const 0) ) ) @@ -37663,7 +36711,6 @@ (f64.const 7.858890253041697) (f64.const 0.05215452675006225) (f64.const 0.035711240532359426) - (f64.const 0) (i32.const 0) ) ) @@ -37683,7 +36730,6 @@ (f64.const -0.792054511984896) (f64.const 7.67640268511754) (f64.const -0.792054511984896) - (f64.const 0) (i32.const 0) ) ) @@ -37703,7 +36749,6 @@ (f64.const 0.615702673197924) (f64.const 2.0119025790324803) (f64.const 0.615702673197924) - (f64.const 0) (i32.const 0) ) ) @@ -37723,7 +36768,6 @@ (f64.const -0.5587586823609152) (f64.const 0.03223983060263804) (f64.const -0.0106815621160685) - (f64.const 0) (i32.const 0) ) ) @@ -37743,7 +36787,6 @@ (f64.const 0) (f64.const 1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -37763,7 +36806,6 @@ (f64.const -0) (f64.const 1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -37783,7 +36825,6 @@ (f64.const 0.5) (f64.const 1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -37803,7 +36844,6 @@ (f64.const -0.5) (f64.const 1) (f64.const -0.5) - (f64.const 0) (i32.const 0) ) ) @@ -37823,7 +36863,6 @@ (f64.const 1) (f64.const 1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -37843,7 +36882,6 @@ (f64.const -1) (f64.const 1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -37863,7 +36901,6 @@ (f64.const 1.5) (f64.const 1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -37883,7 +36920,6 @@ (f64.const -1.5) (f64.const 1) (f64.const -0.5) - (f64.const 0) (i32.const 0) ) ) @@ -37903,7 +36939,6 @@ (f64.const 2) (f64.const 1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -37923,7 +36958,6 @@ (f64.const -2) (f64.const 1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -37943,7 +36977,6 @@ (f64.const inf) (f64.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -37963,7 +36996,6 @@ (f64.const -inf) (f64.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -37983,7 +37015,6 @@ (f64.const nan:0x8000000000000) (f64.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38003,7 +37034,6 @@ (f64.const 0) (f64.const -1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -38023,7 +37053,6 @@ (f64.const -0) (f64.const -1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -38043,7 +37072,6 @@ (f64.const 0.5) (f64.const -1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -38063,7 +37091,6 @@ (f64.const -0.5) (f64.const -1) (f64.const -0.5) - (f64.const 0) (i32.const 0) ) ) @@ -38083,7 +37110,6 @@ (f64.const 1) (f64.const -1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -38103,7 +37129,6 @@ (f64.const -1) (f64.const -1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -38123,7 +37148,6 @@ (f64.const 1.5) (f64.const -1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -38143,7 +37167,6 @@ (f64.const -1.5) (f64.const -1) (f64.const -0.5) - (f64.const 0) (i32.const 0) ) ) @@ -38163,7 +37186,6 @@ (f64.const 2) (f64.const -1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -38183,7 +37205,6 @@ (f64.const -2) (f64.const -1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -38203,7 +37224,6 @@ (f64.const inf) (f64.const -1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38223,7 +37243,6 @@ (f64.const -inf) (f64.const -1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38243,7 +37262,6 @@ (f64.const nan:0x8000000000000) (f64.const -1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38263,7 +37281,6 @@ (f64.const 0) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38283,7 +37300,6 @@ (f64.const 0) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38303,7 +37319,6 @@ (f64.const 0) (f64.const inf) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -38323,7 +37338,6 @@ (f64.const 0) (f64.const -inf) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -38343,7 +37357,6 @@ (f64.const 0) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38363,7 +37376,6 @@ (f64.const -0) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38383,7 +37395,6 @@ (f64.const -0) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38403,7 +37414,6 @@ (f64.const -0) (f64.const inf) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -38423,7 +37433,6 @@ (f64.const -0) (f64.const -inf) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -38443,7 +37452,6 @@ (f64.const -0) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38463,7 +37471,6 @@ (f64.const 1) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38483,7 +37490,6 @@ (f64.const -1) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38503,7 +37509,6 @@ (f64.const inf) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38523,7 +37528,6 @@ (f64.const -inf) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38543,7 +37547,6 @@ (f64.const nan:0x8000000000000) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38563,7 +37566,6 @@ (f64.const -1) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38583,7 +37585,6 @@ (f64.const inf) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38603,7 +37604,6 @@ (f64.const -inf) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38623,7 +37623,6 @@ (f64.const nan:0x8000000000000) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38643,7 +37642,6 @@ (f64.const inf) (f64.const 2) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38663,7 +37661,6 @@ (f64.const inf) (f64.const -0.5) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38683,7 +37680,6 @@ (f64.const inf) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38703,7 +37699,6 @@ (f64.const -inf) (f64.const 2) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38723,7 +37718,6 @@ (f64.const -inf) (f64.const -0.5) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38743,7 +37737,6 @@ (f64.const -inf) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38763,7 +37756,6 @@ (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38783,7 +37775,6 @@ (f64.const 1) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38803,7 +37794,6 @@ (f64.const -1) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -38823,7 +37813,6 @@ (f64.const 1) (f64.const inf) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -38843,7 +37832,6 @@ (f64.const -1) (f64.const inf) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -38863,7 +37851,6 @@ (f64.const inf) (f64.const inf) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38883,7 +37870,6 @@ (f64.const -inf) (f64.const inf) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38903,7 +37889,6 @@ (f64.const 1) (f64.const -inf) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -38923,7 +37908,6 @@ (f64.const -1) (f64.const -inf) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -38943,7 +37927,6 @@ (f64.const inf) (f64.const -inf) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38963,7 +37946,6 @@ (f64.const -inf) (f64.const -inf) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -38983,7 +37965,6 @@ (f64.const 1.75) (f64.const 0.5) (f64.const 0.25) - (f64.const 0) (i32.const 0) ) ) @@ -39003,7 +37984,6 @@ (f64.const -1.75) (f64.const 0.5) (f64.const -0.25) - (f64.const 0) (i32.const 0) ) ) @@ -39023,7 +38003,6 @@ (f64.const 1.75) (f64.const -0.5) (f64.const 0.25) - (f64.const 0) (i32.const 0) ) ) @@ -39043,7 +38022,6 @@ (f64.const -1.75) (f64.const -0.5) (f64.const -0.25) - (f64.const 0) (i32.const 0) ) ) @@ -39063,7 +38041,6 @@ (f32.const -8.066848754882812) (f32.const 4.535662651062012) (f32.const -3.531186103820801) - (f32.const 0) (i32.const 0) ) ) @@ -39083,7 +38060,6 @@ (f32.const 4.345239639282227) (f32.const -8.887990951538086) (f32.const 4.345239639282227) - (f32.const 0) (i32.const 0) ) ) @@ -39103,7 +38079,6 @@ (f32.const -8.381433486938477) (f32.const -2.7636072635650635) (f32.const -0.09061169624328613) - (f32.const 0) (i32.const 0) ) ) @@ -39123,7 +38098,6 @@ (f32.const -6.531673431396484) (f32.const 4.567535400390625) (f32.const -1.9641380310058594) - (f32.const 0) (i32.const 0) ) ) @@ -39143,7 +38117,6 @@ (f32.const 9.267057418823242) (f32.const 4.811392307281494) (f32.const 4.455665111541748) - (f32.const 0) (i32.const 0) ) ) @@ -39163,7 +38136,6 @@ (f32.const -6.450045585632324) (f32.const 0.6620717644691467) (f32.const -0.49139970541000366) - (f32.const 0) (i32.const 0) ) ) @@ -39183,7 +38155,6 @@ (f32.const 7.858890056610107) (f32.const 0.052154526114463806) (f32.const 0.0357111394405365) - (f32.const 0) (i32.const 0) ) ) @@ -39203,7 +38174,6 @@ (f32.const -0.7920545339584351) (f32.const 7.676402568817139) (f32.const -0.7920545339584351) - (f32.const 0) (i32.const 0) ) ) @@ -39223,7 +38193,6 @@ (f32.const 0.6157026886940002) (f32.const 2.0119025707244873) (f32.const 0.6157026886940002) - (f32.const 0) (i32.const 0) ) ) @@ -39243,7 +38212,6 @@ (f32.const -0.5587586760520935) (f32.const 0.03223983198404312) (f32.const -0.010681532323360443) - (f32.const 0) (i32.const 0) ) ) @@ -39263,7 +38231,6 @@ (f32.const 0) (f32.const 1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -39283,7 +38250,6 @@ (f32.const -0) (f32.const 1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -39303,7 +38269,6 @@ (f32.const 0.5) (f32.const 1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -39323,7 +38288,6 @@ (f32.const -0.5) (f32.const 1) (f32.const -0.5) - (f32.const 0) (i32.const 0) ) ) @@ -39343,7 +38307,6 @@ (f32.const 1) (f32.const 1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -39363,7 +38326,6 @@ (f32.const -1) (f32.const 1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -39383,7 +38345,6 @@ (f32.const 1.5) (f32.const 1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -39403,7 +38364,6 @@ (f32.const -1.5) (f32.const 1) (f32.const -0.5) - (f32.const 0) (i32.const 0) ) ) @@ -39423,7 +38383,6 @@ (f32.const 2) (f32.const 1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -39443,7 +38402,6 @@ (f32.const -2) (f32.const 1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -39463,7 +38421,6 @@ (f32.const inf) (f32.const 1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -39483,7 +38440,6 @@ (f32.const -inf) (f32.const 1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -39503,7 +38459,6 @@ (f32.const nan:0x400000) (f32.const 1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -39523,7 +38478,6 @@ (f32.const 0) (f32.const -1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -39543,7 +38497,6 @@ (f32.const -0) (f32.const -1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -39563,7 +38516,6 @@ (f32.const 0.5) (f32.const -1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -39583,7 +38535,6 @@ (f32.const -0.5) (f32.const -1) (f32.const -0.5) - (f32.const 0) (i32.const 0) ) ) @@ -39603,7 +38554,6 @@ (f32.const 1) (f32.const -1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -39623,7 +38573,6 @@ (f32.const -1) (f32.const -1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -39643,7 +38592,6 @@ (f32.const 1.5) (f32.const -1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -39663,7 +38611,6 @@ (f32.const -1.5) (f32.const -1) (f32.const -0.5) - (f32.const 0) (i32.const 0) ) ) @@ -39683,7 +38630,6 @@ (f32.const 2) (f32.const -1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -39703,7 +38649,6 @@ (f32.const -2) (f32.const -1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -39723,7 +38668,6 @@ (f32.const inf) (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -39743,7 +38687,6 @@ (f32.const -inf) (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -39763,7 +38706,6 @@ (f32.const nan:0x400000) (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -39783,7 +38725,6 @@ (f32.const 0) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -39803,7 +38744,6 @@ (f32.const 0) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -39823,7 +38763,6 @@ (f32.const 0) (f32.const inf) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -39843,7 +38782,6 @@ (f32.const 0) (f32.const -inf) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -39863,7 +38801,6 @@ (f32.const 0) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -39883,7 +38820,6 @@ (f32.const -0) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -39903,7 +38839,6 @@ (f32.const -0) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -39923,7 +38858,6 @@ (f32.const -0) (f32.const inf) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -39943,7 +38877,6 @@ (f32.const -0) (f32.const -inf) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -39963,7 +38896,6 @@ (f32.const -0) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -39983,7 +38915,6 @@ (f32.const 1) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40003,7 +38934,6 @@ (f32.const -1) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40023,7 +38953,6 @@ (f32.const inf) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40043,7 +38972,6 @@ (f32.const -inf) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40063,7 +38991,6 @@ (f32.const nan:0x400000) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -40083,7 +39010,6 @@ (f32.const -1) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40103,7 +39029,6 @@ (f32.const inf) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40123,7 +39048,6 @@ (f32.const -inf) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40143,7 +39067,6 @@ (f32.const nan:0x400000) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -40163,7 +39086,6 @@ (f32.const inf) (f32.const 2) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40183,7 +39105,6 @@ (f32.const inf) (f32.const -0.5) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40203,7 +39124,6 @@ (f32.const inf) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -40223,7 +39143,6 @@ (f32.const -inf) (f32.const 2) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40243,7 +39162,6 @@ (f32.const -inf) (f32.const -0.5) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40263,7 +39181,6 @@ (f32.const -inf) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -40283,7 +39200,6 @@ (f32.const nan:0x400000) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -40303,7 +39219,6 @@ (f32.const 1) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -40323,7 +39238,6 @@ (f32.const -1) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -40343,7 +39257,6 @@ (f32.const 1) (f32.const inf) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -40363,7 +39276,6 @@ (f32.const -1) (f32.const inf) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -40383,7 +39295,6 @@ (f32.const inf) (f32.const inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40403,7 +39314,6 @@ (f32.const -inf) (f32.const inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40423,7 +39333,6 @@ (f32.const 1) (f32.const -inf) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -40443,7 +39352,6 @@ (f32.const -1) (f32.const -inf) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -40463,7 +39371,6 @@ (f32.const inf) (f32.const -inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40483,7 +39390,6 @@ (f32.const -inf) (f32.const -inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -40503,7 +39409,6 @@ (f32.const 1.75) (f32.const 0.5) (f32.const 0.25) - (f32.const 0) (i32.const 0) ) ) @@ -40523,7 +39428,6 @@ (f32.const -1.75) (f32.const 0.5) (f32.const -0.25) - (f32.const 0) (i32.const 0) ) ) @@ -40543,7 +39447,6 @@ (f32.const 1.75) (f32.const -0.5) (f32.const 0.25) - (f32.const 0) (i32.const 0) ) ) @@ -40563,7 +39466,6 @@ (f32.const -1.75) (f32.const -0.5) (f32.const -0.25) - (f32.const 0) (i32.const 0) ) ) @@ -44777,7 +43679,6 @@ (call $std/math/test_round (f64.const -8.06684839057968) (f64.const -8) - (f64.const 0) (i32.const 1) ) ) @@ -44796,7 +43697,6 @@ (call $std/math/test_round (f64.const 4.345239849338305) (f64.const 4) - (f64.const 0) (i32.const 1) ) ) @@ -44815,7 +43715,6 @@ (call $std/math/test_round (f64.const -8.38143342755525) (f64.const -8) - (f64.const 0) (i32.const 1) ) ) @@ -44834,7 +43733,6 @@ (call $std/math/test_round (f64.const -6.531673581913484) (f64.const -7) - (f64.const 0) (i32.const 1) ) ) @@ -44853,7 +43751,6 @@ (call $std/math/test_round (f64.const 9.267056966972586) (f64.const 9) - (f64.const 0) (i32.const 1) ) ) @@ -44872,7 +43769,6 @@ (call $std/math/test_round (f64.const 0.6619858980995045) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -44891,7 +43787,6 @@ (call $std/math/test_round (f64.const -0.4066039223853553) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -44910,7 +43805,6 @@ (call $std/math/test_round (f64.const 0.5617597462207241) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -44929,7 +43823,6 @@ (call $std/math/test_round (f64.const 0.7741522965913037) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -44948,7 +43841,6 @@ (call $std/math/test_round (f64.const -0.6787637026394024) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -44967,7 +43859,6 @@ (call $std/math/test_round (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -44986,7 +43877,6 @@ (call $std/math/test_round (f64.const inf) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -45005,7 +43895,6 @@ (call $std/math/test_round (f64.const -inf) (f64.const -inf) - (f64.const 0) (i32.const 0) ) ) @@ -45022,7 +43911,6 @@ (if (i32.eqz (call $std/math/test_round - (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) @@ -45043,7 +43931,6 @@ (call $std/math/test_round (f64.const -0) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -45062,7 +43949,6 @@ (call $std/math/test_round (f64.const 1) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -45081,7 +43967,6 @@ (call $std/math/test_round (f64.const -1) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -45100,7 +43985,6 @@ (call $std/math/test_round (f64.const 0.5) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -45119,7 +44003,6 @@ (call $std/math/test_round (f64.const -0.5) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -45138,7 +44021,6 @@ (call $std/math/test_round (f64.const 1.5) (f64.const 2) - (f64.const 0) (i32.const 1) ) ) @@ -45157,7 +44039,6 @@ (call $std/math/test_round (f64.const -1.5) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -45176,7 +44057,6 @@ (call $std/math/test_round (f64.const 1.0000152587890625) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -45195,7 +44075,6 @@ (call $std/math/test_round (f64.const -1.0000152587890625) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -45214,7 +44093,6 @@ (call $std/math/test_round (f64.const 0.9999923706054688) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -45233,7 +44111,6 @@ (call $std/math/test_round (f64.const -0.9999923706054688) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -45252,7 +44129,6 @@ (call $std/math/test_round (f64.const 7.888609052210118e-31) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -45271,7 +44147,6 @@ (call $std/math/test_round (f64.const -7.888609052210118e-31) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -45290,7 +44165,6 @@ (call $std/math/test_roundf (f32.const -8.066848754882812) (f32.const -8) - (f32.const 0) (i32.const 1) ) ) @@ -45309,7 +44183,6 @@ (call $std/math/test_roundf (f32.const 4.345239639282227) (f32.const 4) - (f32.const 0) (i32.const 1) ) ) @@ -45328,7 +44201,6 @@ (call $std/math/test_roundf (f32.const -8.381433486938477) (f32.const -8) - (f32.const 0) (i32.const 1) ) ) @@ -45347,7 +44219,6 @@ (call $std/math/test_roundf (f32.const -6.531673431396484) (f32.const -7) - (f32.const 0) (i32.const 1) ) ) @@ -45366,7 +44237,6 @@ (call $std/math/test_roundf (f32.const 9.267057418823242) (f32.const 9) - (f32.const 0) (i32.const 1) ) ) @@ -45385,7 +44255,6 @@ (call $std/math/test_roundf (f32.const 0.6619858741760254) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -45404,7 +44273,6 @@ (call $std/math/test_roundf (f32.const -0.40660393238067627) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -45423,7 +44291,6 @@ (call $std/math/test_roundf (f32.const 0.5617597699165344) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -45442,7 +44309,6 @@ (call $std/math/test_roundf (f32.const 0.7741522789001465) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -45461,7 +44327,6 @@ (call $std/math/test_roundf (f32.const -0.6787636876106262) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -45480,7 +44345,6 @@ (call $std/math/test_roundf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -45499,7 +44363,6 @@ (call $std/math/test_roundf (f32.const inf) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -45518,7 +44381,6 @@ (call $std/math/test_roundf (f32.const -inf) (f32.const -inf) - (f32.const 0) (i32.const 0) ) ) @@ -45535,7 +44397,6 @@ (if (i32.eqz (call $std/math/test_roundf - (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) @@ -45556,7 +44417,6 @@ (call $std/math/test_roundf (f32.const -0) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -45575,7 +44435,6 @@ (call $std/math/test_roundf (f32.const 1) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -45594,7 +44453,6 @@ (call $std/math/test_roundf (f32.const -1) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -45613,7 +44471,6 @@ (call $std/math/test_roundf (f32.const 0.5) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -45632,7 +44489,6 @@ (call $std/math/test_roundf (f32.const -0.5) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -45651,7 +44507,6 @@ (call $std/math/test_round (f64.const 1.5) (f64.const 2) - (f64.const 0) (i32.const 1) ) ) @@ -45670,7 +44525,6 @@ (call $std/math/test_round (f64.const -1.5) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -45689,7 +44543,6 @@ (call $std/math/test_roundf (f32.const 1.0000152587890625) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -45708,7 +44561,6 @@ (call $std/math/test_roundf (f32.const -1.0000152587890625) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -45727,7 +44579,6 @@ (call $std/math/test_roundf (f32.const 0.9999923706054688) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -45746,7 +44597,6 @@ (call $std/math/test_roundf (f32.const -0.9999923706054688) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -45765,7 +44615,6 @@ (call $std/math/test_roundf (f32.const 7.888609052210118e-31) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -45784,7 +44633,6 @@ (call $std/math/test_roundf (f32.const -7.888609052210118e-31) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -45803,8 +44651,6 @@ (call $std/math/test_sign (f64.const 0) (f64.const 0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45822,8 +44668,6 @@ (call $std/math/test_sign (f64.const -0) (f64.const -0) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45841,8 +44685,6 @@ (call $std/math/test_sign (f64.const 1) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45860,8 +44702,6 @@ (call $std/math/test_sign (f64.const 2) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45879,8 +44719,6 @@ (call $std/math/test_sign (f64.const -1) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45898,8 +44736,6 @@ (call $std/math/test_sign (f64.const -2) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45917,8 +44753,6 @@ (call $std/math/test_sign (f64.const inf) (f64.const 1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45936,8 +44770,6 @@ (call $std/math/test_sign (f64.const -inf) (f64.const -1) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45955,8 +44787,6 @@ (call $std/math/test_sign (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) - (i32.const 0) ) ) (block @@ -45974,8 +44804,6 @@ (call $std/math/test_signf (f32.const 0) (f32.const 0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -45993,8 +44821,6 @@ (call $std/math/test_signf (f32.const -0) (f32.const -0) - (f32.const 0) - (i32.const 0) ) ) (block @@ -46012,8 +44838,6 @@ (call $std/math/test_signf (f32.const 1) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -46031,8 +44855,6 @@ (call $std/math/test_signf (f32.const 2) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -46050,8 +44872,6 @@ (call $std/math/test_signf (f32.const -1) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -46069,8 +44889,6 @@ (call $std/math/test_signf (f32.const -2) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -46088,8 +44906,6 @@ (call $std/math/test_signf (f32.const inf) (f32.const 1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -46107,8 +44923,6 @@ (call $std/math/test_signf (f32.const -inf) (f32.const -1) - (f32.const 0) - (i32.const 0) ) ) (block @@ -46126,8 +44940,6 @@ (call $std/math/test_signf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) - (i32.const 0) ) ) (block @@ -46146,7 +44958,6 @@ (f64.const -8.06684839057968) (f64.const 4.535662560676869) (f64.const 1.0044767307740567) - (f64.const 0) (i32.const 0) ) ) @@ -46166,7 +44977,6 @@ (f64.const 4.345239849338305) (f64.const -8.88799136300345) (f64.const 4.345239849338305) - (f64.const 0) (i32.const 0) ) ) @@ -46186,7 +44996,6 @@ (f64.const -8.38143342755525) (f64.const -2.763607337379588) (f64.const -0.09061141541648476) - (f64.const 0) (i32.const 0) ) ) @@ -46206,7 +45015,6 @@ (f64.const -6.531673581913484) (f64.const 4.567535276842744) (f64.const -1.9641383050707404) - (f64.const 0) (i32.const 0) ) ) @@ -46226,7 +45034,6 @@ (f64.const 9.267056966972586) (f64.const 4.811392084359796) (f64.const -0.35572720174700656) - (f64.const 0) (i32.const 0) ) ) @@ -46246,7 +45053,6 @@ (f64.const -6.450045556060236) (f64.const 0.6620717923376739) (f64.const 0.17067236731650248) - (f64.const 0) (i32.const 0) ) ) @@ -46266,7 +45072,6 @@ (f64.const 7.858890253041697) (f64.const 0.05215452675006225) (f64.const -0.016443286217702822) - (f64.const 0) (i32.const 0) ) ) @@ -46286,7 +45091,6 @@ (f64.const -0.792054511984896) (f64.const 7.67640268511754) (f64.const -0.792054511984896) - (f64.const 0) (i32.const 0) ) ) @@ -46306,7 +45110,6 @@ (f64.const 0.615702673197924) (f64.const 2.0119025790324803) (f64.const 0.615702673197924) - (f64.const 0) (i32.const 0) ) ) @@ -46326,7 +45129,6 @@ (f64.const -0.5587586823609152) (f64.const 0.03223983060263804) (f64.const -0.0106815621160685) - (f64.const 0) (i32.const 0) ) ) @@ -46346,7 +45148,6 @@ (f64.const 0) (f64.const 1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -46366,7 +45167,6 @@ (f64.const -0) (f64.const 1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -46386,7 +45186,6 @@ (f64.const 0.5) (f64.const 1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -46406,7 +45205,6 @@ (f64.const -0.5) (f64.const 1) (f64.const -0.5) - (f64.const 0) (i32.const 0) ) ) @@ -46426,7 +45224,6 @@ (f64.const 1) (f64.const 1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -46446,7 +45243,6 @@ (f64.const -1) (f64.const 1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -46466,7 +45262,6 @@ (f64.const 1.5) (f64.const 1) (f64.const -0.5) - (f64.const 0) (i32.const 0) ) ) @@ -46486,7 +45281,6 @@ (f64.const -1.5) (f64.const 1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -46506,7 +45300,6 @@ (f64.const 2) (f64.const 1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -46526,7 +45319,6 @@ (f64.const -2) (f64.const 1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -46546,7 +45338,6 @@ (f64.const inf) (f64.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -46566,7 +45357,6 @@ (f64.const -inf) (f64.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -46586,7 +45376,6 @@ (f64.const nan:0x8000000000000) (f64.const 1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -46606,7 +45395,6 @@ (f64.const 0) (f64.const -1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -46626,7 +45414,6 @@ (f64.const -0) (f64.const -1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -46646,7 +45433,6 @@ (f64.const 0.5) (f64.const -1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -46666,7 +45452,6 @@ (f64.const -0.5) (f64.const -1) (f64.const -0.5) - (f64.const 0) (i32.const 0) ) ) @@ -46686,7 +45471,6 @@ (f64.const 1) (f64.const -1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -46706,7 +45490,6 @@ (f64.const -1) (f64.const -1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -46726,7 +45509,6 @@ (f64.const 1.5) (f64.const -1) (f64.const -0.5) - (f64.const 0) (i32.const 0) ) ) @@ -46746,7 +45528,6 @@ (f64.const -1.5) (f64.const -1) (f64.const 0.5) - (f64.const 0) (i32.const 0) ) ) @@ -46766,7 +45547,6 @@ (f64.const 2) (f64.const -1) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -46786,7 +45566,6 @@ (f64.const -2) (f64.const -1) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -46806,7 +45585,6 @@ (f64.const inf) (f64.const -1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -46826,7 +45604,6 @@ (f64.const -inf) (f64.const -1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -46846,7 +45623,6 @@ (f64.const nan:0x8000000000000) (f64.const -1) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -46866,7 +45642,6 @@ (f64.const 0) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -46886,7 +45661,6 @@ (f64.const 0) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -46906,7 +45680,6 @@ (f64.const 0) (f64.const inf) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -46926,7 +45699,6 @@ (f64.const 0) (f64.const -inf) (f64.const 0) - (f64.const 0) (i32.const 0) ) ) @@ -46946,7 +45718,6 @@ (f64.const 0) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -46966,7 +45737,6 @@ (f64.const -0) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -46986,7 +45756,6 @@ (f64.const -0) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47006,7 +45775,6 @@ (f64.const -0) (f64.const inf) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -47026,7 +45794,6 @@ (f64.const -0) (f64.const -inf) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -47046,7 +45813,6 @@ (f64.const -0) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -47066,7 +45832,6 @@ (f64.const 1) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47086,7 +45851,6 @@ (f64.const -1) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47106,7 +45870,6 @@ (f64.const inf) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47126,7 +45889,6 @@ (f64.const -inf) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47146,7 +45908,6 @@ (f64.const nan:0x8000000000000) (f64.const 0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -47166,7 +45927,6 @@ (f64.const -1) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47186,7 +45946,6 @@ (f64.const inf) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47206,7 +45965,6 @@ (f64.const -inf) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47226,7 +45984,6 @@ (f64.const nan:0x8000000000000) (f64.const -0) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -47246,7 +46003,6 @@ (f64.const inf) (f64.const 2) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47266,7 +46022,6 @@ (f64.const inf) (f64.const -0.5) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47286,7 +46041,6 @@ (f64.const inf) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -47306,7 +46060,6 @@ (f64.const -inf) (f64.const 2) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47326,7 +46079,6 @@ (f64.const -inf) (f64.const -0.5) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47346,7 +46098,6 @@ (f64.const -inf) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -47366,7 +46117,6 @@ (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -47386,7 +46136,6 @@ (f64.const 1) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -47406,7 +46155,6 @@ (f64.const -1) (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -47426,7 +46174,6 @@ (f64.const 1) (f64.const inf) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -47446,7 +46193,6 @@ (f64.const -1) (f64.const inf) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -47466,7 +46212,6 @@ (f64.const inf) (f64.const inf) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47486,7 +46231,6 @@ (f64.const -inf) (f64.const inf) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47506,7 +46250,6 @@ (f64.const 1) (f64.const -inf) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -47526,7 +46269,6 @@ (f64.const -1) (f64.const -inf) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -47546,7 +46288,6 @@ (f64.const inf) (f64.const -inf) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47566,7 +46307,6 @@ (f64.const -inf) (f64.const -inf) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 2) ) ) @@ -47586,7 +46326,6 @@ (f64.const 1.75) (f64.const 0.5) (f64.const -0.25) - (f64.const 0) (i32.const 0) ) ) @@ -47606,7 +46345,6 @@ (f64.const -1.75) (f64.const 0.5) (f64.const 0.25) - (f64.const 0) (i32.const 0) ) ) @@ -47626,7 +46364,6 @@ (f64.const 1.75) (f64.const -0.5) (f64.const -0.25) - (f64.const 0) (i32.const 0) ) ) @@ -47646,7 +46383,6 @@ (f64.const -1.75) (f64.const -0.5) (f64.const 0.25) - (f64.const 0) (i32.const 0) ) ) @@ -47666,7 +46402,6 @@ (f64.const 8e-323) (f64.const inf) (f64.const 8e-323) - (f64.const 0) (i32.const 0) ) ) @@ -47686,7 +46421,6 @@ (f32.const -8.066848754882812) (f32.const 4.535662651062012) (f32.const 1.004476547241211) - (f32.const 0) (i32.const 0) ) ) @@ -47706,7 +46440,6 @@ (f32.const 4.345239639282227) (f32.const -8.887990951538086) (f32.const 4.345239639282227) - (f32.const 0) (i32.const 0) ) ) @@ -47726,7 +46459,6 @@ (f32.const -8.381433486938477) (f32.const -2.7636072635650635) (f32.const -0.09061169624328613) - (f32.const 0) (i32.const 0) ) ) @@ -47746,7 +46478,6 @@ (f32.const -6.531673431396484) (f32.const 4.567535400390625) (f32.const -1.9641380310058594) - (f32.const 0) (i32.const 0) ) ) @@ -47766,7 +46497,6 @@ (f32.const 9.267057418823242) (f32.const 4.811392307281494) (f32.const -0.3557271957397461) - (f32.const 0) (i32.const 0) ) ) @@ -47786,7 +46516,6 @@ (f32.const -6.450045585632324) (f32.const 0.6620717644691467) (f32.const 0.17067205905914307) - (f32.const 0) (i32.const 0) ) ) @@ -47806,7 +46535,6 @@ (f32.const 7.858890056610107) (f32.const 0.052154526114463806) (f32.const -0.016443386673927307) - (f32.const 0) (i32.const 0) ) ) @@ -47826,7 +46554,6 @@ (f32.const -0.7920545339584351) (f32.const 7.676402568817139) (f32.const -0.7920545339584351) - (f32.const 0) (i32.const 0) ) ) @@ -47846,7 +46573,6 @@ (f32.const 0.6157026886940002) (f32.const 2.0119025707244873) (f32.const 0.6157026886940002) - (f32.const 0) (i32.const 0) ) ) @@ -47866,7 +46592,6 @@ (f32.const -0.5587586760520935) (f32.const 0.03223983198404312) (f32.const -0.010681532323360443) - (f32.const 0) (i32.const 0) ) ) @@ -47886,7 +46611,6 @@ (f32.const 0) (f32.const 1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -47906,7 +46630,6 @@ (f32.const -0) (f32.const 1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -47926,7 +46649,6 @@ (f32.const 0.5) (f32.const 1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -47946,7 +46668,6 @@ (f32.const -0.5) (f32.const 1) (f32.const -0.5) - (f32.const 0) (i32.const 0) ) ) @@ -47966,7 +46687,6 @@ (f32.const 1) (f32.const 1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -47986,7 +46706,6 @@ (f32.const -1) (f32.const 1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -48006,7 +46725,6 @@ (f32.const 1.5) (f32.const 1) (f32.const -0.5) - (f32.const 0) (i32.const 0) ) ) @@ -48026,7 +46744,6 @@ (f32.const -1.5) (f32.const 1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -48046,7 +46763,6 @@ (f32.const 2) (f32.const 1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -48066,7 +46782,6 @@ (f32.const -2) (f32.const 1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -48086,7 +46801,6 @@ (f32.const inf) (f32.const 1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48106,7 +46820,6 @@ (f32.const -inf) (f32.const 1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48126,7 +46839,6 @@ (f32.const nan:0x400000) (f32.const 1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48146,7 +46858,6 @@ (f32.const 0) (f32.const -1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -48166,7 +46877,6 @@ (f32.const -0) (f32.const -1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -48186,7 +46896,6 @@ (f32.const 0.5) (f32.const -1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -48206,7 +46915,6 @@ (f32.const -0.5) (f32.const -1) (f32.const -0.5) - (f32.const 0) (i32.const 0) ) ) @@ -48226,7 +46934,6 @@ (f32.const 1) (f32.const -1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -48246,7 +46953,6 @@ (f32.const -1) (f32.const -1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -48266,7 +46972,6 @@ (f32.const 1.5) (f32.const -1) (f32.const -0.5) - (f32.const 0) (i32.const 0) ) ) @@ -48286,7 +46991,6 @@ (f32.const -1.5) (f32.const -1) (f32.const 0.5) - (f32.const 0) (i32.const 0) ) ) @@ -48306,7 +47010,6 @@ (f32.const 2) (f32.const -1) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -48326,7 +47029,6 @@ (f32.const -2) (f32.const -1) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -48346,7 +47048,6 @@ (f32.const inf) (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48366,7 +47067,6 @@ (f32.const -inf) (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48386,7 +47086,6 @@ (f32.const nan:0x400000) (f32.const -1) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48406,7 +47105,6 @@ (f32.const 0) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48426,7 +47124,6 @@ (f32.const 0) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48446,7 +47143,6 @@ (f32.const 0) (f32.const inf) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -48466,7 +47162,6 @@ (f32.const 0) (f32.const -inf) (f32.const 0) - (f32.const 0) (i32.const 0) ) ) @@ -48486,7 +47181,6 @@ (f32.const 0) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48506,7 +47200,6 @@ (f32.const -0) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48526,7 +47219,6 @@ (f32.const -0) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48546,7 +47238,6 @@ (f32.const -0) (f32.const inf) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -48566,7 +47257,6 @@ (f32.const -0) (f32.const -inf) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -48586,7 +47276,6 @@ (f32.const -0) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48606,7 +47295,6 @@ (f32.const 1) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48626,7 +47314,6 @@ (f32.const -1) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48646,7 +47333,6 @@ (f32.const inf) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48666,7 +47352,6 @@ (f32.const -inf) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48686,7 +47371,6 @@ (f32.const nan:0x400000) (f32.const 0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48706,7 +47390,6 @@ (f32.const -1) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48726,7 +47409,6 @@ (f32.const inf) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48746,7 +47428,6 @@ (f32.const -inf) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48766,7 +47447,6 @@ (f32.const nan:0x400000) (f32.const -0) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48786,7 +47466,6 @@ (f32.const inf) (f32.const 2) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48806,7 +47485,6 @@ (f32.const inf) (f32.const -0.5) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48826,7 +47504,6 @@ (f32.const inf) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48846,7 +47523,6 @@ (f32.const -inf) (f32.const 2) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48866,7 +47542,6 @@ (f32.const -inf) (f32.const -0.5) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -48886,7 +47561,6 @@ (f32.const -inf) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48906,7 +47580,6 @@ (f32.const nan:0x400000) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48926,7 +47599,6 @@ (f32.const 1) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48946,7 +47618,6 @@ (f32.const -1) (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -48966,7 +47637,6 @@ (f32.const 1) (f32.const inf) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -48986,7 +47656,6 @@ (f32.const -1) (f32.const inf) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -49006,7 +47675,6 @@ (f32.const inf) (f32.const inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -49026,7 +47694,6 @@ (f32.const -inf) (f32.const inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -49046,7 +47713,6 @@ (f32.const 1) (f32.const -inf) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -49066,7 +47732,6 @@ (f32.const -1) (f32.const -inf) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -49086,7 +47751,6 @@ (f32.const inf) (f32.const -inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -49106,7 +47770,6 @@ (f32.const -inf) (f32.const -inf) (f32.const nan:0x400000) - (f32.const 0) (i32.const 2) ) ) @@ -49126,7 +47789,6 @@ (f32.const 1.75) (f32.const 0.5) (f32.const -0.25) - (f32.const 0) (i32.const 0) ) ) @@ -49146,7 +47808,6 @@ (f32.const -1.75) (f32.const 0.5) (f32.const 0.25) - (f32.const 0) (i32.const 0) ) ) @@ -49166,7 +47827,6 @@ (f32.const 1.75) (f32.const -0.5) (f32.const -0.25) - (f32.const 0) (i32.const 0) ) ) @@ -49186,7 +47846,6 @@ (f32.const -1.75) (f32.const -0.5) (f32.const 0.25) - (f32.const 0) (i32.const 0) ) ) @@ -49206,7 +47865,6 @@ (f32.const 5.877471754111438e-39) (f32.const inf) (f32.const 5.877471754111438e-39) - (f32.const 0) (i32.const 0) ) ) @@ -52569,7 +51227,6 @@ (call $std/math/test_trunc (f64.const -8.06684839057968) (f64.const -8) - (f64.const 0) (i32.const 1) ) ) @@ -52588,7 +51245,6 @@ (call $std/math/test_trunc (f64.const 4.345239849338305) (f64.const 4) - (f64.const 0) (i32.const 1) ) ) @@ -52607,7 +51263,6 @@ (call $std/math/test_trunc (f64.const -8.38143342755525) (f64.const -8) - (f64.const 0) (i32.const 1) ) ) @@ -52626,7 +51281,6 @@ (call $std/math/test_trunc (f64.const -6.531673581913484) (f64.const -6) - (f64.const 0) (i32.const 1) ) ) @@ -52645,7 +51299,6 @@ (call $std/math/test_trunc (f64.const 9.267056966972586) (f64.const 9) - (f64.const 0) (i32.const 1) ) ) @@ -52664,7 +51317,6 @@ (call $std/math/test_trunc (f64.const 0.6619858980995045) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -52683,7 +51335,6 @@ (call $std/math/test_trunc (f64.const -0.4066039223853553) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -52702,7 +51353,6 @@ (call $std/math/test_trunc (f64.const 0.5617597462207241) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -52721,7 +51371,6 @@ (call $std/math/test_trunc (f64.const 0.7741522965913037) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -52740,7 +51389,6 @@ (call $std/math/test_trunc (f64.const -0.6787637026394024) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -52759,7 +51407,6 @@ (call $std/math/test_trunc (f64.const nan:0x8000000000000) (f64.const nan:0x8000000000000) - (f64.const 0) (i32.const 0) ) ) @@ -52778,7 +51425,6 @@ (call $std/math/test_trunc (f64.const inf) (f64.const inf) - (f64.const 0) (i32.const 0) ) ) @@ -52797,7 +51443,6 @@ (call $std/math/test_trunc (f64.const -inf) (f64.const -inf) - (f64.const 0) (i32.const 0) ) ) @@ -52814,7 +51459,6 @@ (if (i32.eqz (call $std/math/test_trunc - (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) @@ -52835,7 +51479,6 @@ (call $std/math/test_trunc (f64.const -0) (f64.const -0) - (f64.const 0) (i32.const 0) ) ) @@ -52854,7 +51497,6 @@ (call $std/math/test_trunc (f64.const 1) (f64.const 1) - (f64.const 0) (i32.const 0) ) ) @@ -52873,7 +51515,6 @@ (call $std/math/test_trunc (f64.const -1) (f64.const -1) - (f64.const 0) (i32.const 0) ) ) @@ -52892,7 +51533,6 @@ (call $std/math/test_trunc (f64.const 0.5) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -52911,7 +51551,6 @@ (call $std/math/test_trunc (f64.const -0.5) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -52930,7 +51569,6 @@ (call $std/math/test_trunc (f64.const 1.0000152587890625) (f64.const 1) - (f64.const 0) (i32.const 1) ) ) @@ -52949,7 +51587,6 @@ (call $std/math/test_trunc (f64.const -1.0000152587890625) (f64.const -1) - (f64.const 0) (i32.const 1) ) ) @@ -52968,7 +51605,6 @@ (call $std/math/test_trunc (f64.const 0.9999923706054688) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -52987,7 +51623,6 @@ (call $std/math/test_trunc (f64.const -0.9999923706054688) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -53006,7 +51641,6 @@ (call $std/math/test_trunc (f64.const 7.888609052210118e-31) (f64.const 0) - (f64.const 0) (i32.const 1) ) ) @@ -53025,7 +51659,6 @@ (call $std/math/test_trunc (f64.const -7.888609052210118e-31) (f64.const -0) - (f64.const 0) (i32.const 1) ) ) @@ -53044,7 +51677,6 @@ (call $std/math/test_truncf (f32.const -8.066848754882812) (f32.const -8) - (f32.const 0) (i32.const 1) ) ) @@ -53063,7 +51695,6 @@ (call $std/math/test_truncf (f32.const 4.345239639282227) (f32.const 4) - (f32.const 0) (i32.const 1) ) ) @@ -53082,7 +51713,6 @@ (call $std/math/test_truncf (f32.const -8.381433486938477) (f32.const -8) - (f32.const 0) (i32.const 1) ) ) @@ -53101,7 +51731,6 @@ (call $std/math/test_truncf (f32.const -6.531673431396484) (f32.const -6) - (f32.const 0) (i32.const 1) ) ) @@ -53120,7 +51749,6 @@ (call $std/math/test_truncf (f32.const 9.267057418823242) (f32.const 9) - (f32.const 0) (i32.const 1) ) ) @@ -53139,7 +51767,6 @@ (call $std/math/test_truncf (f32.const 0.6619858741760254) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -53158,7 +51785,6 @@ (call $std/math/test_truncf (f32.const -0.40660393238067627) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -53177,7 +51803,6 @@ (call $std/math/test_truncf (f32.const 0.5617597699165344) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -53196,7 +51821,6 @@ (call $std/math/test_truncf (f32.const 0.7741522789001465) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -53215,7 +51839,6 @@ (call $std/math/test_truncf (f32.const -0.6787636876106262) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -53234,7 +51857,6 @@ (call $std/math/test_truncf (f32.const nan:0x400000) (f32.const nan:0x400000) - (f32.const 0) (i32.const 0) ) ) @@ -53253,7 +51875,6 @@ (call $std/math/test_truncf (f32.const inf) (f32.const inf) - (f32.const 0) (i32.const 0) ) ) @@ -53272,7 +51893,6 @@ (call $std/math/test_truncf (f32.const -inf) (f32.const -inf) - (f32.const 0) (i32.const 0) ) ) @@ -53289,7 +51909,6 @@ (if (i32.eqz (call $std/math/test_truncf - (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) @@ -53310,7 +51929,6 @@ (call $std/math/test_truncf (f32.const -0) (f32.const -0) - (f32.const 0) (i32.const 0) ) ) @@ -53329,7 +51947,6 @@ (call $std/math/test_truncf (f32.const 1) (f32.const 1) - (f32.const 0) (i32.const 0) ) ) @@ -53348,7 +51965,6 @@ (call $std/math/test_truncf (f32.const -1) (f32.const -1) - (f32.const 0) (i32.const 0) ) ) @@ -53367,7 +51983,6 @@ (call $std/math/test_truncf (f32.const 0.5) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -53386,7 +52001,6 @@ (call $std/math/test_truncf (f32.const -0.5) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -53405,7 +52019,6 @@ (call $std/math/test_truncf (f32.const 1.0000152587890625) (f32.const 1) - (f32.const 0) (i32.const 1) ) ) @@ -53424,7 +52037,6 @@ (call $std/math/test_truncf (f32.const -1.0000152587890625) (f32.const -1) - (f32.const 0) (i32.const 1) ) ) @@ -53443,7 +52055,6 @@ (call $std/math/test_truncf (f32.const 0.9999923706054688) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -53462,7 +52073,6 @@ (call $std/math/test_truncf (f32.const -0.9999923706054688) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) @@ -53481,7 +52091,6 @@ (call $std/math/test_truncf (f32.const 7.888609052210118e-31) (f32.const 0) - (f32.const 0) (i32.const 1) ) ) @@ -53500,7 +52109,6 @@ (call $std/math/test_truncf (f32.const -7.888609052210118e-31) (f32.const -0) - (f32.const 0) (i32.const 1) ) ) diff --git a/tests/compiler/std/new.optimized.wat b/tests/compiler/std/new.optimized.wat index 7e286284..f89881b4 100644 --- a/tests/compiler/std/new.optimized.wat +++ b/tests/compiler/std/new.optimized.wat @@ -1,7 +1,7 @@ (module - (type $ifi (func (param i32 f32) (result i32))) (type $ii (func (param i32) (result i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (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)) @@ -93,36 +93,25 @@ ) (get_local $1) ) - (func $~lib/memory/memory.allocate (; 1 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 8) ) ) - (func $std/new/AClass#constructor (; 2 ;) (; has Stack IR ;) (type $ifi) (param $0 i32) (param $1 f32) (result i32) - (local $2 i32) - (if - (i32.eqz - (tee_local $2 - (get_local $0) - ) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 8) - ) - ) - (i32.const 1) - ) - (f32.store offset=4 - (get_local $0) - (f32.const 2) - ) + (func $std/new/AClass#constructor (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (i32.store + (tee_local $0 + (call $~lib/memory/memory.allocate) ) + (i32.const 1) + ) + (f32.store offset=4 + (get_local $0) + (f32.const 2) ) (i32.store - (get_local $2) + (i32.const 0) (i32.add (i32.load (get_local $0) @@ -132,7 +121,7 @@ ) (f32.store offset=4 (get_local $0) - (get_local $1) + (f32.const 3) ) (get_local $0) ) @@ -144,10 +133,7 @@ (get_global $~lib/allocator/arena/startOffset) ) (set_global $std/new/aClass - (call $std/new/AClass#constructor - (i32.const 0) - (f32.const 3) - ) + (call $std/new/AClass#constructor) ) ) ) diff --git a/tests/compiler/std/operator-overloading.optimized.wat b/tests/compiler/std/operator-overloading.optimized.wat index 4ae61358..01989f65 100644 --- a/tests/compiler/std/operator-overloading.optimized.wat +++ b/tests/compiler/std/operator-overloading.optimized.wat @@ -1,11 +1,13 @@ (module - (type $iiii (func (param i32 i32 i32) (result i32))) (type $ii (func (param i32) (result i32))) (type $iii (func (param i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $FFF (func (param f64 f64) (result f64))) (type $FiF (func (param f64 i32) (result f64))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -163,36 +165,27 @@ ) (get_local $1) ) - (func $~lib/memory/memory.allocate (; 2 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 8) ) ) - (func $std/operator-overloading/Tester#constructor (; 3 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 8) - ) - ) - (get_local $1) - ) - (i32.store offset=4 - (get_local $0) - (get_local $2) - ) + (func $std/operator-overloading/Tester#constructor (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (i32.store + (tee_local $2 + (call $~lib/memory/memory.allocate) ) + (get_local $0) ) - (get_local $0) + (i32.store offset=4 + (get_local $2) + (get_local $1) + ) + (get_local $2) ) (func $std/operator-overloading/Tester.add (; 4 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.add (i32.load (get_local $0) @@ -213,7 +206,6 @@ ) (func $std/operator-overloading/Tester.sub (; 5 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.sub (i32.load (get_local $0) @@ -234,7 +226,6 @@ ) (func $std/operator-overloading/Tester.mul (; 6 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.mul (i32.load (get_local $0) @@ -255,7 +246,6 @@ ) (func $std/operator-overloading/Tester.div (; 7 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.div_s (i32.load (get_local $0) @@ -276,7 +266,6 @@ ) (func $std/operator-overloading/Tester.mod (; 8 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.rem_s (i32.load (get_local $0) @@ -1838,7 +1827,6 @@ ) (func $std/operator-overloading/Tester.pow (; 11 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.trunc_s/f64 (call $~lib/math/NativeMath.pow (f64.convert_s/i32 @@ -1871,7 +1859,6 @@ ) (func $std/operator-overloading/Tester.and (; 12 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.and (i32.load (get_local $0) @@ -1892,7 +1879,6 @@ ) (func $std/operator-overloading/Tester.or (; 13 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.or (i32.load (get_local $0) @@ -1913,7 +1899,6 @@ ) (func $std/operator-overloading/Tester.xor (; 14 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.xor (i32.load (get_local $0) @@ -2088,60 +2073,56 @@ ) (get_local $2) ) - (func $std/operator-overloading/Tester.shr (; 21 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/operator-overloading/Tester.shr (; 21 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.shr_s (i32.load (get_local $0) ) - (get_local $1) + (i32.const 3) ) (i32.shr_s (i32.load offset=4 (get_local $0) ) - (get_local $1) + (i32.const 3) ) ) ) - (func $std/operator-overloading/Tester.shu (; 22 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/operator-overloading/Tester.shu (; 22 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.shr_u (i32.load (get_local $0) ) - (get_local $1) + (i32.const 3) ) (i32.shr_u (i32.load offset=4 (get_local $0) ) - (get_local $1) + (i32.const 3) ) ) ) - (func $std/operator-overloading/Tester.shl (; 23 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/operator-overloading/Tester.shl (; 23 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.shl (i32.load (get_local $0) ) - (get_local $1) + (i32.const 3) ) (i32.shl (i32.load offset=4 (get_local $0) ) - (get_local $1) + (i32.const 3) ) ) ) (func $std/operator-overloading/Tester.pos (; 24 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.load (get_local $0) ) @@ -2152,7 +2133,6 @@ ) (func $std/operator-overloading/Tester.neg (; 25 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.sub (i32.const 0) (i32.load @@ -2169,7 +2149,6 @@ ) (func $std/operator-overloading/Tester.not (; 26 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.xor (i32.load (get_local $0) @@ -2257,14 +2236,12 @@ ) (set_global $std/operator-overloading/a1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const 2) ) ) (set_global $std/operator-overloading/a2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 3) ) @@ -2309,14 +2286,12 @@ ) (set_global $std/operator-overloading/s1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 3) ) ) (set_global $std/operator-overloading/s2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const -3) ) @@ -2360,14 +2335,12 @@ ) (set_global $std/operator-overloading/m1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 5) ) ) (set_global $std/operator-overloading/m2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 3) (i32.const 2) ) @@ -2412,14 +2385,12 @@ ) (set_global $std/operator-overloading/d1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 6) (i32.const 50) ) ) (set_global $std/operator-overloading/d2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 3) (i32.const 10) ) @@ -2464,14 +2435,12 @@ ) (set_global $std/operator-overloading/f1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 10) (i32.const 10) ) ) (set_global $std/operator-overloading/f2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 6) (i32.const 10) ) @@ -2515,14 +2484,12 @@ ) (set_global $std/operator-overloading/p1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 3) ) ) (set_global $std/operator-overloading/p2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 4) (i32.const 5) ) @@ -2567,14 +2534,12 @@ ) (set_global $std/operator-overloading/n1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 255) (i32.const 15) ) ) (set_global $std/operator-overloading/n2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 15) (i32.const 255) ) @@ -2619,14 +2584,12 @@ ) (set_global $std/operator-overloading/o1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 3855) (i32.const 255) ) ) (set_global $std/operator-overloading/o2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 61680) (i32.const 0) ) @@ -2671,14 +2634,12 @@ ) (set_global $std/operator-overloading/x1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 255) (i32.const 255) ) ) (set_global $std/operator-overloading/x2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 65280) (i32.const 0) ) @@ -2723,14 +2684,12 @@ ) (set_global $std/operator-overloading/eq1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const -2) ) ) (set_global $std/operator-overloading/eq2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const -2) ) @@ -2758,14 +2717,12 @@ ) (set_global $std/operator-overloading/eq3 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const 0) ) ) (set_global $std/operator-overloading/eq4 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 0) (i32.const 1) ) @@ -2829,14 +2786,12 @@ ) (set_global $std/operator-overloading/gt1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 2147483647) ) ) (set_global $std/operator-overloading/gt2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const 0) ) @@ -2864,14 +2819,12 @@ ) (set_global $std/operator-overloading/gte1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 2) ) ) (set_global $std/operator-overloading/gte2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 2) ) @@ -2899,14 +2852,12 @@ ) (set_global $std/operator-overloading/le1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 5) (i32.const -1) ) ) (set_global $std/operator-overloading/le2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 6) (i32.const 6) ) @@ -2934,14 +2885,12 @@ ) (set_global $std/operator-overloading/leq1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 4) (i32.const 3) ) ) (set_global $std/operator-overloading/leq2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 4) (i32.const 3) ) @@ -2969,7 +2918,6 @@ ) (set_global $std/operator-overloading/shr (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 8) (i32.const 16) ) @@ -2977,7 +2925,6 @@ (set_global $std/operator-overloading/sres (call $std/operator-overloading/Tester.shr (get_global $std/operator-overloading/shr) - (i32.const 3) ) ) (if @@ -3014,7 +2961,6 @@ ) (set_global $std/operator-overloading/shu (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const -8) (i32.const -16) ) @@ -3022,7 +2968,6 @@ (set_global $std/operator-overloading/ures (call $std/operator-overloading/Tester.shu (get_global $std/operator-overloading/shu) - (i32.const 3) ) ) (if @@ -3059,7 +3004,6 @@ ) (set_global $std/operator-overloading/shl (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const 2) ) @@ -3067,7 +3011,6 @@ (set_global $std/operator-overloading/sres (call $std/operator-overloading/Tester.shl (get_global $std/operator-overloading/shl) - (i32.const 3) ) ) (if @@ -3104,7 +3047,6 @@ ) (set_global $std/operator-overloading/pos (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const -2) ) @@ -3152,7 +3094,6 @@ ) (set_global $std/operator-overloading/neg (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const -1) (i32.const -2) ) @@ -3206,7 +3147,6 @@ ) (set_global $std/operator-overloading/not (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 255) (i32.const 16) ) @@ -3262,7 +3202,6 @@ (call $std/operator-overloading/Tester#constructor (i32.const 0) (i32.const 0) - (i32.const 0) ) ) (set_global $std/operator-overloading/bres @@ -3321,7 +3260,6 @@ ) (set_global $std/operator-overloading/incdec (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 0) (i32.const 1) ) @@ -3401,21 +3339,18 @@ ) (set_global $std/operator-overloading/ais1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const 2) ) ) (set_global $std/operator-overloading/ais2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 3) ) ) (set_global $std/operator-overloading/ais (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.add (i32.load (tee_local $0 @@ -3472,21 +3407,18 @@ ) (set_global $std/operator-overloading/aii1 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 1) (i32.const 2) ) ) (set_global $std/operator-overloading/aii2 (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.const 2) (i32.const 3) ) ) (set_global $std/operator-overloading/aii (call $std/operator-overloading/Tester#constructor - (i32.const 0) (i32.add (i32.load (tee_local $1 diff --git a/tests/compiler/std/pointer.optimized.wat b/tests/compiler/std/pointer.optimized.wat index 303664fe..f56b1d5b 100644 --- a/tests/compiler/std/pointer.optimized.wat +++ b/tests/compiler/std/pointer.optimized.wat @@ -3,6 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (type $iv (func (param i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $std/pointer/one (mut i32) (i32.const 0)) (global $std/pointer/two (mut i32) (i32.const 0)) @@ -16,19 +17,17 @@ (export "_setargc" (func $~setargc)) (export "Pointer#constructor" (func $std/pointer/Pointer#constructor|trampoline)) (start $start) - (func $std/pointer/Pointer#constructor (; 1 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (get_local $1) + (func $std/pointer/Pointer#constructor (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (get_local $0) ) (func $start (; 2 ;) (; has Stack IR ;) (type $v) (set_global $std/pointer/one (call $std/pointer/Pointer#constructor - (i32.const 0) (i32.const 8) ) ) (set_global $std/pointer/two (call $std/pointer/Pointer#constructor - (i32.const 0) (i32.const 24) ) ) @@ -292,7 +291,6 @@ ) ) (call $std/pointer/Pointer#constructor - (get_local $0) (get_local $1) ) ) diff --git a/tests/compiler/std/polyfills.optimized.wat b/tests/compiler/std/polyfills.optimized.wat index 52acc61a..38372eb9 100644 --- a/tests/compiler/std/polyfills.optimized.wat +++ b/tests/compiler/std/polyfills.optimized.wat @@ -1,8 +1,9 @@ (module (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (type $II (func (param i64) (result i64))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$j (func (result i64))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\11\00\00\00~\00l\00i\00b\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s") @@ -66,42 +67,9 @@ ) (get_local $0) ) - (func $~lib/polyfills/bswap (; 2 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (local $1 i32) - (if - (i32.eqz - (tee_local $1 - (i32.const 1) - ) - ) - (set_local $1 - (i32.const 0) - ) - ) - (if - (i32.eqz - (get_local $1) - ) - (set_local $1 - (i32.const 0) - ) - ) - (if - (i32.eqz - (get_local $1) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 8) - (i32.const 2) - (i32.const 2) - ) - (unreachable) - ) - ) + (func $~lib/polyfills/bswap (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/polyfills/bswap16 - (get_local $0) + (i32.const 43707) ) ) (func $~lib/polyfills/bswap16 (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) @@ -164,180 +132,25 @@ ) (get_local $0) ) - (func $~lib/polyfills/bswap (; 4 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (local $1 i32) - (if - (i32.eqz - (tee_local $1 - (i32.const 1) - ) - ) - (set_local $1 - (i32.const 0) - ) - ) - (if - (i32.eqz - (get_local $1) - ) - (set_local $1 - (i32.const 0) - ) - ) - (if - (i32.eqz - (get_local $1) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 8) - (i32.const 2) - (i32.const 2) - ) - (unreachable) - ) - ) + (func $~lib/polyfills/bswap (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/polyfills/bswap16 - (get_local $0) + (i32.const 43707) ) ) - (func $~lib/polyfills/bswap (; 5 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (local $1 i32) - (if - (i32.eqz - (tee_local $1 - (i32.const 1) - ) - ) - (set_local $1 - (i32.const 0) - ) - ) - (if - (i32.eqz - (get_local $1) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 8) - (i32.const 2) - (i32.const 2) - ) - (unreachable) - ) - ) - (i32.or - (i32.rotl - (i32.and - (get_local $0) - (i32.const -16711936) - ) - (i32.const 8) - ) - (i32.rotr - (i32.and - (get_local $0) - (i32.const 16711935) - ) - (i32.const 8) - ) - ) + (func $~lib/polyfills/bswap (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const -573785174) ) - (func $~lib/polyfills/bswap (; 6 ;) (; has Stack IR ;) (type $II) (param $0 i64) (result i64) - (i64.rotr - (i64.or - (i64.and - (i64.shr_u - (tee_local $0 - (i64.or - (i64.and - (i64.shr_u - (get_local $0) - (i64.const 8) - ) - (i64.const 71777214294589695) - ) - (i64.shl - (i64.and - (get_local $0) - (i64.const 71777214294589695) - ) - (i64.const 8) - ) - ) - ) - (i64.const 16) - ) - (i64.const 281470681808895) - ) - (i64.shl - (i64.and - (get_local $0) - (i64.const 281470681808895) - ) - (i64.const 16) - ) - ) - (i64.const 32) - ) + (func $~lib/polyfills/bswap (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$j) (result i64) + (i64.const -2464388556401798912) ) - (func $~lib/polyfills/bswap16 (; 7 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (i32.or - (i32.or - (i32.and - (i32.shl - (get_local $0) - (i32.const 8) - ) - (i32.const 65280) - ) - (i32.and - (i32.shr_u - (get_local $0) - (i32.const 8) - ) - (i32.const 255) - ) - ) - (i32.and - (get_local $0) - (i32.const -65536) - ) - ) + (func $~lib/polyfills/bswap16 (; 7 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (i32.const -7816278) ) - (func $~lib/polyfills/bswap16 (; 8 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (i32.or - (i32.or - (i32.and - (i32.shl - (get_local $0) - (i32.const 8) - ) - (i32.const 65280) - ) - (i32.and - (i32.shr_s - (get_local $0) - (i32.const 8) - ) - (i32.const 255) - ) - ) - (i32.and - (get_local $0) - (i32.const -65536) - ) - ) - ) - (func $start (; 9 ;) (; has Stack IR ;) (type $v) + (func $start (; 8 ;) (; has Stack IR ;) (type $v) (if (i32.ne (i32.and - (call $~lib/polyfills/bswap - (i32.const 43707) - ) + (call $~lib/polyfills/bswap) (i32.const 65535) ) (i32.const 48042) @@ -355,9 +168,7 @@ (if (i32.ne (i32.and - (call $~lib/polyfills/bswap - (i32.const 43707) - ) + (call $~lib/polyfills/bswap) (i32.const 65535) ) (i32.const 48042) @@ -374,9 +185,7 @@ ) (if (i32.ne - (call $~lib/polyfills/bswap - (i32.const -1430532899) - ) + (call $~lib/polyfills/bswap) (i32.const -573785174) ) (block @@ -391,9 +200,7 @@ ) (if (i32.ne - (call $~lib/polyfills/bswap - (i32.const -1430532899) - ) + (call $~lib/polyfills/bswap) (i32.const -573785174) ) (block @@ -408,9 +215,7 @@ ) (if (i64.ne - (call $~lib/polyfills/bswap - (i64.const 4822679907192029) - ) + (call $~lib/polyfills/bswap) (i64.const -2464388556401798912) ) (block @@ -425,9 +230,7 @@ ) (if (i64.ne - (call $~lib/polyfills/bswap - (i64.const 4822679907192029) - ) + (call $~lib/polyfills/bswap) (i64.const -2464388556401798912) ) (block @@ -442,9 +245,7 @@ ) (if (i32.ne - (call $~lib/polyfills/bswap - (i32.const -1430532899) - ) + (call $~lib/polyfills/bswap) (i32.const -573785174) ) (block @@ -459,9 +260,7 @@ ) (if (i32.ne - (call $~lib/polyfills/bswap - (i32.const -1430532899) - ) + (call $~lib/polyfills/bswap) (i32.const -573785174) ) (block @@ -516,9 +315,7 @@ ) (if (i32.ne - (call $~lib/polyfills/bswap16 - (i32.const -7820613) - ) + (call $~lib/polyfills/bswap16) (i32.const -7816278) ) (block @@ -533,9 +330,7 @@ ) (if (i32.ne - (call $~lib/polyfills/bswap16 - (i32.const -7820613) - ) + (call $~lib/polyfills/bswap16) (i32.const -7816278) ) (block diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index abf3bbd4..243c490f 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -4,7 +4,6 @@ (type $iv (func (param i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (type $iiiv (func (param i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) (type $iiv (func (param i32 i32))) (type $iIi (func (param i32 i64) (result i32))) @@ -19,6 +18,9 @@ (type $Fi (func (param f64) (result i32))) (type $iFii (func (param i32 f64 i32) (result i32))) (type $iFv (func (param i32 f64))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -113,9 +115,9 @@ ) (get_local $1) ) - (func $~lib/memory/memory.allocate (; 2 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 2 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 24) ) ) (func $~lib/internal/arraybuffer/computeSize (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) @@ -161,32 +163,31 @@ ) (get_local $1) ) - (func $~lib/internal/memory/memset (; 5 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -196,37 +197,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -236,74 +237,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -313,37 +303,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -353,66 +343,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -423,60 +413,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -491,11 +468,11 @@ ) ) ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (; 6 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/arraybuffer/ArrayBuffer#constructor (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (if (i32.gt_u - (get_local $1) + (get_local $0) (i32.const 1073741816) ) (block @@ -508,34 +485,32 @@ (unreachable) ) ) - (set_local $3 + (set_local $2 (call $~lib/internal/arraybuffer/allocateUnsafe - (get_local $1) + (get_local $0) ) ) (if (i32.eqz (i32.and - (get_local $2) + (get_local $1) (i32.const 1) ) ) (call $~lib/internal/memory/memset (i32.add - (get_local $3) + (get_local $2) (i32.const 8) ) - (i32.const 0) - (get_local $1) + (get_local $0) ) ) - (get_local $3) + (get_local $2) ) (func $~lib/set/Set#clear (; 7 ;) (; has Stack IR ;) (type $iv) (param $0 i32) (i32.store (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 16) (i32.const 0) ) @@ -547,7 +522,6 @@ (i32.store offset=8 (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 32) (i32.const 1) ) @@ -565,41 +539,33 @@ (i32.const 0) ) ) - (func $~lib/set/Set#constructor (; 8 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 24) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=12 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=16 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=20 - (get_local $0) - (i32.const 0) - ) + (func $~lib/set/Set#constructor (; 8 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (i32.store + (tee_local $0 + (call $~lib/memory/memory.allocate) ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $0) + (i32.const 0) ) (call $~lib/set/Set#clear (get_local $0) @@ -714,7 +680,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -729,7 +694,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -1100,9 +1064,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -1470,7 +1432,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -1485,7 +1446,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -1848,9 +1808,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -2308,7 +2266,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -2323,7 +2280,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -2689,9 +2645,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -3059,7 +3013,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -3074,7 +3027,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -3437,9 +3389,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -3912,7 +3862,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -3927,7 +3876,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -4287,9 +4235,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -4631,9 +4577,7 @@ (local $0 i32) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -4975,7 +4919,6 @@ (i32.store (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 16) (i32.const 0) ) @@ -4987,7 +4930,6 @@ (i32.store offset=8 (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 64) (i32.const 1) ) @@ -5005,41 +4947,33 @@ (i32.const 0) ) ) - (func $~lib/set/Set#constructor (; 48 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 24) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=12 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=16 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=20 - (get_local $0) - (i32.const 0) - ) + (func $~lib/set/Set#constructor (; 48 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (i32.store + (tee_local $0 + (call $~lib/memory/memory.allocate) ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $0) + (i32.const 0) ) (call $~lib/set/Set#clear (get_local $0) @@ -5235,7 +5169,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -5250,7 +5183,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -5611,9 +5543,7 @@ (local $0 i64) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -5955,9 +5885,7 @@ (local $0 i64) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -6387,7 +6315,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -6402,7 +6329,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -6767,9 +6693,7 @@ (local $0 f32) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 @@ -7207,7 +7131,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -7222,7 +7145,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $7 (i32.trunc_s/f64 @@ -7587,9 +7509,7 @@ (local $0 f64) (local $1 i32) (set_local $1 - (call $~lib/set/Set#constructor - (i32.const 0) - ) + (call $~lib/set/Set#constructor) ) (block $break|0 (loop $repeat|0 diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index da201cfa..0ba6a6e3 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -3,13 +3,13 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $ii (func (param i32) (result i32))) - (type $iiI (func (param i32 i32) (result i64))) - (type $iiIv (func (param i32 i32 i64))) - (type $iif (func (param i32 i32) (result f32))) - (type $iifv (func (param i32 i32 f32))) - (type $iiF (func (param i32 i32) (result f64))) - (type $iiFv (func (param i32 i32 f64))) (type $v (func)) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$ji (func (param i32) (result i64))) + (type $FUNCSIG$fi (func (param i32) (result f32))) + (type $FUNCSIG$di (func (param i32) (result f64))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -29,16 +29,17 @@ (data (i32.const 216) "\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/array/Array#__get (; 1 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - (tee_local $0 + (func $~lib/array/Array#__get (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (tee_local $1 (if (result i32) (i32.lt_u - (get_local $1) + (get_local $0) (i32.shr_u (i32.load - (tee_local $0 + (tee_local $1 (i32.load - (get_local $0) + (i32.const 24) ) ) ) @@ -47,9 +48,9 @@ ) (i32.load offset=8 (i32.add - (get_local $0) + (get_local $1) (i32.shl - (get_local $1) + (get_local $0) (i32.const 2) ) ) @@ -72,32 +73,31 @@ ) ) ) - (func $~lib/internal/memory/memset (; 3 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -107,37 +107,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -147,74 +147,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -224,37 +213,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -264,66 +253,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -334,60 +323,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -2245,7 +2221,6 @@ ) (get_local $2) ) - (i32.const 0) (i32.sub (get_local $1) (get_local $2) @@ -2276,7 +2251,6 @@ ) (get_local $2) ) - (i32.const 0) (i32.sub (get_local $1) (get_local $2) @@ -2318,17 +2292,16 @@ ) (get_local $0) ) - (func $~lib/array/Array#__set (; 9 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) + (func $~lib/array/Array#__set (; 9 ;) (; has Stack IR ;) (type $FUNCSIG$v) + (local $0 i32) (if (i32.ge_u - (get_local $1) + (i32.const 0) (i32.shr_u (i32.load - (tee_local $3 + (tee_local $0 (i32.load - (get_local $0) + (i32.const 24) ) ) ) @@ -2336,64 +2309,36 @@ ) ) (block - (if - (i32.ge_u - (get_local $1) - (i32.const 268435454) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 184) - (i32.const 87) - (i32.const 41) + (i32.store + (i32.const 24) + (tee_local $0 + (call $~lib/internal/arraybuffer/reallocateUnsafe + (get_local $0) + (i32.const 4) ) - (unreachable) ) ) (i32.store - (get_local $0) - (tee_local $3 - (call $~lib/internal/arraybuffer/reallocateUnsafe - (get_local $3) - (i32.shl - (tee_local $4 - (i32.add - (get_local $1) - (i32.const 1) - ) - ) - (i32.const 2) - ) - ) - ) - ) - (i32.store offset=4 - (get_local $0) - (get_local $4) + (i32.const 28) + (i32.const 1) ) ) ) (i32.store offset=8 - (i32.add - (get_local $3) - (i32.shl - (get_local $1) - (i32.const 2) - ) - ) - (get_local $2) + (get_local $0) + (i32.const 2) ) ) - (func $~lib/array/Array#__get (; 10 ;) (; has Stack IR ;) (type $iiI) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__get (; 10 ;) (; has Stack IR ;) (type $FUNCSIG$ji) (param $0 i32) (result i64) + (local $1 i32) (if (result i64) (i32.lt_u - (get_local $1) + (get_local $0) (i32.shr_u (i32.load - (tee_local $0 + (tee_local $1 (i32.load - (get_local $0) + (i32.const 64) ) ) ) @@ -2402,9 +2347,9 @@ ) (i64.load offset=8 (i32.add - (get_local $0) + (get_local $1) (i32.shl - (get_local $1) + (get_local $0) (i32.const 3) ) ) @@ -2412,17 +2357,16 @@ (unreachable) ) ) - (func $~lib/array/Array#__set (; 11 ;) (; has Stack IR ;) (type $iiIv) (param $0 i32) (param $1 i32) (param $2 i64) - (local $3 i32) - (local $4 i32) + (func $~lib/array/Array#__set (; 11 ;) (; has Stack IR ;) (type $FUNCSIG$v) + (local $0 i32) (if (i32.ge_u - (get_local $1) + (i32.const 0) (i32.shr_u (i32.load - (tee_local $3 + (tee_local $0 (i32.load - (get_local $0) + (i32.const 64) ) ) ) @@ -2430,64 +2374,36 @@ ) ) (block - (if - (i32.ge_u - (get_local $1) - (i32.const 134217727) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 184) - (i32.const 87) - (i32.const 41) + (i32.store + (i32.const 64) + (tee_local $0 + (call $~lib/internal/arraybuffer/reallocateUnsafe + (get_local $0) + (i32.const 8) ) - (unreachable) ) ) (i32.store - (get_local $0) - (tee_local $3 - (call $~lib/internal/arraybuffer/reallocateUnsafe - (get_local $3) - (i32.shl - (tee_local $4 - (i32.add - (get_local $1) - (i32.const 1) - ) - ) - (i32.const 3) - ) - ) - ) - ) - (i32.store offset=4 - (get_local $0) - (get_local $4) + (i32.const 68) + (i32.const 1) ) ) ) (i64.store offset=8 - (i32.add - (get_local $3) - (i32.shl - (get_local $1) - (i32.const 3) - ) - ) - (get_local $2) + (get_local $0) + (i64.const 4) ) ) - (func $~lib/array/Array#__get (; 12 ;) (; has Stack IR ;) (type $iif) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__get (; 12 ;) (; has Stack IR ;) (type $FUNCSIG$fi) (param $0 i32) (result f32) + (local $1 i32) (if (result f32) (i32.lt_u - (get_local $1) + (get_local $0) (i32.shr_u (i32.load - (tee_local $0 + (tee_local $1 (i32.load - (get_local $0) + (i32.const 88) ) ) ) @@ -2496,9 +2412,9 @@ ) (f32.load offset=8 (i32.add - (get_local $0) + (get_local $1) (i32.shl - (get_local $1) + (get_local $0) (i32.const 2) ) ) @@ -2506,17 +2422,16 @@ (unreachable) ) ) - (func $~lib/array/Array#__set (; 13 ;) (; has Stack IR ;) (type $iifv) (param $0 i32) (param $1 i32) (param $2 f32) - (local $3 i32) - (local $4 i32) + (func $~lib/array/Array#__set (; 13 ;) (; has Stack IR ;) (type $FUNCSIG$v) + (local $0 i32) (if (i32.ge_u - (get_local $1) + (i32.const 0) (i32.shr_u (i32.load - (tee_local $3 + (tee_local $0 (i32.load - (get_local $0) + (i32.const 88) ) ) ) @@ -2524,64 +2439,36 @@ ) ) (block - (if - (i32.ge_u - (get_local $1) - (i32.const 268435454) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 184) - (i32.const 87) - (i32.const 41) + (i32.store + (i32.const 88) + (tee_local $0 + (call $~lib/internal/arraybuffer/reallocateUnsafe + (get_local $0) + (i32.const 4) ) - (unreachable) ) ) (i32.store - (get_local $0) - (tee_local $3 - (call $~lib/internal/arraybuffer/reallocateUnsafe - (get_local $3) - (i32.shl - (tee_local $4 - (i32.add - (get_local $1) - (i32.const 1) - ) - ) - (i32.const 2) - ) - ) - ) - ) - (i32.store offset=4 - (get_local $0) - (get_local $4) + (i32.const 92) + (i32.const 1) ) ) ) (f32.store offset=8 - (i32.add - (get_local $3) - (i32.shl - (get_local $1) - (i32.const 2) - ) - ) - (get_local $2) + (get_local $0) + (f32.const 2.5) ) ) - (func $~lib/array/Array#__get (; 14 ;) (; has Stack IR ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__get (; 14 ;) (; has Stack IR ;) (type $FUNCSIG$di) (param $0 i32) (result f64) + (local $1 i32) (if (result f64) (i32.lt_u - (get_local $1) + (get_local $0) (i32.shr_u (i32.load - (tee_local $0 + (tee_local $1 (i32.load - (get_local $0) + (i32.const 128) ) ) ) @@ -2590,9 +2477,9 @@ ) (f64.load offset=8 (i32.add - (get_local $0) + (get_local $1) (i32.shl - (get_local $1) + (get_local $0) (i32.const 3) ) ) @@ -2600,17 +2487,16 @@ (unreachable) ) ) - (func $~lib/array/Array#__set (; 15 ;) (; has Stack IR ;) (type $iiFv) (param $0 i32) (param $1 i32) (param $2 f64) - (local $3 i32) - (local $4 i32) + (func $~lib/array/Array#__set (; 15 ;) (; has Stack IR ;) (type $FUNCSIG$v) + (local $0 i32) (if (i32.ge_u - (get_local $1) + (i32.const 0) (i32.shr_u (i32.load - (tee_local $3 + (tee_local $0 (i32.load - (get_local $0) + (i32.const 128) ) ) ) @@ -2618,53 +2504,24 @@ ) ) (block - (if - (i32.ge_u - (get_local $1) - (i32.const 134217727) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 184) - (i32.const 87) - (i32.const 41) + (i32.store + (i32.const 128) + (tee_local $0 + (call $~lib/internal/arraybuffer/reallocateUnsafe + (get_local $0) + (i32.const 8) ) - (unreachable) ) ) (i32.store - (get_local $0) - (tee_local $3 - (call $~lib/internal/arraybuffer/reallocateUnsafe - (get_local $3) - (i32.shl - (tee_local $4 - (i32.add - (get_local $1) - (i32.const 1) - ) - ) - (i32.const 3) - ) - ) - ) - ) - (i32.store offset=4 - (get_local $0) - (get_local $4) + (i32.const 132) + (i32.const 1) ) ) ) (f64.store offset=8 - (i32.add - (get_local $3) - (i32.shl - (get_local $1) - (i32.const 3) - ) - ) - (get_local $2) + (get_local $0) + (f64.const 2.25) ) ) (func $start (; 16 ;) (; has Stack IR ;) (type $v) @@ -2694,7 +2551,6 @@ (if (i32.ne (call $~lib/array/Array#__get - (i32.const 24) (i32.const 0) ) (i32.const 1) @@ -2712,7 +2568,6 @@ (if (i32.ne (call $~lib/array/Array#__get - (i32.const 24) (i32.const 1) ) (i32.const 2) @@ -2727,15 +2582,10 @@ (unreachable) ) ) - (call $~lib/array/Array#__set - (i32.const 24) - (i32.const 0) - (i32.const 2) - ) + (call $~lib/array/Array#__set) (if (i32.ne (call $~lib/array/Array#__get - (i32.const 24) (i32.const 0) ) (i32.const 2) @@ -2770,7 +2620,6 @@ (if (i64.ne (call $~lib/array/Array#__get - (i32.const 64) (i32.const 0) ) (i64.const 3) @@ -2788,7 +2637,6 @@ (if (i64.ne (call $~lib/array/Array#__get - (i32.const 64) (i32.const 1) ) (i64.const 4) @@ -2803,15 +2651,10 @@ (unreachable) ) ) - (call $~lib/array/Array#__set - (i32.const 64) - (i32.const 0) - (i64.const 4) - ) + (call $~lib/array/Array#__set) (if (i64.ne (call $~lib/array/Array#__get - (i32.const 64) (i32.const 0) ) (i64.const 4) @@ -2846,7 +2689,6 @@ (if (f32.ne (call $~lib/array/Array#__get - (i32.const 88) (i32.const 0) ) (f32.const 1.5) @@ -2864,7 +2706,6 @@ (if (f32.ne (call $~lib/array/Array#__get - (i32.const 88) (i32.const 1) ) (f32.const 2.5) @@ -2879,15 +2720,10 @@ (unreachable) ) ) - (call $~lib/array/Array#__set - (i32.const 88) - (i32.const 0) - (f32.const 2.5) - ) + (call $~lib/array/Array#__set) (if (f32.ne (call $~lib/array/Array#__get - (i32.const 88) (i32.const 0) ) (f32.const 2.5) @@ -2922,7 +2758,6 @@ (if (f64.ne (call $~lib/array/Array#__get - (i32.const 128) (i32.const 0) ) (f64.const 1.25) @@ -2940,7 +2775,6 @@ (if (f64.ne (call $~lib/array/Array#__get - (i32.const 128) (i32.const 1) ) (f64.const 2.25) @@ -2955,15 +2789,10 @@ (unreachable) ) ) - (call $~lib/array/Array#__set - (i32.const 128) - (i32.const 0) - (f64.const 2.25) - ) + (call $~lib/array/Array#__set) (if (f64.ne (call $~lib/array/Array#__get - (i32.const 128) (i32.const 0) ) (f64.const 2.25) diff --git a/tests/compiler/std/string-utf8.optimized.wat b/tests/compiler/std/string-utf8.optimized.wat index 6dcfeded..5284096f 100644 --- a/tests/compiler/std/string-utf8.optimized.wat +++ b/tests/compiler/std/string-utf8.optimized.wat @@ -1,8 +1,8 @@ (module (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (type $iv (func (param i32))) (type $v (func)) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -531,7 +531,7 @@ ) (get_local $5) ) - (func $~lib/allocator/arena/__memory_free (; 4 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~lib/allocator/arena/__memory_free (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) (func $start (; 5 ;) (; has Stack IR ;) (type $v) @@ -750,8 +750,6 @@ (unreachable) ) ) - (call $~lib/allocator/arena/__memory_free - (get_global $std/string-utf8/ptr) - ) + (call $~lib/allocator/arena/__memory_free) ) ) diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 7b0565c3..28fc491f 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -2,16 +2,19 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) (type $ii (func (param i32) (result i32))) - (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) - (type $iiiiiv (func (param i32 i32 i32 i32 i32))) (type $i (func (result i32))) (type $iiF (func (param i32 i32) (result f64))) (type $iF (func (param i32) (result f64))) (type $Ii (func (param i64) (result i32))) (type $iIiv (func (param i32 i64 i32))) (type $v (func)) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$di (func (param i32) (result f64))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -110,7 +113,7 @@ (export "memory" (memory $0)) (export "getString" (func $std/string/getString)) (start $start) - (func $~lib/string/String#charCodeAt (; 1 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#charCodeAt (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (if (i32.eqz (get_local $0) @@ -127,7 +130,7 @@ ) (if (i32.ge_u - (get_local $1) + (i32.const 0) (i32.load (get_local $0) ) @@ -137,13 +140,7 @@ ) ) (i32.load16_u offset=4 - (i32.add - (get_local $0) - (i32.shl - (get_local $1) - (i32.const 1) - ) - ) + (get_local $0) ) ) (func $~lib/allocator/arena/__memory_allocate (; 2 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) @@ -289,8 +286,8 @@ ) (get_local $1) ) - (func $~lib/internal/string/compareUnsafe (; 5 ;) (; has Stack IR ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) - (local $5 i32) + (func $~lib/internal/string/compareUnsafe (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) (set_local $1 (i32.add (get_local $0) @@ -300,22 +297,13 @@ ) ) ) - (set_local $2 - (i32.add - (get_local $2) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) - ) (loop $continue|0 (if (tee_local $0 (if (result i32) - (get_local $4) + (get_local $3) (i32.eqz - (tee_local $5 + (tee_local $4 (i32.sub (i32.load16_u offset=4 (get_local $1) @@ -326,13 +314,13 @@ ) ) ) - (get_local $4) + (get_local $3) ) ) (block - (set_local $4 + (set_local $3 (i32.sub - (get_local $4) + (get_local $3) (i32.const 1) ) ) @@ -352,7 +340,7 @@ ) ) ) - (get_local $5) + (get_local $4) ) (func $~lib/string/String.__eq (; 6 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -405,7 +393,6 @@ (get_local $0) (i32.const 0) (get_local $1) - (i32.const 0) (get_local $2) ) ) @@ -477,9 +464,10 @@ ) (get_local $1) ) - (func $~lib/string/String#startsWith (; 8 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#startsWith (; 8 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) (if (i32.eqz (get_local $0) @@ -494,47 +482,30 @@ (unreachable) ) ) - (if - (i32.eqz - (get_local $1) - ) - (set_local $1 - (i32.const 200) - ) - ) (if (i32.gt_s (i32.add - (tee_local $4 + (tee_local $2 (i32.load - (get_local $1) + (i32.const 192) ) ) (tee_local $3 (select - (tee_local $3 - (select - (get_local $2) - (i32.const 0) - (i32.gt_s - (get_local $2) - (i32.const 0) - ) - ) - ) - (tee_local $2 + (i32.const 0) + (tee_local $1 (i32.load (get_local $0) ) ) (i32.lt_s - (get_local $3) - (get_local $2) + (i32.const 0) + (get_local $1) ) ) ) ) - (get_local $2) + (get_local $1) ) (return (i32.const 0) @@ -544,9 +515,8 @@ (call $~lib/internal/string/compareUnsafe (get_local $0) (get_local $3) - (get_local $1) - (i32.const 0) - (get_local $4) + (i32.const 192) + (get_local $2) ) ) ) @@ -617,12 +587,12 @@ (get_local $0) (get_local $3) (get_local $1) - (i32.const 0) (get_local $2) ) ) ) - (func $~lib/string/String#endsWith|trampoline (; 10 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#endsWith|trampoline (; 10 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -635,14 +605,14 @@ ) (unreachable) ) - (set_local $2 + (set_local $1 (i32.const 536870910) ) ) (call $~lib/string/String#endsWith (get_local $0) + (i32.const 216) (get_local $1) - (get_local $2) ) ) (func $~lib/string/String#indexOf (; 11 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -732,7 +702,6 @@ (get_local $0) (get_local $2) (get_local $1) - (i32.const 0) (get_local $4) ) (block @@ -752,12 +721,12 @@ ) (i32.const -1) ) - (func $~lib/string/String#includes (; 12 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#includes (; 12 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (i32.ne (call $~lib/string/String#indexOf (get_local $0) - (get_local $1) - (get_local $2) + (i32.const 232) + (i32.const 0) ) (i32.const -1) ) @@ -2730,7 +2699,7 @@ ) ) ) - (func $~lib/internal/string/copyUnsafe (; 16 ;) (; has Stack IR ;) (type $iiiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (func $~lib/internal/string/copyUnsafe (; 16 ;) (; has Stack IR ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (call $~lib/internal/memory/memmove (i32.add (i32.add @@ -2743,17 +2712,11 @@ (i32.const 4) ) (i32.add - (i32.add - (get_local $2) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) + (get_local $2) (i32.const 4) ) (i32.shl - (get_local $4) + (get_local $3) (i32.const 1) ) ) @@ -2854,7 +2817,6 @@ (get_local $5) (get_local $3) (get_local $2) - (i32.const 0) (get_local $4) ) ) @@ -2863,7 +2825,6 @@ (get_local $5) (i32.const 0) (get_local $2) - (i32.const 0) (get_local $1) ) ) @@ -2873,13 +2834,13 @@ (get_local $5) (get_local $1) (get_local $0) - (i32.const 0) (get_local $6) ) ) (get_local $5) ) - (func $~lib/string/String#padStart|trampoline (; 18 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#padStart|trampoline (; 18 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -2968,7 +2929,6 @@ (get_local $1) (i32.const 0) (get_local $0) - (i32.const 0) (get_local $3) ) ) @@ -3012,7 +2972,6 @@ (get_local $3) ) (get_local $2) - (i32.const 0) (get_local $4) ) ) @@ -3021,13 +2980,13 @@ (get_local $1) (get_local $3) (get_local $2) - (i32.const 0) (get_local $6) ) ) (get_local $1) ) - (func $~lib/string/String#padEnd|trampoline (; 20 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#padEnd|trampoline (; 20 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -3137,7 +3096,6 @@ (get_local $0) (get_local $2) (get_local $1) - (i32.const 0) (get_local $4) ) (block @@ -3157,7 +3115,8 @@ ) (i32.const -1) ) - (func $~lib/string/String#lastIndexOf|trampoline (; 22 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#lastIndexOf|trampoline (; 22 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (block $1of1 (block $0of1 (block $outOfRange @@ -3546,10 +3505,10 @@ (get_local $5) ) ) - (func $~lib/string/parseInt (; 25 ;) (; has Stack IR ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/string/parseInt (; 25 ;) (; has Stack IR ;) (type $FUNCSIG$di) (param $0 i32) (result f64) (call $~lib/internal/string/parse (get_local $0) - (get_local $1) + (i32.const 0) ) ) (func $~lib/string/parseFloat (; 26 ;) (; has Stack IR ;) (type $iF) (param $0 i32) (result f64) @@ -3857,14 +3816,12 @@ ) (i32.const 0) (get_local $0) - (i32.const 0) (get_local $3) ) (call $~lib/internal/string/copyUnsafe (get_local $2) (get_local $3) (get_local $1) - (i32.const 0) (get_local $4) ) (get_local $2) @@ -3955,7 +3912,6 @@ (get_local $0) (i32.const 0) (get_local $1) - (i32.const 0) (select (get_local $2) (get_local $3) @@ -4032,7 +3988,6 @@ (get_local $0) (i32.const 0) (get_local $1) - (i32.const 0) (select (get_local $2) (get_local $3) @@ -4109,7 +4064,6 @@ (get_local $0) (i32.const 0) (get_local $1) - (i32.const 0) (select (get_local $2) (get_local $3) @@ -4122,60 +4076,50 @@ (i32.const 0) ) ) - (func $~lib/string/String.__lte (; 33 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lte (; 33 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) - (local $3 i32) (if (i32.eq (get_local $0) - (get_local $1) + (i32.const 256) ) (return (i32.const 1) ) ) + (if + (tee_local $1 + (i32.eqz + (get_local $0) + ) + ) + (return + (i32.const 0) + ) + ) + (set_local $1 + (i32.load + (i32.const 256) + ) + ) (if (i32.eqz (tee_local $2 - (i32.eqz + (i32.load (get_local $0) ) ) ) - (set_local $2 + (return (i32.eqz (get_local $1) ) ) ) - (if - (get_local $2) - (return - (i32.const 0) - ) - ) - (set_local $2 - (i32.load - (get_local $0) - ) - ) (if (i32.eqz - (tee_local $3 - (i32.load - (get_local $1) - ) - ) - ) - (return - (i32.eqz - (get_local $2) - ) - ) - ) - (if - (i32.eqz - (get_local $2) + (get_local $1) ) (return (i32.const 1) @@ -4183,16 +4127,15 @@ ) (i32.le_s (call $~lib/internal/string/compareUnsafe + (i32.const 256) + (i32.const 0) (get_local $0) - (i32.const 0) - (get_local $1) - (i32.const 0) (select + (get_local $1) (get_local $2) - (get_local $3) (i32.lt_s + (get_local $1) (get_local $2) - (get_local $3) ) ) ) @@ -4939,7 +4882,6 @@ (i32.ne (call $~lib/string/String#charCodeAt (get_global $std/string/str) - (i32.const 0) ) (i32.const 104) ) @@ -5068,8 +5010,6 @@ (i32.eqz (call $~lib/string/String#startsWith (get_global $std/string/str) - (i32.const 192) - (i32.const 0) ) ) (block @@ -5089,8 +5029,6 @@ (i32.eqz (call $~lib/string/String#endsWith|trampoline (get_global $std/string/str) - (i32.const 216) - (i32.const 0) ) ) (block @@ -5107,8 +5045,6 @@ (i32.eqz (call $~lib/string/String#includes (get_global $std/string/str) - (i32.const 232) - (i32.const 0) ) ) (block @@ -5130,7 +5066,6 @@ (call $~lib/string/String#padStart|trampoline (get_global $std/string/str) (i32.const 0) - (i32.const 0) ) (get_global $std/string/str) ) @@ -5154,7 +5089,6 @@ (call $~lib/string/String#padStart|trampoline (get_global $std/string/str) (i32.const 15) - (i32.const 0) ) (get_global $std/string/str) ) @@ -5178,7 +5112,6 @@ (call $~lib/string/String#padStart|trampoline (i32.const 256) (i32.const 3) - (i32.const 0) ) (i32.const 264) ) @@ -5244,7 +5177,6 @@ (call $~lib/string/String#padStart|trampoline (i32.const 288) (i32.const 5) - (i32.const 0) ) (i32.const 304) ) @@ -5310,7 +5242,6 @@ (call $~lib/string/String#padEnd|trampoline (get_global $std/string/str) (i32.const 0) - (i32.const 0) ) (get_global $std/string/str) ) @@ -5334,7 +5265,6 @@ (call $~lib/string/String#padEnd|trampoline (get_global $std/string/str) (i32.const 15) - (i32.const 0) ) (get_global $std/string/str) ) @@ -5358,7 +5288,6 @@ (call $~lib/string/String#padEnd|trampoline (i32.const 256) (i32.const 3) - (i32.const 0) ) (i32.const 264) ) @@ -5424,7 +5353,6 @@ (call $~lib/string/String#padEnd|trampoline (i32.const 288) (i32.const 5) - (i32.const 0) ) (i32.const 376) ) @@ -5634,7 +5562,6 @@ (call $~lib/string/String#lastIndexOf|trampoline (i32.const 256) (i32.const 256) - (i32.const 0) ) (block (call $~lib/env/abort @@ -5654,7 +5581,6 @@ (call $~lib/string/String#lastIndexOf|trampoline (i32.const 256) (i32.const 192) - (i32.const 0) ) (i32.const -1) ) @@ -5676,7 +5602,6 @@ (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) (i32.const 256) - (i32.const 0) ) (i32.load (get_global $std/string/str) @@ -5700,7 +5625,6 @@ (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) (i32.const 432) - (i32.const 0) ) (i32.const 2) ) @@ -5722,7 +5646,6 @@ (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) (i32.const 440) - (i32.const 0) ) (i32.const -1) ) @@ -5744,7 +5667,6 @@ (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) (i32.const 464) - (i32.const 0) ) (i32.const 15) ) @@ -5854,7 +5776,6 @@ (f64.ne (call $~lib/string/parseInt (i32.const 480) - (i32.const 0) ) (f64.const 0) ) @@ -5872,7 +5793,6 @@ (f64.ne (call $~lib/string/parseInt (i32.const 488) - (i32.const 0) ) (f64.const 1) ) @@ -5890,7 +5810,6 @@ (f64.ne (call $~lib/string/parseInt (i32.const 496) - (i32.const 0) ) (f64.const 5) ) @@ -5908,7 +5827,6 @@ (f64.ne (call $~lib/string/parseInt (i32.const 512) - (i32.const 0) ) (f64.const 455) ) @@ -5926,7 +5844,6 @@ (f64.ne (call $~lib/string/parseInt (i32.const 528) - (i32.const 0) ) (f64.const 3855) ) @@ -5944,7 +5861,6 @@ (f64.ne (call $~lib/string/parseInt (i32.const 544) - (i32.const 0) ) (f64.const 3855) ) @@ -5962,7 +5878,6 @@ (f64.ne (call $~lib/string/parseInt (i32.const 560) - (i32.const 0) ) (f64.const 11) ) @@ -5980,7 +5895,6 @@ (f64.ne (call $~lib/string/parseInt (i32.const 576) - (i32.const 0) ) (f64.const 1) ) @@ -6320,7 +6234,6 @@ (if (i32.eqz (call $~lib/string/String.__lte - (i32.const 256) (i32.const 288) ) ) @@ -6415,7 +6328,6 @@ (i32.eqz (call $~lib/string/String.__lte (i32.const 256) - (i32.const 256) ) ) (block diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index 740a6dd8..17544330 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -5,9 +5,12 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) - (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $iiv (func (param i32 i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -29,7 +32,8 @@ (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") (export "memory" (memory $0)) (start $start) - (func $~lib/symbol/Symbol (; 1 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/symbol/Symbol (; 1 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (set_global $~lib/symbol/nextId (i32.add (tee_local $0 @@ -131,9 +135,9 @@ ) (get_local $1) ) - (func $~lib/memory/memory.allocate (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 3 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 24) ) ) (func $~lib/internal/arraybuffer/computeSize (; 4 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) @@ -179,32 +183,31 @@ ) (get_local $1) ) - (func $~lib/internal/memory/memset (; 6 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -214,37 +217,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -254,74 +257,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -331,37 +323,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -371,66 +363,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -441,60 +433,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -509,11 +488,11 @@ ) ) ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (; 7 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/arraybuffer/ArrayBuffer#constructor (; 7 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (if (i32.gt_u - (get_local $1) + (get_local $0) (i32.const 1073741816) ) (block @@ -526,34 +505,32 @@ (unreachable) ) ) - (set_local $3 + (set_local $2 (call $~lib/internal/arraybuffer/allocateUnsafe - (get_local $1) + (get_local $0) ) ) (if (i32.eqz (i32.and - (get_local $2) + (get_local $1) (i32.const 1) ) ) (call $~lib/internal/memory/memset (i32.add - (get_local $3) + (get_local $2) (i32.const 8) ) - (i32.const 0) - (get_local $1) + (get_local $0) ) ) - (get_local $3) + (get_local $2) ) (func $~lib/map/Map#clear (; 8 ;) (; has Stack IR ;) (type $iv) (param $0 i32) (i32.store (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 16) (i32.const 0) ) @@ -565,7 +542,6 @@ (i32.store offset=8 (get_local $0) (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.const 48) (i32.const 1) ) @@ -583,41 +559,33 @@ (i32.const 0) ) ) - (func $~lib/map/Map#constructor (; 9 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 24) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=12 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=16 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=20 - (get_local $0) - (i32.const 0) - ) + (func $~lib/map/Map#constructor (; 9 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (i32.store + (tee_local $0 + (call $~lib/memory/memory.allocate) ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $0) + (i32.const 0) ) (call $~lib/map/Map#clear (get_local $0) @@ -672,50 +640,42 @@ ) (get_local $2) ) - (func $~lib/internal/string/compareUnsafe (; 11 ;) (; has Stack IR ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) - (local $5 i32) - (set_local $1 - (i32.add - (get_local $0) - (i32.shl - (get_local $1) - (i32.const 1) - ) - ) - ) - (set_local $2 - (i32.add - (get_local $2) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) + (func $~lib/internal/string/compareUnsafe (; 11 ;) (; has Stack IR ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (get_local $0) ) (loop $continue|0 (if (tee_local $0 (if (result i32) - (get_local $4) + (get_local $2) (i32.eqz - (tee_local $5 + (tee_local $4 (i32.sub (i32.load16_u offset=4 - (get_local $1) + (get_local $3) ) (i32.load16_u offset=4 - (get_local $2) + (get_local $1) ) ) ) ) - (get_local $4) + (get_local $2) ) ) (block - (set_local $4 + (set_local $2 (i32.sub - (get_local $4) + (get_local $2) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) (i32.const 1) ) ) @@ -725,17 +685,11 @@ (i32.const 1) ) ) - (set_local $2 - (i32.add - (get_local $2) - (i32.const 1) - ) - ) (br $continue|0) ) ) ) - (get_local $5) + (get_local $4) ) (func $~lib/string/String.__eq (; 12 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -786,9 +740,7 @@ (i32.eqz (call $~lib/internal/string/compareUnsafe (get_local $0) - (i32.const 0) (get_local $1) - (i32.const 0) (get_local $2) ) ) @@ -897,7 +849,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -912,7 +863,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.mul (tee_local $7 (i32.trunc_s/f64 @@ -1305,7 +1255,6 @@ (local $8 i32) (set_local $4 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.shl (tee_local $2 (i32.add @@ -1320,7 +1269,6 @@ ) (set_local $5 (call $~lib/arraybuffer/ArrayBuffer#constructor - (i32.const 0) (i32.mul (tee_local $7 (i32.trunc_s/f64 @@ -1595,38 +1543,34 @@ ) ) ) - (func $~lib/symbol/Symbol.for (; 22 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/symbol/Symbol.for (; 22 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) (if (get_global $~lib/symbol/stringToId) (if (call $~lib/map/Map#has (get_global $~lib/symbol/stringToId) - (get_local $0) + (i32.const 8) ) (return (call $~lib/map/Map#get (get_global $~lib/symbol/stringToId) - (get_local $0) + (i32.const 8) ) ) ) (block (set_global $~lib/symbol/stringToId - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) (set_global $~lib/symbol/idToString - (call $~lib/map/Map#constructor - (i32.const 0) - ) + (call $~lib/map/Map#constructor) ) ) ) (set_global $~lib/symbol/nextId (i32.add - (tee_local $1 + (tee_local $0 (get_global $~lib/symbol/nextId) ) (i32.const 1) @@ -1634,21 +1578,21 @@ ) (if (i32.eqz - (get_local $1) + (get_local $0) ) (unreachable) ) (call $~lib/map/Map#set (get_global $~lib/symbol/stringToId) + (i32.const 8) (get_local $0) - (get_local $1) ) (call $~lib/map/Map#set (get_global $~lib/symbol/idToString) - (get_local $1) (get_local $0) + (i32.const 8) ) - (get_local $1) + (get_local $0) ) (func $~lib/map/Map#has (; 23 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (i32.ne @@ -1716,14 +1660,10 @@ (get_global $~lib/allocator/arena/startOffset) ) (set_global $std/symbol/sym1 - (call $~lib/symbol/Symbol - (i32.const 8) - ) + (call $~lib/symbol/Symbol) ) (set_global $std/symbol/sym2 - (call $~lib/symbol/Symbol - (i32.const 8) - ) + (call $~lib/symbol/Symbol) ) (if (i32.eq @@ -1741,14 +1681,10 @@ ) ) (set_global $std/symbol/sym3 - (call $~lib/symbol/Symbol.for - (i32.const 8) - ) + (call $~lib/symbol/Symbol.for) ) (set_global $std/symbol/sym4 - (call $~lib/symbol/Symbol.for - (i32.const 8) - ) + (call $~lib/symbol/Symbol.for) ) (if (i32.ne diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 6dfe0e0e..6acbe10c 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -4,11 +4,14 @@ (type $iii (func (param i32 i32) (result i32))) (type $ii (func (param i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) - (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiFv (func (param i32 i32 f64))) (type $FFi (func (param f64 f64) (result i32))) (type $iiF (func (param i32 i32) (result f64))) (type $v (func)) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) @@ -153,32 +156,31 @@ ) (get_local $1) ) - (func $~lib/internal/memory/memset (; 4 ;) (; has Stack IR ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) + (func $~lib/internal/memory/memset (; 4 ;) (; has Stack IR ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) (if (i32.eqz - (get_local $2) + (get_local $1) ) (return) ) (i32.store8 (get_local $0) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 2) ) (return) @@ -188,37 +190,37 @@ (get_local $0) (i32.const 1) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.add (get_local $0) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 2) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub - (get_local $3) + (get_local $2) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 6) ) (return) @@ -228,74 +230,63 @@ (get_local $0) (i32.const 3) ) - (get_local $1) + (i32.const 0) ) (i32.store8 (i32.sub (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) ) - (set_local $2 - (i32.sub - (get_local $2) - (tee_local $3 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) - ) - ) (i32.store (tee_local $0 (i32.add (get_local $0) - (get_local $3) - ) - ) - (tee_local $1 - (i32.mul - (i32.and - (get_local $1) - (i32.const 255) + (tee_local $2 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) ) - (i32.const 16843009) ) ) + (i32.const 0) ) (i32.store (i32.sub (i32.add (get_local $0) - (tee_local $2 + (tee_local $1 (i32.and - (get_local $2) + (i32.sub + (get_local $1) + (get_local $2) + ) (i32.const -4) ) ) ) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 8) ) (return) @@ -305,37 +296,37 @@ (get_local $0) (i32.const 4) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 8) ) - (get_local $1) + (i32.const 0) ) (if (i32.le_u - (get_local $2) + (get_local $1) (i32.const 24) ) (return) @@ -345,66 +336,66 @@ (get_local $0) (i32.const 12) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (tee_local $3 + (tee_local $2 (i32.add (get_local $0) - (get_local $2) + (get_local $1) ) ) (i32.const 28) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 24) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 20) ) - (get_local $1) + (i32.const 0) ) (i32.store (i32.sub - (get_local $3) + (get_local $2) (i32.const 16) ) - (get_local $1) + (i32.const 0) ) (set_local $0 (i32.add (get_local $0) - (tee_local $3 + (tee_local $2 (i32.add (i32.and (get_local $0) @@ -415,60 +406,47 @@ ) ) ) - (set_local $2 + (set_local $1 (i32.sub + (get_local $1) (get_local $2) - (get_local $3) - ) - ) - (set_local $4 - (i64.or - (tee_local $4 - (i64.extend_u/i32 - (get_local $1) - ) - ) - (i64.shl - (get_local $4) - (i64.const 32) - ) ) ) (loop $continue|0 (if (i32.ge_u - (get_local $2) + (get_local $1) (i32.const 32) ) (block (i64.store (get_local $0) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $4) + (i64.const 0) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $4) + (i64.const 0) ) - (set_local $2 + (set_local $1 (i32.sub - (get_local $2) + (get_local $1) (i32.const 32) ) ) @@ -483,16 +461,17 @@ ) ) ) - (func $~lib/memory/memory.allocate (; 5 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 5 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (call $~lib/allocator/arena/__memory_allocate - (get_local $0) + (i32.const 12) ) ) - (func $~lib/internal/typedarray/TypedArray#constructor (; 6 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/internal/typedarray/TypedArray#constructor (; 6 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (if (i32.gt_u - (get_local $1) + (get_local $0) (i32.const 1073741816) ) (block @@ -509,56 +488,47 @@ (i32.add (tee_local $2 (call $~lib/internal/arraybuffer/allocateUnsafe - (get_local $1) + (get_local $0) ) ) (i32.const 8) ) - (i32.const 0) - (get_local $1) - ) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 12) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - ) + (get_local $0) ) (i32.store - (get_local $0) - (get_local $2) + (tee_local $1 + (call $~lib/memory/memory.allocate) + ) + (i32.const 0) ) (i32.store offset=4 - (get_local $0) + (get_local $1) (i32.const 0) ) (i32.store offset=8 - (get_local $0) (get_local $1) + (i32.const 0) ) - (get_local $0) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (get_local $0) + ) + (get_local $1) ) - (func $~lib/internal/typedarray/TypedArray#constructor (; 7 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/internal/typedarray/TypedArray#constructor (; 7 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (if (i32.gt_u - (get_local $1) + (get_local $0) (i32.const 536870908) ) (block @@ -575,9 +545,9 @@ (i32.add (tee_local $2 (call $~lib/internal/arraybuffer/allocateUnsafe - (tee_local $1 + (tee_local $0 (i32.shl - (get_local $1) + (get_local $0) (i32.const 1) ) ) @@ -585,51 +555,42 @@ ) (i32.const 8) ) - (i32.const 0) - (get_local $1) - ) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 12) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - ) + (get_local $0) ) (i32.store - (get_local $0) - (get_local $2) + (tee_local $1 + (call $~lib/memory/memory.allocate) + ) + (i32.const 0) ) (i32.store offset=4 - (get_local $0) + (get_local $1) (i32.const 0) ) (i32.store offset=8 - (get_local $0) (get_local $1) + (i32.const 0) ) - (get_local $0) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (get_local $0) + ) + (get_local $1) ) - (func $~lib/internal/typedarray/TypedArray#constructor (; 8 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/internal/typedarray/TypedArray#constructor (; 8 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (if (i32.gt_u - (get_local $1) + (get_local $0) (i32.const 268435454) ) (block @@ -646,9 +607,9 @@ (i32.add (tee_local $2 (call $~lib/internal/arraybuffer/allocateUnsafe - (tee_local $1 + (tee_local $0 (i32.shl - (get_local $1) + (get_local $0) (i32.const 2) ) ) @@ -656,51 +617,42 @@ ) (i32.const 8) ) - (i32.const 0) - (get_local $1) - ) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 12) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - ) + (get_local $0) ) (i32.store - (get_local $0) - (get_local $2) + (tee_local $1 + (call $~lib/memory/memory.allocate) + ) + (i32.const 0) ) (i32.store offset=4 - (get_local $0) + (get_local $1) (i32.const 0) ) (i32.store offset=8 - (get_local $0) (get_local $1) + (i32.const 0) ) - (get_local $0) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (get_local $0) + ) + (get_local $1) ) - (func $~lib/internal/typedarray/TypedArray#constructor (; 9 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/internal/typedarray/TypedArray#constructor (; 9 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (if (i32.gt_u - (get_local $1) + (get_local $0) (i32.const 134217727) ) (block @@ -717,9 +669,9 @@ (i32.add (tee_local $2 (call $~lib/internal/arraybuffer/allocateUnsafe - (tee_local $1 + (tee_local $0 (i32.shl - (get_local $1) + (get_local $0) (i32.const 3) ) ) @@ -727,45 +679,35 @@ ) (i32.const 8) ) - (i32.const 0) - (get_local $1) - ) - (if - (i32.eqz - (get_local $0) - ) - (block - (i32.store - (tee_local $0 - (call $~lib/memory/memory.allocate - (i32.const 12) - ) - ) - (i32.const 0) - ) - (i32.store offset=4 - (get_local $0) - (i32.const 0) - ) - (i32.store offset=8 - (get_local $0) - (i32.const 0) - ) - ) + (get_local $0) ) (i32.store - (get_local $0) - (get_local $2) + (tee_local $1 + (call $~lib/memory/memory.allocate) + ) + (i32.const 0) ) (i32.store offset=4 - (get_local $0) + (get_local $1) (i32.const 0) ) (i32.store offset=8 - (get_local $0) (get_local $1) + (i32.const 0) ) - (get_local $0) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (get_local $0) + ) + (get_local $1) ) (func $std/typedarray/testInstantiate (; 10 ;) (; has Stack IR ;) (type $iv) (param $0 i32) (local $1 i32) @@ -773,7 +715,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -831,7 +772,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -889,7 +829,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -947,7 +886,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -1011,7 +949,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -1075,7 +1012,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -1139,7 +1075,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -1203,7 +1138,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -1267,7 +1201,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -1331,7 +1264,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -1395,7 +1327,6 @@ (i32.load offset=4 (tee_local $1 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (get_local $0) ) ) @@ -1545,93 +1476,53 @@ ) ) ) - (func $~lib/typedarray/Int32Array#subarray (; 13 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/typedarray/Int32Array#subarray (; 13 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - (set_local $4 - (i32.shr_s - (i32.sub - (i32.load offset=8 - (get_local $0) - ) - (i32.load offset=4 - (get_local $0) + (set_local $2 + (select + (i32.const 1) + (tee_local $1 + (i32.shr_s + (i32.sub + (i32.load offset=8 + (get_local $0) + ) + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.const 2) ) ) - (i32.const 2) + (i32.lt_s + (i32.const 1) + (get_local $1) + ) ) ) - (set_local $1 - (if (result i32) - (i32.lt_s - (get_local $1) - (i32.const 0) - ) - (select - (tee_local $3 - (i32.add - (get_local $4) + (set_local $3 + (select + (tee_local $1 + (select + (i32.const 2) + (get_local $1) + (i32.lt_s + (i32.const 2) (get_local $1) ) ) - (i32.const 0) - (i32.gt_s - (get_local $3) - (i32.const 0) - ) ) - (select - (tee_local $3 - (get_local $1) - ) - (get_local $4) - (i32.lt_s - (get_local $1) - (get_local $4) - ) - ) - ) - ) - (set_local $2 - (if (result i32) - (i32.lt_s + (get_local $2) + (i32.gt_s + (get_local $1) (get_local $2) - (i32.const 0) - ) - (select - (tee_local $3 - (i32.add - (get_local $4) - (get_local $2) - ) - ) - (get_local $1) - (i32.gt_s - (get_local $3) - (get_local $1) - ) - ) - (select - (tee_local $3 - (select - (get_local $2) - (get_local $4) - (i32.lt_s - (get_local $2) - (get_local $4) - ) - ) - ) - (get_local $1) - (i32.gt_s - (get_local $3) - (get_local $1) - ) ) ) ) (i32.store - (tee_local $3 + (tee_local $1 (call $~lib/allocator/arena/__memory_allocate (i32.const 12) ) @@ -1641,20 +1532,20 @@ ) ) (i32.store offset=4 - (get_local $3) - (i32.shl - (get_local $1) - (i32.const 2) - ) - ) - (i32.store offset=8 - (get_local $3) + (get_local $1) (i32.shl (get_local $2) (i32.const 2) ) ) - (get_local $3) + (i32.store offset=8 + (get_local $1) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + (get_local $1) ) (func $~lib/internal/typedarray/TypedArray#__set (; 14 ;) (; has Stack IR ;) (type $iiFv) (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) @@ -1701,93 +1592,53 @@ (get_local $2) ) ) - (func $~lib/typedarray/Float64Array#subarray (; 15 ;) (; has Stack IR ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/typedarray/Float64Array#subarray (; 15 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - (set_local $4 - (i32.shr_s - (i32.sub - (i32.load offset=8 - (get_local $0) - ) - (i32.load offset=4 - (get_local $0) + (set_local $2 + (select + (i32.const 2) + (tee_local $1 + (i32.shr_s + (i32.sub + (i32.load offset=8 + (get_local $0) + ) + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.const 3) ) ) - (i32.const 3) + (i32.lt_s + (i32.const 2) + (get_local $1) + ) ) ) - (set_local $1 - (if (result i32) - (i32.lt_s - (get_local $1) - (i32.const 0) - ) - (select - (tee_local $3 - (i32.add - (get_local $4) + (set_local $3 + (select + (tee_local $1 + (select + (i32.const 6) + (get_local $1) + (i32.lt_s + (i32.const 6) (get_local $1) ) ) - (i32.const 0) - (i32.gt_s - (get_local $3) - (i32.const 0) - ) ) - (select - (tee_local $3 - (get_local $1) - ) - (get_local $4) - (i32.lt_s - (get_local $1) - (get_local $4) - ) - ) - ) - ) - (set_local $2 - (if (result i32) - (i32.lt_s + (get_local $2) + (i32.gt_s + (get_local $1) (get_local $2) - (i32.const 0) - ) - (select - (tee_local $3 - (i32.add - (get_local $4) - (get_local $2) - ) - ) - (get_local $1) - (i32.gt_s - (get_local $3) - (get_local $1) - ) - ) - (select - (tee_local $3 - (select - (get_local $2) - (get_local $4) - (i32.lt_s - (get_local $2) - (get_local $4) - ) - ) - ) - (get_local $1) - (i32.gt_s - (get_local $3) - (get_local $1) - ) ) ) ) (i32.store - (tee_local $3 + (tee_local $1 (call $~lib/allocator/arena/__memory_allocate (i32.const 12) ) @@ -1797,20 +1648,20 @@ ) ) (i32.store offset=4 - (get_local $3) - (i32.shl - (get_local $1) - (i32.const 3) - ) - ) - (i32.store offset=8 - (get_local $3) + (get_local $1) (i32.shl (get_local $2) (i32.const 3) ) ) - (get_local $3) + (i32.store offset=8 + (get_local $1) + (i32.shl + (get_local $3) + (i32.const 3) + ) + ) + (get_local $1) ) (func $~lib/internal/array/insertionSort (; 16 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (local $4 i32) @@ -1936,7 +1787,7 @@ ) ) ) - (func $~lib/allocator/arena/__memory_free (; 17 ;) (; has Stack IR ;) (type $iv) (param $0 i32) + (func $~lib/allocator/arena/__memory_free (; 17 ;) (; has Stack IR ;) (type $FUNCSIG$v) (nop) ) (func $~lib/internal/array/weakHeapSort (; 18 ;) (; has Stack IR ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) @@ -1963,7 +1814,6 @@ ) ) ) - (i32.const 0) (get_local $6) ) (block $break|0 @@ -2342,9 +2192,7 @@ (br $repeat|2) ) ) - (call $~lib/allocator/arena/__memory_free - (get_local $8) - ) + (call $~lib/allocator/arena/__memory_free) (set_local $7 (f64.load offset=8 (i32.add @@ -2542,7 +2390,7 @@ ) ) ) - (func $~lib/internal/typedarray/TypedArray#sort|trampoline (; 21 ;) (; has Stack IR ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/internal/typedarray/TypedArray#sort|trampoline (; 21 ;) (; has Stack IR ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (block $1of1 (block $0of1 (block $outOfRange @@ -2552,13 +2400,10 @@ ) (unreachable) ) - (set_local $1 - (i32.const 0) - ) ) (call $~lib/internal/typedarray/TypedArray#sort (get_local $0) - (get_local $1) + (i32.const 0) ) ) (func $~lib/internal/typedarray/TypedArray#__get (; 22 ;) (; has Stack IR ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) @@ -2722,7 +2567,6 @@ ) (set_global $std/typedarray/arr (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (i32.const 3) ) ) @@ -2856,8 +2700,6 @@ (set_global $std/typedarray/arr (call $~lib/typedarray/Int32Array#subarray (get_global $std/typedarray/arr) - (i32.const 1) - (i32.const 2) ) ) (if @@ -2941,7 +2783,6 @@ ) (set_global $std/typedarray/af64 (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (i32.const 8) ) ) @@ -2988,8 +2829,6 @@ (set_global $std/typedarray/af64 (call $~lib/typedarray/Float64Array#subarray (get_global $std/typedarray/af64) - (i32.const 2) - (i32.const 6) ) ) (if @@ -3025,7 +2864,6 @@ (drop (call $~lib/internal/typedarray/TypedArray#sort|trampoline (get_global $std/typedarray/af64) - (i32.const 0) ) ) (if @@ -3088,7 +2926,6 @@ ) (set_global $std/typedarray/clampedArr (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (i32.const 3) ) ) @@ -3169,7 +3006,6 @@ ) (drop (call $~lib/internal/typedarray/TypedArray#constructor - (i32.const 0) (i32.const 134217727) ) ) diff --git a/tests/compiler/switch.optimized.wat b/tests/compiler/switch.optimized.wat index 0f24a907..27ebf93a 100644 --- a/tests/compiler/switch.optimized.wat +++ b/tests/compiler/switch.optimized.wat @@ -2,6 +2,7 @@ (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) + (type $FUNCSIG$i (func (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\t\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s") @@ -140,7 +141,7 @@ ) (i32.const 2) ) - (func $switch/doSwitchEmpty (; 7 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (func $switch/doSwitchEmpty (; 7 ;) (; has Stack IR ;) (type $FUNCSIG$i) (result i32) (i32.const 2) ) (func $start (; 8 ;) (; has Stack IR ;) (type $v) @@ -587,9 +588,7 @@ ) (if (i32.ne - (call $switch/doSwitchEmpty - (i32.const 0) - ) + (call $switch/doSwitchEmpty) (i32.const 2) ) (block @@ -604,9 +603,7 @@ ) (if (i32.ne - (call $switch/doSwitchEmpty - (i32.const 1) - ) + (call $switch/doSwitchEmpty) (i32.const 2) ) (block @@ -621,9 +618,7 @@ ) (if (i32.ne - (call $switch/doSwitchEmpty - (i32.const 2) - ) + (call $switch/doSwitchEmpty) (i32.const 2) ) (block